%PDF- %PDF-
Direktori : /home/lightco1/luminero.com.au/plugins/jsnpagebuilder/defaultelements/testimonial/ |
Current File : /home/lightco1/luminero.com.au/plugins/jsnpagebuilder/defaultelements/testimonial/testimonial.php |
<?php /** * @version $Id$ * @package JSN_PageBuilder * @author JoomlaShine Team <support@joomlashine.com> * @copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved. * @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html * * Websites: http://www.joomlashine.com * Technical Support: Feedback - http://www.joomlashine.com/contact-us/get-support.html */ // No direct access to this file. defined('_JEXEC') or die('Restricted access'); /** * Testimonial shortcode element * * @package JSN_PageBuilder * @since 1.0.4 **/ class JSNPBShortcodeTestimonial extends IG_Pb_Element { /** * Constructor * * @return type */ public function __construct() { parent::__construct(); } /** * Include admin scripts * * @return type */ public function backend_element_assets() { JSNPagebuilderHelpersFunctions::print_asset_tag(JSNPB_FRAMEWORK_ASSETS . '/joomlashine/css/jsn-fonticomoon.css', 'css'); } /** * DEFINE configuration information of shortcode * * @return type */ public function element_config() { $this->config['shortcode'] = 'pb_testimonial'; $this->config['name'] = JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL'); $this->config['cat'] = JText::_('JSN_PAGEBUILDER_DEFAULT_ELEMENT_EXTRA'); $this->config['icon'] = 'icon-testimonial'; $this->config['description'] = JText::_("JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_DES"); $this->config['has_subshortcode'] = __CLASS__ . 'Item'; $this->config['exception'] = array( 'data-modal-title' => JText::_('JSN_PAGEBUILDER_ELEMENT_MODAL_TITLE_PB_TESTIMONIAL'), ); } /** * DEFINE setting options of shortcode in backend */ public function backend_element_items() { $this->frontend_element_items(); } /** * DEFINE setting options of shortcode in frontend */ public function frontend_element_items() { $this->items = array( 'content' => array( array( 'name' => JText::_('JSN_PAGEBUILDER_DEFAULT_ELEMENT_ELEMENT_TITLE'), 'id' => 'el_title', 'type' => 'text_field', 'class' => 'jsn-input-xxlarge-fluid', 'std' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_ELEMENT_TITLE_STD'), 'role' => 'title', 'tooltip' => JText::_('JSN_PAGEBUILDER_DEFAULT_ELEMENT_ELEMENT_TITLE_DES'), ), array( 'name' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_ITEMS'), 'id' => 'testimonial_items', 'type' => 'group', 'shortcode' => $this->config['shortcode'], 'sub_item_type' => $this->config['has_subshortcode'], 'sub_items' => array( array('std' => ''), array('std' => ''), array('std' => ''), ), ), ), 'styling' => array( array( 'type' => 'preview' ), array( 'name' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_ITEMS_PER_SLIDE'), 'id' => 'items_per_slide', 'type' => 'text_number', 'std' => '2', 'class' => 'input-mini', 'validate' => 'number', ), array( 'name' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_ITEMS_SLIDE_TIME'), 'id' => 'slider_time', 'type' => 'text_append', 'type_input' => 'number', 'class' => 'input-mini', 'std' => '5', 'append' => 'second(s)', 'validate' => 'number', ), array( 'name' => JText::_( 'JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_ITEMS_AUTO_PLAY' ), 'id' => 'auto_play', 'type' => 'radio', 'std' => 'yes', 'options' => array( 'yes' => JText::_( 'JSN_PAGEBUILDER_DEFAULT_ELEMENT_YES' ), 'no' => JText::_( 'JSN_PAGEBUILDER_DEFAULT_ELEMENT_NO' ) ), ), array( 'name' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_SLIDER_ELEMENTS'), 'id' => 'slider_elements', 'type' => 'checkbox', 'class' => 'jsn-columns-item checkbox', 'container_class' => 'jsn-columns-container jsn-columns-count-two', 'std' => 'arrows__#__indicator', 'options' => array( 'arrows' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_SLIDER_ARROWS'), 'indicator' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_SLIDER_INDICATOR'), ), ), array( 'name' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_CONTENT_ELEMENTS'), 'id' => 'content_elements', 'type' => 'items_list', 'std' => 'content__#__image__#__name__#__job_title__#__country__#__company', 'options' => array( 'content' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_FEEDBACK_CONTENT'), 'image' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_AVATAR'), 'name' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_CLIENTS_NAME'), 'job_title' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_CLIENTS_POSITION'), 'country' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_COUNTRY'), 'company' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_COMPANY'), ), 'options_type' => 'checkbox', 'popover_items' => array('image', 'content'), 'style' => array('height' => '200px'), 'container_class' => 'unsortable content-element', ), // Popup settins for Elements = Image array( 'name' => JText::_('JSN_PAGEBUILDER_DEFAULT_ELEMENT_CONTAINER_STYLE'), 'id' => 'author_image_style', 'type' => 'select', 'std' => JSNPagebuilderHelpersType::getFirstOption(JSNPagebuilderHelpersType::getContainerStyle()), 'options' => JSNPagebuilderHelpersType::getContainerStyle(), 'container_class' => 'hidden', 'data_wrap_related' => 'image', ), // Popup settins for Elements = Content array( 'name' => JText::_('JSN_PAGEBUILDER_ELEMENT_TESTIMONIAL_LENGTH_LIMITATION'), 'id' => 'content_length', 'type' => array( array( 'id' => 'content_count', 'type' => 'text_number', 'std' => '', 'class' => 'input-mini', 'options' => JSNPagebuilderHelpersType::getFonts(), 'parent_class' => 'combo-item', ), array( 'id' => 'content_type', 'type' => 'select', 'std' => 'words', 'class' => 'input-medium', 'options' => array( 'words' => JText::_('JSN_PAGEBUILDER_DEFAULT_ELEMENT_WORDS'), 'characters' => JText::_('JSN_PAGEBUILDER_DEFAULT_ELEMENT_CHARACTERS'), ), 'parent_class' => 'combo-item', ), ), 'container_class' => 'combo-group hidden', 'data_wrap_related' => 'content', ), ), ); } /** * DEFINE shortcode content * * @param type $atts * @param type $content * * @return string */ public function element_shortcode($atts = null, $content = null) { $document = JFactory::getDocument(); $app = JFactory::getApplication(); if ($app->isAdmin()) { $this->load_assets_frontend(); } $arr_params = JSNPagebuilderHelpersShortcode::shortcodeAtts($this->config['params'], $atts); extract($arr_params); $random_id = JSNPagebuilderHelpersShortcode::generateRandomString(); $testimonial_id = "testimonial_$random_id"; $styles = "style='width:100%'"; $image_container_style = ($author_image_style != 'no-styling') ? "{$author_image_style}" : ''; $content_elements = array_filter(explode('__#__', $content_elements)); $testimonial_indicators = array(); $testimonial_indicators[] = '<ol class="carousel-indicators">'; $sub_shortcode = empty($content) ? JSNPagebuilderHelpersShortcode::removeAutop($content) : JSNPagebuilderHelpersBuilder::generateShortCode($content, false, 'frontend', true); $testimonial_content = array(); $items = explode('<!--seperate-->', $sub_shortcode); $items = array_filter($items); $count_items = count($items); foreach ($items as $idx => $item) { $pathRoot = JURI::root(); $item = unserialize($item); $url_pattern = '/^(http|https)/'; $image_file = @$item['image_file']; preg_match($url_pattern, $image_file, $m); if(count($m)){ $pathRoot = ''; } if ($idx % $items_per_slide == 0) { $active = ($idx == 0) ? 'active' : ''; $testimonial_content[] = "<div class='item row $active'>"; $active_li = ($idx == 0) ? "class='active'" : ''; $testimonial_indicators[] = "<li $active_li></li>"; } $divide = ($count_items > $items_per_slide) ? $items_per_slide : $count_items; $colmd = 'col-md-' . 12 / $divide; $colsm = 'col-sm-' . 12 / $divide; $item_html = "<div class='pb-testimonial-item $colmd $colsm'>"; $testimonial_info = array(); if (in_array('content', $content_elements)) { $item_content = JSNPagebuilderHelpersShortcode::removeAutop($item['testimonial_content']); $item_content = JSNPagebuilderHelpersShortcode::pbTrimContent($item_content, $content_count, $content_type); $testimonial_info['content'] = "<div class='pb-testimonial-box top'><div class='arrow'></div><div class='pb-testimonial-content'>" . $item_content . '</div></div>'; } $alt = @$item['name']; $img = !empty($item['image_file']) ? "<div class='pb-testimonial-avatar'><img class='$image_container_style' src='{$pathRoot}{$item['image_file']}' alt='{$alt}' /></div>" : ''; $testimonial_info['image'] = (in_array('image', $content_elements)) ? $img : ''; // Process company field if (isset($item['company']) && $item['company'] != '') { $company_link = "<a href='{$item['web_url']}' target='_blank'>{$item['company']}</a>"; } else { $company_link = "<a href='{$item['web_url']}' target='_blank'>{$item['web_url']}</a>"; } if (!isset($item['web_url']) || empty($item['web_url'])) { $company_link = $item['company']; } // Process testimonial metadata $arr_style = array(); if (isset($item['name_height'])) { $arr_style[] = 'font-size: ' . $item['name_height'] . 'px'; } if (isset($item['name_color'])) { $arr_style[] = 'color: ' . $item['name_color']; } $style = ($arr_style) ? "style='" . implode(';', $arr_style) . "'" : ''; $name = (in_array('name', $content_elements)) ? "<strong {$style} class='pb-testimonial-name'>" . @$item['name'] . "</strong>" : ''; $job_title = (in_array('job_title', $content_elements)) ? "<span class='pb-testimonial-jobtitle'>" . @$item['job_title']. "</span>" : ''; $country = (in_array('country', $content_elements)) ? "<span class='pb-testimonial-country'>" . @$item['country'] . "</span>" : ''; if ($company_link) { $company = (in_array('company', $content_elements)) ? "<span class='pb-testimonial-company'>$company_link</span>" : ''; } $html_metadata = ''; if ($name != '' || $job_title != '' || $country != '' || $company != '') { $html_metadata .= '<div class="pb-testimonial-meta">'; $html_metadata .= $name . $job_title . $country . $company; $html_metadata .= '</div>'; } foreach ($content_elements as $element) { $item_html .= isset($testimonial_info[$element]) ? $testimonial_info[$element] : ''; } $item_html .= $html_metadata; $item_html .= '</div>'; $testimonial_content[] = $item_html; if (($idx + 1) % $items_per_slide == 0 || ($idx + 1) == count($items)) { $testimonial_content[] = '</div>'; } } $testimonial_content = "<div class='carousel-inner'>" . implode('', $testimonial_content) . '</div>'; $testimonial_indicators[] = "</ol>"; $testimonial_indicators = implode('', $testimonial_indicators); $slider_time = $slider_time. '000'; if ($auto_play == 'yes') { $script = "<script type='text/javascript'> (function($){ $(document).ready(function(){ if($('#$testimonial_id').length){ $('#$testimonial_id').carousel({ interval: " . (int) $slider_time . " }); $('#$testimonial_id .carousel-indicators li').each(function(i){ $(this).on('click', function(){ $('#$testimonial_id').carousel(i); }); }); } }); })(jQuery) </script>"; } else { $script = "<script type='text/javascript'> (function($){ $(document).ready(function(){ if($('#$testimonial_id').length){ $('#$testimonial_id').carousel({ interval: false }); $('#$testimonial_id .carousel-indicators li').each(function(i){ $(this).on('click', function(){ $('#$testimonial_id').carousel(i); }); }); } }); })(jQuery) </script>"; } $slider_elements = explode('__#__', $slider_elements); if($count_items <= (int)$items_per_slide || !in_array('indicator', $slider_elements)){ $testimonial_indicators = ''; } $testimonial_navigator = ($count_items > $items_per_slide && in_array('arrows', $slider_elements)) ? "<a class='carousel-control left icon-arrow-left pb-arrow-left'></a><a class='carousel-control right icon-arrow-right pb-arrow-right'></a>" : ''; $html = "<div class='carousel slide pb-testimonial' $styles id='$testimonial_id'> $testimonial_content $testimonial_indicators $testimonial_navigator</div>"; return $this->element_wrapper($script . $html, $arr_params); } public function load_assets_frontend() { $pathRoot = JURI::root(); $document = JFactory::getDocument(); $document->addScript(JSNPB_ELEMENT_URL . '/testimonial/assets/js/testimonial.js', 'text/javascript'); $document->addStyleSheet(JSNPB_ELEMENT_URL . '/testimonial/assets/css/testimonial.css', 'text/css'); $document->addStyleSheet(JSNPB_FRAMEWORK_ASSETS . '/joomlashine/css/jsn-fonticomoon.css', 'text/css'); $document->addScriptDeclaration("if (typeof jQuery != 'undefined' && typeof MooTools != 'undefined' ) { Element.implement({ slide: function(how, mode){ return this; } }); }", 'text/javascript'); } }