<?php
namespace SaintElmos\BaseBundle\Templating\Helper;
use SaintElmos\BaseBundle\Services\ImageResponsive;
use SimpleXMLElement;
use Symfony\Component\Form\Extension\Templating\TemplatingRendererEngine;
use Symfony\Component\Templating\Helper\Helper;
use Pimcore\Model\Asset;
use Pimcore\Model\Document;
use Pimcore\Model\Document\Service;
use Pimcore\Model\Asset\Image\Thumbnail\Config\Listing;
use Symfony\Component\Templating\Loader\Loader;
use Symfony\Component\Templating\TemplateNameParser;
class FrontendHelper extends Helper
{
public function getName()
{
return 'FrontendHelper';
}
//************************************************************************************************
/*
* ++++++ Ausgabebeispiel: echo $this->frontendHelper()->myFunction(); ++++++
*
* createMultiselect() Erzeugt ein Mehrfach Auswahl Feld
*
* showTemplateName() Gibt den Templat-Namen eines Sippets zurück
*
* showTextarea() gibt Textarea bereinigt zurück
*
* idToPath() Wandelt ID in Pfad um
*
* pathToId() Wandelt Pfad in ID um
*
* allowOpen() IP Überprüfung
*
* compress() Entfernung von Zeilenumbrüchen und Kommentare => Ausgabe in einer Zeile
*
* showSnippet() includiert gerendertes Snippet
*
* checkMultiselect() Prüft ein Mehrfach Auswahl Feld
*
* db() Datenbank Zugang
*
* getStaticFile() Setzt Parameter um Cache zu umgehen
*
* changeTextarea() gibt Textarea bereinigt (Entities umwandeln) zurück
*
* getImgResponsive() Erzeugt Container /Img mit Thumbnails für Divice Wechsel
*
* getHrefElemente() zerlegt <a href= "" target="" ... und gibt den Value einzelner Attribute zurück
*
* getHref() <a href= "" target="" ... > zurück
*
* clearTelnumber() Säubert Telefonnummer (technisch kor. zum telefonieren)
*
*/
//************************************************************************************************
/**
* Gibt den Templat-Namen eines Sippets zurück
*
* @param int $id
* @return string
*/
public function showTemplateName($id)
{
$document = \Pimcore\Model\Document::getById($id);
$templatepath = $document->getTemplate();
$file = explode(':' , $templatepath);
$count_elemente = count($file)-1;
$name = str_replace('.html.twig', '', $file[$count_elemente]);
return $name;
}
//************************************************************************************************
/**
* gibt Textarea bereinigt zurück
*
* @param mixed $that
* @param string $textareaName
* @return string
*/
public function showTextarea($that, $textareaName)
{
return trim(nl2br(html_entity_decode($that->textarea($textareaName))));
}
//************************************************************************************************
/**
* Wandelt ID in Pfad um
*
* @param string $element D für Document | A für Asset | O für Object
* @param int $id
* @return string
*/
public function idToPath($element, $id)
{
$id = trim($id);
$pos = strpos($id, '/');
$ausgabe = '#';
if ($pos === false)
{
try
{
switch ($element)
{
case 'D';
if (is_object(\Pimcore\Model\Document::getById($id)))
{
$ausgabe = \Pimcore\Model\Document::getById($id)->getFullPath();
}
break;
case 'A';
if (is_object(\Pimcore\Model\Asset::getById($id)))
{
$ausgabe = \Pimcore\Model\Asset::getById($id)->getFullPath();
}
if (!is_file($_SERVER["DOCUMENT_ROOT"] . '/var/assets' . $ausgabe))
{
$ausgabe = null;
}
break;
case 'O';
if (is_object(\Pimcore\Model\DataObject::getById($id)))
{
$ausgabe = \Pimcore\Model\DataObject::getById($id)->getFullPath();
}
break;
}
} catch (Exception $e)
{
$ausgabe = null;
}
}
return $ausgabe;
}
//************************************************************************************************
/**
* Wandelt Pfad in ID um
*
* @param string $element D für Document | A für Asset | O für Object
* @param string $path
* @return String
*/
function pathToId($element, $path)
{
$pos = strpos($path, '/');
if ($pos === false)
{
$ausgabe = '0';
}
else
{
switch ($element)
{
case 'D';
if (is_object(\Pimcore\Model\Document::getByPath($path)))
{
$ausgabe = \Pimcore\Model\Document::getByPath($path)->getId();
}
break;
case 'A';
if (is_object(\Pimcore\Model\Asset::getByPath($path)))
{
$ausgabe = \Pimcore\Model\Asset::getByPath($path)->getId();
}
if (!is_file($_SERVER["DOCUMENT_ROOT"] . '/var/assets' . $path))
{
$ausgabe = null;
}
break;
case 'O';
if (is_object(\Pimcore\Model\DataObject::getByPath($path)))
{
$ausgabe = \Pimcore\Model\DataObject::getByPath($path)->getId();
}
break;
}
}
return $ausgabe;
}
//************************************************************************************************
/**
* IP Überprüfung
*
* @return bool
*/
public function allowOpen($that)
{
$erlaubte_ip = $that->getParameter('ip_whitelist');
$erlaubteipArray = explode(',', $erlaubte_ip);
$myIP = (string)$_SERVER["REMOTE_ADDR"];
return (in_array($myIP, $erlaubteipArray)) ? true : false;
}
//************************************************************************************************
/**
* Entfernung von Zeilenumbrüchen und Kommentare => Ausgabe in einer Zeile
*
* @param string $buffer
* @return string
*/
public function compress($buffer)
{
// remove comments
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
// remove tabs, newlines, etc.
$buffer = str_replace(array("\r\n", "\r", "\n", "\t"), '', $buffer);
//remove multiple spaces
$buffer = preg_replace('/\s\s+/', ' ', $buffer);
return $buffer;
}
//************************************************************************************************
/**
* includiert gerendertes Snippet
*
* @param mixed $datei
* @return
*
* Ausgabebeispiel: echo $this->frontendHelper()->getSnippet('6',['parameter1' => 'Ausgabe Param 1', 'parameter2'=>'Ausgabe Param 1']);
* Ausgabebeispiel Parameter im Snippet: echo $this->getParam('parameter1') / oder print_r(getParams());
*/
function showSnippet($file,$optionalParamsArray=array(),$useLayout=false)
{
$file = trim($file);
if (is_numeric((int)$file) && (int)$file != 0)
{
$id = (int)$file;
if (is_object(\Pimcore\Model\Document::getById($id)))
{
$path = \Pimcore\Model\Document::getById($id)->getFullPath();
}
}
else
{
if (is_object(\Pimcore\Model\Document::getByPath($file)))
{
$id = (int)\Pimcore\Model\Document::getByPath($file)->getId();
}
$path = $file;
}
if (\Pimcore\Model\Document\Service::pathExists($path))
{
$isFileExists = true;
}
else
{
$isFileExists = false;
}
if($isFileExists)
{
$doc = \Pimcore\Model\Document::getById($id);
$mySnippet = \Pimcore\Model\Document\Service::render($doc, $optionalParamsArray, $useLayout);
return $mySnippet;
}
else
{
return 'ERROR => File not exist!';
}
}
//************************************************************************************************
/**
* random Farbcode für Demo-Container
*
*/
function generateRandomColor(){
$randomcolor = '#' . strtoupper(dechex(rand(0,10000000)));
if (strlen($randomcolor) != 7){
$randomcolor = str_pad($randomcolor, 10, '0', STR_PAD_RIGHT);
$randomcolor = substr($randomcolor,0,7);
}
return $randomcolor;
}
//************************************************************************************************
/**
* Prüft ein Mehrfach Auswahl Feld
*
* @param string $inputStr
* @param string $check
* @return bool
*/
function checkMultiselect($inputStr, $check)
{
$inputArray = explode(',', $inputStr);
$result = (in_array($check, $inputArray)) ? true : false;
return $result;
}
//************************************************************************************************
/**
* Datenbank Zugang
*
* BEISPIEL:
* $sql = "SELECT * FROM properties WHERE name = 'breadcrumb_StartNode'";
$properties = $db->fetchAll($sql);
foreach ($properties as $key => $daten)
{
error_log(print_r($daten,true));
echo $daten['data'];
echo '<br />';
}
*
*/
function db()
{
$db = \Pimcore::getContainer()->get('doctrine.dbal.default_connection');
return $db;
}
//************************************************************************************************
/**
* Setzt Timestamp als Parameter
*
* @param string $path
* @return string
*/
function getStaticFile($path)
{
$timestamp = '?mt=' . microtime(true);
$timestamp = str_replace(".", "", $timestamp);
$x = (DEBUG)? '_ja' : '_nein' ;
if(DEBUG)
{
return $path . $timestamp;
}
else
{
return $path;
}
}
//************************************************************************************************
/**
* gibt Textarea bereinigt (Entities umwandeln) zurück
*
* @param mixed $that
* @param string $textareaName
* @return string
*/
public function changeTextarea($text)
{
return trim(nl2br(html_entity_decode($text)));
}
//************************************************************************************************
/**
* Returns responsive image
* @param $propertyArray
* @return string
*/
public function getImgResponsive($propertyArray)
{
/**
* @var $service ImageResponsive
*/
$service = \Pimcore::getContainer()->get(ImageResponsive::class);
return $service->getImgResponsive($propertyArray);
}
//************************************************************************************************
//************************************************************************************************
/**
* Returns Attribute Value
* @param string $href
* @param string $attribut
* @return string
*/
public function getHrefElemente($href,$attribut)
{
$a = new SimpleXMLElement($href);
$attribut_value = '';
if($attribut == 'text'){
$attribut_value = (string)$a[0];
} else {
$attribut_value = (string)$a[$attribut];
}
return $attribut_value ;
}
//************************************************************************************************
//************************************************************************************************
/**
* Returns Attribute Value
* @param string $href
* @param string $attribut
* @return string
*/
public function getHref($href)
{
$a = new SimpleXMLElement($href);
$replace = (string)$a[0] . '</a>';
$result = str_replace($replace, "", $href);
return $result;
}
//************************************************************************************************
//************************************************************************************************
/**
* Returns Attribute Value
* @param string $telnumber
* @return string
*/
public function clearTelnumber($telnumber)
{
$tel = preg_replace("<^\\+>", "00", $telnumber);
$tel_clear = preg_replace("<\\D+>", "", $tel);
return $tel_clear;
}
//************************************************************************************************
}