コード例 #1
0
ファイル: HtmlTagRenderer.php プロジェクト: cargomedia/cm
 /**
  * @param string      $elementName
  * @param string|null $content
  * @param array|null  $attributes
  * @param array|null  $dataAttributes
  * @return string
  * @throws CM_Exception_Invalid
  */
 public function renderTag($elementName, $content = null, array $attributes = null, array $dataAttributes = null)
 {
     $elementName = (string) $elementName;
     if ('' === $elementName) {
         throw new CM_Exception_Invalid('Empty element name');
     }
     $content = (string) $content;
     if (null === $attributes) {
         $attributes = [];
     }
     if (null === $dataAttributes) {
         $dataAttributes = [];
     }
     // http://www.w3.org/TR/html-markup/syntax.html#void-element
     $namesVoid = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
     $html = '<' . $elementName;
     foreach ($dataAttributes as $dataKey => $dataValue) {
         $attributes['data-' . $dataKey] = $dataValue;
     }
     foreach ($attributes as $attributeName => $attributeValue) {
         if (isset($attributeValue)) {
             $html .= ' ' . CM_Util::htmlspecialchars($attributeName) . '="' . CM_Util::htmlspecialchars($attributeValue) . '"';
         }
     }
     if (in_array($elementName, $namesVoid)) {
         $html .= '>';
     } else {
         $html .= '>' . $content . '</' . $elementName . '>';
     }
     return $html;
 }
コード例 #2
0
ファイル: function.tag.php プロジェクト: NicolasSchmutz/cm
function smarty_function_tag(array $params, Smarty_Internal_Template $template)
{
    if (!isset($params['el'])) {
        trigger_error('Param `el` missing.');
    }
    $name = $params['el'];
    unset($params['el']);
    $content = '';
    if (isset($params['content'])) {
        $content = (string) $params['content'];
        unset($params['content']);
    }
    $attributes = $params;
    // http://www.w3.org/TR/html-markup/syntax.html#void-element
    $namesVoid = array('area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr');
    $html = '<' . $name;
    foreach ($attributes as $attributeName => $attributeValue) {
        if (isset($attributeValue)) {
            $html .= ' ' . $attributeName . '="' . CM_Util::htmlspecialchars($attributeValue) . '"';
        }
    }
    if (in_array($name, $namesVoid)) {
        $html .= '>';
    } else {
        $html .= '>' . $content . '</' . $name . '>';
    }
    return $html;
}
コード例 #3
0
ファイル: Epom.php プロジェクト: cargomedia/cm
 public function getHtml($zoneName, $zoneData, array $variables)
 {
     $zoneId = CM_Util::htmlspecialchars($zoneData['zoneId']);
     $variables = $this->_variableKeysToUnderscore($variables);
     $variables['key'] = $zoneData['accessKey'];
     $html = '<div id="epom-' . $zoneId . '" class="epom-ad" data-zone-name="' . $zoneName . '" data-variables="' . CM_Util::htmlspecialchars(json_encode($variables, JSON_FORCE_OBJECT)) . '"></div>';
     return $html;
 }
コード例 #4
0
ファイル: Iframe.php プロジェクト: cargomedia/cm
 public function getHtml($zoneName, $zoneData, array $variables)
 {
     $src = (string) $zoneData['src'];
     $width = (string) $zoneData['width'];
     $height = (string) $zoneData['height'];
     $params = ['src' => $src, 'width' => $width, 'height' => $height, 'class' => 'advertisement-hasContent', 'data-variables' => json_encode($variables, JSON_FORCE_OBJECT), 'frameborder' => 0, 'scrolling' => 'no'];
     $params = Functional\map($params, function ($value, $key) {
         return $key . '="' . CM_Util::htmlspecialchars($value) . '"';
     });
     return '<iframe ' . join(' ', $params) . '></iframe>';
 }
コード例 #5
0
function smarty_function_locationFlag(array $params, Smarty_Internal_Template $template)
{
    /** @var CM_Frontend_Render $render */
    $render = $template->smarty->getTemplateVars('render');
    /** @var CM_Model_Location $location */
    $location = $params['location'];
    $html = '';
    if ($abbreviation = $location->getAbbreviation(CM_Model_Location::LEVEL_COUNTRY)) {
        $flagUrl = $render->getUrlResource('layout', 'img/flags/' . strtolower($abbreviation) . '.png');
        $name = $location->getName(CM_Model_Location::LEVEL_COUNTRY);
        $html .= '<img class="flag" src="' . $flagUrl . '" title="' . CM_Util::htmlspecialchars($name) . '" />';
    }
    return $html;
}
コード例 #6
0
ファイル: function.img.php プロジェクト: cargomedia/cm
function smarty_function_img(array $params, Smarty_Internal_Template $template)
{
    /** @var CM_Frontend_Render $render */
    $render = $template->smarty->getTemplateVars('render');
    $path = $params['path'];
    $params = array_merge(['width' => null, 'height' => null, 'title' => null, 'class' => null, 'site' => null], $params);
    if (preg_match('#(^/|://)#', $path)) {
        $url = $path;
    } elseif (!empty($params['static'])) {
        $url = $render->getUrlStatic('/img/' . $path, $params['site']);
    } else {
        $url = $render->getUrlResource('layout', 'img/' . $path, null, $params['site']);
    }
    $html = '<img src="' . $url . '"';
    if (isset($params['background-image'])) {
        $backgroundImage = (string) $params['background-image'];
        if (preg_match('#(^/|://|^data:)#', $backgroundImage)) {
            $backgroundImageUrl = $backgroundImage;
        } elseif (!empty($params['static'])) {
            $backgroundImageUrl = $render->getUrlStatic('/img/' . $backgroundImage, $params['site']);
        } else {
            $backgroundImageUrl = $render->getUrlResource('layout', 'img/' . $backgroundImage, null, $params['site']);
        }
        $html .= ' style="background-image: url(' . CM_Util::htmlspecialchars($backgroundImageUrl) . ')"';
        $params['class'] = (string) $params['class'];
        if ('' !== $params['class']) {
            $params['class'] .= ' ';
        }
        $params['class'] .= 'background-cover';
    }
    if ($params['class']) {
        $html .= ' class="' . $params['class'] . '"';
    }
    if ($params['title']) {
        $html .= ' title="' . $params['title'] . '" alt="' . $params['title'] . '"';
    }
    if ($params['width']) {
        $html .= ' width="' . $params['width'] . '"';
    }
    if ($params['height']) {
        $html .= ' height="' . $params['height'] . '"';
    }
    $html .= ' />';
    return $html;
}
コード例 #7
0
ファイル: function.gravatar.php プロジェクト: cargomedia/cm
function smarty_function_gravatar(array $params)
{
    $url = smarty_function_gravatarUrl($params);
    $html = '<img src="' . CM_Util::htmlspecialchars($url) . '"';
    if (!empty($params['class'])) {
        $html .= ' class="' . CM_Util::htmlspecialchars($params['class']) . '"';
    }
    if (!empty($params['title'])) {
        $html .= ' title="' . CM_Util::htmlspecialchars($params['title']) . '" alt="' . CM_Util::htmlspecialchars($params['title']) . '"';
    }
    if (!empty($params['width'])) {
        $html .= ' width="' . CM_Util::htmlspecialchars($params['width']) . '"';
    }
    if (!empty($params['height'])) {
        $html .= ' height="' . CM_Util::htmlspecialchars($params['height']) . '"';
    }
    $html .= ' />';
    return $html;
}
コード例 #8
0
ファイル: function.checkbox.php プロジェクト: cargomedia/cm
function smarty_function_checkbox(array $params, Smarty_Internal_Template $template)
{
    $isSwitch = isset($params['isSwitch']) ? (bool) $params['isSwitch'] : false;
    $checked = isset($params['checked']) ? (bool) $params['checked'] : false;
    $id = isset($params['id']) ? (string) $params['id'] : null;
    $label = (string) $params['label'];
    $name = isset($params['name']) ? (string) $params['name'] : null;
    $tabindex = isset($params['tabindex']) ? (int) $params['tabindex'] : null;
    $value = isset($params['value']) ? (string) $params['value'] : null;
    $classList = [];
    if (isset($params['class'])) {
        $classList[] = (string) $params['class'];
    }
    if ($isSwitch) {
        $classList[] = 'checkbox-switch';
    }
    $data = [];
    if (isset($params['data'])) {
        $data = (array) $params['data'];
        unset($params['data']);
    }
    if (null === $id) {
        $id = uniqid();
    }
    $attributeList = ['el' => 'input', 'type' => 'checkbox', 'id' => $id, 'class' => !empty($classList) ? implode(' ', $classList) : null, 'checked' => $checked ? 'checked' : null, 'name' => $name, 'tabindex' => $tabindex, 'value' => $value];
    if (!empty($data)) {
        foreach ($data as $name => $value) {
            $attributeList['data-' . $name] = CM_Util::htmlspecialchars($value);
        }
    }
    $html = smarty_function_tag($attributeList, $template);
    $htmlLabelContent = '';
    if ($isSwitch) {
        $htmlLabelContent .= smarty_function_tag(['el' => 'span', 'class' => 'handle'], $template);
    }
    $htmlLabelContent .= smarty_function_tag(['el' => 'span', 'content' => $label, 'class' => 'label'], $template);
    $html .= smarty_function_tag(['el' => 'label', 'content' => $htmlLabelContent, 'for' => $id], $template);
    return $html;
}
コード例 #9
0
ファイル: function.button.php プロジェクト: aladin1394/CM
function smarty_function_button(array $params, Smarty_Internal_Template $template)
{
    /** @var CM_Frontend_Render $render */
    $render = $template->smarty->getTemplateVars('render');
    $viewResponse = $render->getGlobalResponse()->getClosestViewResponse('CM_Form_Abstract');
    if (null === $viewResponse) {
        throw new CM_Exception_Invalid('Cannot find parent `CM_Form_Abstract` view response. {button} can be only rendered within form view.');
    }
    /** @var CM_Form_Abstract $form */
    $form = $viewResponse->getView();
    if (empty($params['action'])) {
        trigger_error('Param `action` missing.');
    }
    $action = $form->getAction($params['action']);
    $title = isset($params['title']) ? (string) $params['title'] : null;
    $theme = isset($params['theme']) ? (string) $params['theme'] : 'default';
    $isHtmlLabel = isset($params['isHtmlLabel']) ? (bool) $params['isHtmlLabel'] : false;
    $class = 'button ' . 'button-' . $theme;
    if (isset($params['class'])) {
        $class .= ' ' . trim($params['class']);
    }
    $data = array();
    if (isset($params['data'])) {
        $data = $params['data'];
        unset($params['data']);
    }
    if (isset($params['event'])) {
        $data['event'] = (string) $params['event'];
        unset($params['event']);
    }
    $icon = null;
    $iconConfirm = null;
    if (isset($params['icon'])) {
        $icon = $params['icon'];
        if (isset($params['iconConfirm'])) {
            $iconConfirm = $params['iconConfirm'];
        }
    }
    $label = '';
    if (isset($params['label'])) {
        $label = $isHtmlLabel ? $params['label'] : CM_Util::htmlspecialchars($params['label']);
    }
    if ($label) {
        $class .= ' hasLabel';
    }
    if ($icon) {
        $class .= ' hasIcon';
    }
    if ($title) {
        $class .= ' showTooltip';
    }
    $id = $viewResponse->getAutoId() . '-' . $action->getName() . '-button';
    $html = '';
    $html .= '<button class="' . $class . '" id="' . $id . '" type="submit" value="' . $label . '" data-click-spinner="true"';
    if ($title) {
        $html .= ' title="' . $title . '"';
    }
    if (!empty($data)) {
        foreach ($data as $name => $value) {
            $html .= ' data-' . $name . '="' . CM_Util::htmlspecialchars($value) . '"';
        }
    }
    $html .= '>';
    if ($icon) {
        if ($iconConfirm) {
            $html .= '<span class="icon icon-' . $icon . ' confirmClick-state-inactive"></span>' . '<span class="icon icon-' . $iconConfirm . ' confirmClick-state-active"></span>';
        } else {
            $html .= '<span class="icon icon-' . $icon . '"></span>';
        }
    }
    if ($label) {
        $html .= '<span class="label">' . $label . '</span>';
    }
    $html .= '</button>';
    return $html;
}
コード例 #10
0
ファイル: function.link.php プロジェクト: cargomedia/cm
function smarty_function_link(array $params, Smarty_Internal_Template $template)
{
    $label = '';
    if (isset($params['label'])) {
        $label = $params['label'];
    }
    unset($params['label']);
    $class = 'link';
    if (isset($params['class'])) {
        $class .= ' ' . $params['class'];
    }
    unset($params['class']);
    $title = null;
    if (isset($params['title'])) {
        $title = $params['title'];
    }
    unset($params['title']);
    $icon = null;
    if (isset($params['icon'])) {
        $icon = $params['icon'];
    }
    unset($params['icon']);
    $iconPosition = 'left';
    if (isset($params['iconPosition']) && $params['iconPosition'] === 'right') {
        $iconPosition = 'right';
    }
    unset($params['iconPosition']);
    $data = array();
    if (isset($params['data'])) {
        $data = (array) $params['data'];
    }
    unset($params['data']);
    $onclick = null;
    if (isset($params['onclick'])) {
        $onclick = $params['onclick'];
    }
    unset($params['onclick']);
    $href = 'javascript:;';
    if (isset($params['href'])) {
        $href = (string) $params['href'];
    }
    unset($params['href']);
    $target = null;
    if (isset($params['target'])) {
        $target = (string) $params['target'];
    }
    unset($params['target']);
    if (isset($params['page'])) {
        $href = smarty_function_linkUrl($params, $template);
    }
    if (empty($label) && empty($icon) && empty($title) && 0 !== strpos($href, 'javascript:')) {
        $label = $href;
    }
    $iconMarkup = null;
    if (null !== $icon) {
        $iconMarkup = '<span class="icon icon-' . $icon . '"></span>';
    }
    $html = '';
    if (null !== $iconMarkup && 'left' === $iconPosition) {
        $html .= $iconMarkup;
        $class .= ' hasIcon';
    }
    if (!empty($label)) {
        $html .= '<span class="label">' . CM_Util::htmlspecialchars($label) . '</span>';
        $class .= ' hasLabel';
    }
    if (null !== $iconMarkup && 'right' === $iconPosition) {
        $html .= $iconMarkup;
        $class .= ' hasIconRight';
    }
    $attributeList = ['el' => 'a', 'content' => $html, 'href' => $href, 'class' => $class, 'title' => $title, 'onclick' => $onclick, 'target' => $target];
    foreach ($data as $name => $value) {
        $attributeList['data-' . $name] = $value;
    }
    return smarty_function_tag($attributeList, $template);
}
コード例 #11
0
ファイル: function.select.php プロジェクト: cargomedia/cm
function smarty_function_select(array $params, Smarty_Internal_Template $template)
{
    /** @var CM_Frontend_Render $render */
    $render = $template->smarty->getTemplateVars('render');
    $htmlAttributes = array('id', 'name', 'class');
    $optionList = array();
    if (isset($params['optionList'])) {
        $optionList = $params['optionList'];
    }
    $selectedValue = null;
    if (isset($params['selectedValue']) && isset($optionList[$params['selectedValue']])) {
        $selectedValue = $params['selectedValue'];
    }
    $translate = !empty($params['translate']);
    $translatePrefix = '';
    if (isset($params['translatePrefix'])) {
        $translatePrefix = (string) $params['translatePrefix'];
    }
    $placeholder = null;
    if (isset($params['placeholder']) && is_string($params['placeholder'])) {
        $placeholder = $params['placeholder'];
    } elseif (!empty($params['placeholder'])) {
        $placeholder = ' -' . $render->getTranslation('Select') . '- ';
    }
    $labelPrefix = null;
    if (isset($params['labelPrefix'])) {
        $labelPrefix = (string) $params['labelPrefix'];
    }
    foreach ($optionList as $itemValue => $itemLabel) {
        if ($translate) {
            $optionList[$itemValue] = $render->getTranslation($translatePrefix . $itemLabel, array());
        } else {
            $optionList[$itemValue] = CM_Util::htmlspecialchars($itemLabel);
        }
    }
    if (null !== $placeholder) {
        $optionList = array(null => $placeholder) + $optionList;
    }
    $html = '';
    $html .= '<select';
    foreach ($htmlAttributes as $name) {
        if (isset($params[$name])) {
            $html .= ' ' . $name . '="' . CM_Util::htmlspecialchars($params[$name]) . '"';
        }
    }
    $html .= '>';
    $selectedLabel = '';
    if (null === $selectedValue && count($optionList) > 0) {
        $optionListValues = array_keys($optionList);
        $selectedValue = reset($optionListValues);
    }
    if (null !== $selectedValue) {
        $selectedValue = (string) $selectedValue;
    }
    foreach ($optionList as $itemValue => $itemLabel) {
        if (null !== $itemValue) {
            $itemValue = (string) $itemValue;
        }
        $html .= '<option value="' . CM_Util::htmlspecialchars($itemValue) . '"';
        if ($itemValue === $selectedValue) {
            $html .= ' selected';
            $selectedLabel = $itemLabel;
        }
        $html .= '>' . $itemLabel . '</option>';
    }
    $html .= '</select>';
    $html .= '<div class="fancySelect-select nowrap">';
    if ($labelPrefix) {
        $html .= '<span class="labelPrefix">' . CM_Util::htmlspecialchars($labelPrefix) . '</span>';
    }
    $html .= '<span class="label">' . $selectedLabel . '</span><span class="icon icon-select"></span>';
    $html .= '</div>';
    return '<div class="fancySelect">' . $html . '</div>';
}
コード例 #12
0
function smarty_function_button_link(array $params, Smarty_Internal_Template $template)
{
    $isHtmlLabel = isset($params['isHtmlLabel']) ? (bool) $params['isHtmlLabel'] : false;
    $label = '';
    if (isset($params['label'])) {
        $label = $isHtmlLabel ? $params['label'] : CM_Util::htmlspecialchars($params['label']);
        unset($params['label']);
    }
    $attrs = '';
    $icon = null;
    $iconConfirm = null;
    if (isset($params['icon'])) {
        $icon = $params['icon'];
        if (isset($params['iconConfirm'])) {
            $iconConfirm = $params['iconConfirm'];
        }
    }
    unset($params['icon']);
    unset($params['iconConfirm']);
    $iconPosition = 'left';
    if (!empty($params['iconPosition']) && $params['iconPosition'] == 'right') {
        $iconPosition = 'right';
    }
    unset($params['iconPosition']);
    $title = null;
    if (isset($params['title'])) {
        $title = (string) $params['title'];
        $attrs .= ' title="' . CM_Util::htmlspecialchars($title) . '"';
    }
    unset($params['title']);
    if (isset($params['id'])) {
        $attrs .= ' id="' . $params['id'] . '"';
    }
    unset($params['id']);
    $theme = isset($params['theme']) ? (string) $params['theme'] : 'default';
    $class = 'button ' . 'button-' . $theme . ' clickFeedback' . ' ';
    if (isset($params['class'])) {
        $class .= $params['class'];
    }
    unset($params['theme']);
    unset($params['class']);
    if ($label) {
        $class .= ' hasLabel';
    }
    $iconMarkup = '';
    if ($icon) {
        if ($iconConfirm) {
            $iconMarkup = '<span class="icon icon-' . $icon . ' confirmClick-state-inactive"></span>' . '<span class="icon icon-' . $iconConfirm . ' confirmClick-state-active"></span>';
        } else {
            $iconMarkup = '<span class="icon icon-' . $icon . '"></span>';
        }
        if ($iconPosition == 'right') {
            $class .= ' hasIconRight';
        } else {
            $class .= ' hasIcon';
        }
    }
    $onclick = false;
    if (isset($params['onclick'])) {
        $onclick = $params['onclick'];
        unset($params['onclick']);
    }
    if (isset($params['page'])) {
        $onclick .= ' cm.router.route(\'' . smarty_function_linkUrl($params, $template) . '\');';
    }
    if ($onclick) {
        $attrs .= ' onclick="' . CM_Util::htmlspecialchars($onclick) . '"';
    }
    if (isset($params['data'])) {
        foreach ($params['data'] as $name => $value) {
            $attrs .= ' data-' . $name . '="' . CM_Util::htmlspecialchars($value) . '"';
        }
    }
    $html = '';
    $html .= '<button class="' . $class . '" type="button" value="' . $label . '" ' . $attrs . '>';
    if ($icon && $iconPosition == 'left') {
        $html .= $iconMarkup;
    }
    if ($label) {
        $html .= '<span class="label">' . $label . '</span>';
    }
    if ($icon && $iconPosition == 'right') {
        $html .= $iconMarkup;
    }
    $html .= '</button>';
    return $html;
}
コード例 #13
0
ファイル: Mail.php プロジェクト: cargomedia/cm
 /**
  * @param CM_Mail_Mailable $mail
  * @return string
  */
 protected function _getTrackingImageTag(CM_Mail_Mailable $mail)
 {
     return '<img src="' . CM_Util::htmlspecialchars($this->getRender()->getUrlEmailTracking($mail)) . '" width="1" height="1" />';
 }