Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/components/com_sppagebuilder/addons/clients/ |
| [Home] [System Details] [Kill Me] |
<?php
/**
* @package SP Page Builder
* @author JoomShaper http://www.joomshaper.com
* @copyright Copyright (c) 2010 - 2023 JoomShaper
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later
*/
//no direct access
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Uri\Uri;
class SppagebuilderAddonClients extends SppagebuilderAddons
{
/**
* The addon frontend render method.
* The returned HTML string will render to the frontend page.
*
* @return string The HTML string.
* @since 1.0.0
*/
public function render()
{
$settings = $this->addon->settings;
$class = (isset($settings->class) && $settings->class) ?
' ' . $settings->class : '';
$title = (isset($settings->title) && $settings->title) ?
$settings->title : '';
// $alignment = (isset($settings->alignment) &&
$settings->alignment) ? ' ' . $settings->alignment :
'';
$columns = (isset($settings->count) && $settings->count) ?
$settings->count : 2;
$heading_selector = (isset($settings->heading_selector) &&
$settings->heading_selector) ? $settings->heading_selector :
'h3';
// Carousel
$create_carousel = (isset($settings->create_carousel) &&
$settings->create_carousel) ? $settings->create_carousel : 0;
$carousel_autoplay = (isset($settings->carousel_autoplay) &&
$settings->carousel_autoplay) ? $settings->carousel_autoplay : 0;
$carousel_speed = (isset($settings->carousel_speed) &&
$settings->carousel_speed) ? $settings->carousel_speed : 2000;
$carousel_interval = (isset($settings->carousel_interval) &&
$settings->carousel_interval) ? $settings->carousel_interval : 3500;
$carousel_margin = (isset($settings->carousel_margin) &&
$settings->carousel_margin) ? $settings->carousel_margin : 20;
$carousel_item_number = $settings->carousel_item_number ?? null;
$carousel_item_number_xl = !empty($carousel_item_number) &&
!empty($carousel_item_number->xl) ? $carousel_item_number->xl : 5;
$carousel_item_number_lg = !empty($carousel_item_number) &&
!empty($carousel_item_number->lg) ? $carousel_item_number->lg : 4;
$carousel_item_number_md = !empty($carousel_item_number) &&
!empty($carousel_item_number->md) ? $carousel_item_number->md : 3;
$carousel_item_number_sm = !empty($carousel_item_number) &&
!empty($carousel_item_number->sm) ? $carousel_item_number->sm : 3;
$carousel_item_number_xs = !empty($carousel_item_number) &&
!empty($carousel_item_number->xs) ? $carousel_item_number->xs : 2;
$carousel_bullet = (isset($settings->carousel_bullet) &&
$settings->carousel_bullet) ? $settings->carousel_bullet : 0;
$carousel_arrow = (isset($settings->carousel_arrow) &&
$settings->carousel_arrow) ? $settings->carousel_arrow : 0;
$output = '';
$output = '<div class="sppb-addon sppb-addon-clients'
. '' . $class . '' . ($create_carousel ? '
sppb-carousel-extended' : '') . '"
data-arrow="' . $carousel_arrow . '"
data-left-arrow="fa-angle-left"
data-right-arrow="fa-angle-right" data-dots="' .
$carousel_bullet . '" data-autoplay="' .
$carousel_autoplay . '" data-speed="' . $carousel_speed
. '" data-interval="' . $carousel_interval .
'" data-margin="' . $carousel_margin . '"
data-item-number-xl="' . $carousel_item_number_xl . '"
data-item-number-lg="' . $carousel_item_number_lg . '"
data-item-number-md="' . $carousel_item_number_md . '"
data-item-number-sm="' . $carousel_item_number_sm . '"
data-item-number-xs="' . $carousel_item_number_xs .
'">';
if ($title && empty($create_carousel))
{
$output .= '<' . $heading_selector . '
class="sppb-addon-title">' . $title . '</' .
$heading_selector . '>';
}
if ($create_carousel)
{
if (isset($settings->sp_clients_item) &&
is_array($settings->sp_clients_item))
{
foreach ($settings->sp_clients_item as $item_key =>
$carousel_item)
{
$carousel_img = (isset($carousel_item->image) &&
$carousel_item->image) ? $carousel_item->image : '';
$carousel_img_src = isset($carousel_img->src) ?
$carousel_img->src : $carousel_img;
list($url, $url_same_window) = AddonHelper::parseLink($carousel_item,
"url", ['url' => 'url',
'new_tab' => 'url_same_window']);
$output .= '<div
class="sppb-carousel-extended-item">';
if (isset($url) && $url) $output .= '<a ' .
(isset($url_same_window) && $url_same_window ? $url_same_window :
'') . ' rel="nofollow" href="' . $url .
'">';
$output .= '<img class="sppb-img-responsive
sppb-addon-clients-image" src="' . $carousel_img_src .
'" alt="' . ((isset($carousel_item->title)
&& $carousel_item->title) ? $carousel_item->title :
'') . '" loading="lazy">';
if (isset($url) && $url) $output .= '</a>';
$output .= '</div>';
}
}
}
else
{
$output .= '<div class="sppb-addon-content">';
$output .= '<div class="sppb-row">';
foreach ($settings->sp_clients_item as $key => $value)
{
$client_img = (isset($value->image) && $value->image) ?
$value->image : '';
$client_img_src = isset($client_img->src) ? $client_img->src :
$client_img;
$client_img_width = (isset($client_img->width) &&
$client_img->width) ? $client_img->width : '';
$client_img_height = (isset($client_img->height) &&
$client_img->height) ? $client_img->height : '';
if ($client_img_src)
{
// Lazy image loading
$client_img_src = (strpos($client_img_src, "http://") !==
false || strpos($client_img_src, "https://") !== false) ?
$client_img_src : Uri::base(true) . '/' . $client_img_src;
$placeholder = $client_img_src == '' ? false :
$this->get_image_placeholder($client_img_src);
$target = '';
$output .= '<div class="' . $columns .
'">';
list($url, $target) = AddonHelper::parseLink($value, 'url');
if (!empty($url) && $url) $output .= '<a ' .
$target . ' href="' . $url . '">';
$output .= '<img class="sppb-img-responsive
sppb-addon-clients-image' . ($placeholder ? '
sppb-element-lazy' : '') . '" src="' .
($placeholder ? $placeholder : $client_img_src) . '"
alt="' . ((isset($value->title) && $value->title) ?
$value->title : '') . '" ' . ($placeholder ?
'data-large="' . $client_img_src . '"' :
'') . ' ' . ($client_img_width ?
'width="' . $client_img_width . '"' :
'') . ' ' . ($client_img_height ?
'height="' . $client_img_height . '"' :
'') . ' loading="lazy">';
if (!empty($url) && $url) $output .= '</a>';
$output .= '</div>';
}
}
$output .= '</div>';
$output .= '</div>';
}
$output .= '</div>';
return $output;
}
/**
* Add required script files for the addon.
*
* @return void
* @since 1.0.0
*/
public function scripts()
{
HTMLHelper::_('jquery.framework');
HTMLHelper::_('script',
'components/com_sppagebuilder/assets/js/sp_carousel.js', [],
['defer' => true]);
}
/**
* Generate the CSS string for the frontend page.
*
* @return string The CSS string for the page.
* @since 1.0.0
*/
public function css()
{
$settings = $this->addon->settings;
$addon_id = '#sppb-addon-' . $this->addon->id;
$cssHelper = new CSSHelper($addon_id);
$settings->alignment = CSSHelper::parseAlignment($settings,
'alignment');
$alignmentStyle =
$cssHelper->generateStyle('.sppb-addon-clients', $settings,
['alignment' => 'text-align'], false);
$css = '';
$remove_filter = (isset($settings->remove_filter) &&
$settings->remove_filter) ? $settings->remove_filter : '';
$scale_on_hover = (isset($settings->scale_on_hover) &&
$settings->scale_on_hover) ? $settings->scale_on_hover :
'';
$scale_value = (isset($settings->scale_value) &&
$settings->scale_value) ? $settings->scale_value : '';
$filter_style = '';
$filter_css = '';
$filterStyle = '';
if (isset($settings->add_css_filder) &&
is_array($settings->add_css_filder))
{
foreach ($settings->add_css_filder as $filter_key =>
$filter_value)
{
if ($filter_value == 'grayscale' &&
isset($settings->grayscale_value) &&
$settings->grayscale_value)
{
$filter_css .= 'grayscale(' . $settings->grayscale_value
. '%) ';
}
if ($filter_value == 'opacity' &&
isset($settings->opacity_value) && $settings->opacity_value)
{
$filter_css .= 'opacity(' . $settings->opacity_value .
'%)';
}
$filter_style = 'filter:' . $filter_css . ';';
}
}
if ($filter_style)
{
$css .= $addon_id . ' .sppb-addon-clients-image {';
$css .= $filter_style;
$css .= '}';
}
if ($remove_filter)
{
$css .= $addon_id . ' .sppb-addon-clients-image:hover {';
$css .= 'filter: none;';
$css .= '}';
}
if ($scale_on_hover && $scale_value)
{
$css .= $addon_id . ' .sppb-addon-clients-image:hover {';
$css .= 'transform: scale(' . $scale_value . ');';
$css .= '}';
}
$css .= $alignmentStyle;
return $css;
}
public static function getTemplate()
{
$lodash = new Lodash('#sppb-addon-{{ data.id }}');
$output = '
<style type="text/css">';
// Title
$titleTypographyFallbacks = [
'font' => 'data.title_font_family',
'size' => 'data.title_fontsize',
'line_height' => 'data.title_lineheight',
'letter_spacing' => 'data.title_letterspace',
'uppercase' =>
'data.title_font_style?.uppercase',
'italic' =>
'data.title_font_style?.italic',
'underline' =>
'data.title_font_style?.underline',
'weight' =>
'data.title_font_style?.weight',
];
$output .= $lodash->typography('.sppb-addon-title',
'data.title_typography', $titleTypographyFallbacks);
// alignment
$output .= $lodash->alignment('text-align',
'.sppb-addon-clients', 'data.alignment');
$output .= '<# if (data.scale_on_hover) { #>';
$output .= $lodash->transform('scale',
'.sppb-addon-clients-image:hover', 'data.scale_value');
$output .= '<# } #>';
$output .= '
<#
let filter_style = "";
let filter_css = "";
if(!_.isEmpty(data.add_css_filder) &&
_.isArray(data.add_css_filder)){
_.each(data.add_css_filder, function(filter_value){
if(filter_value == "grayscale" &&
!_.isEmpty(data.grayscale_value) && data.grayscale_value){
filter_css += `grayscale(${data.grayscale_value}%) `;
}
if(filter_value == "opacity" &&
!_.isEmpty(data.opacity_value) && data.opacity_value){
filter_css += `opacity(${data.opacity_value}%)`;
}
filter_style = `filter:${filter_css};`;
})
}
if(data.add_css_filder != ""){
#>
#sppb-addon-{{ data.id }} .sppb-addon-clients-image {
{{filter_style}}
}
<# }
if(data.add_css_filder != "" && data.remove_filter){
#>
#sppb-addon-{{ data.id }} .sppb-addon-clients-image:hover {
filter: none;
}
<# } #>
</style>
<#
let carousel_item_number_xl = 5;
let carousel_item_number_lg = 4;
let carousel_item_number_md = 3;
let carousel_item_number_sm = 3;
let carousel_item_number_xs = 2;
if(_.isObject(data.carousel_item_number)){
const {carousel_item_number} = data;
const {xl, lg, md, sm, xs} = carousel_item_number;
carousel_item_number_xl = xl ?? 5;
carousel_item_number_lg = lg ?? 4;
carousel_item_number_md = md ?? 3;
carousel_item_number_sm = sm ?? 3;
carousel_item_number_xs = xs ?? 2;
}
let column_class = data.count;
#>
<div class="sppb-addon sppb-addon-clients {{ data.class }}
{{(data.create_carousel ? \' sppb-carousel-extended\' :
\'\')}}" data-left-arrow="fa-angle-left"
data-right-arrow="fa-angle-right"
data-arrow="{{data.carousel_arrow}}"
data-dots="{{data.carousel_bullet}}"
data-autoplay="{{data.carousel_autoplay}}"
data-speed="{{data.carousel_speed || 2000}}"
data-interval="{{data.carousel_interval ||3500}}"
data-margin="{{data.carousel_margin}}"
data-item-number-xl="{{carousel_item_number_xl}}"
data-item-number-lg="{{carousel_item_number_lg}}"
data-item-number-md="{{carousel_item_number_md}}"
data-item-number-sm="{{carousel_item_number_sm}}"
data-item-number-xs="{{carousel_item_number_xs}}">
<# if( !_.isEmpty( data.title ) && !data.create_carousel){
#><{{ data.heading_selector }} class="sppb-addon-title
sp-inline-editable-element" data-id={{data.id}}
data-fieldName="title" contenteditable="true">{{
data.title }}</{{ data.heading_selector }}><# } #>
<# if(data.create_carousel) {
if(typeof data.sp_clients_item !== "undefined" &&
_.isArray(data.sp_clients_item)){
_.each(data.sp_clients_item, function(carousel_item){
var carouselImg = {}
if (typeof carousel_item.image !== "undefined" &&
typeof carousel_item.image.src !== "undefined") {
carouselImg = carousel_item.image
} else {
carouselImg = {src: carousel_item.image}
}
#>
<div class="sppb-carousel-extended-item">
<#
const isMenu = _.isObject(carousel_item.url) &&
carousel_item.url.type === "menu" &&
carousel_item.url.menu;
const isPage = _.isObject(carousel_item.url) &&
carousel_item.url.type === "page" &&
carousel_item?.url.page;
const isUrl = _.isObject(carousel_item.url) &&
carousel_item.url.type === "url" &&
carousel_item?.url.url;
const isOldUrl = _.isString(carousel_item.url) &&
carousel_item.url !== "";
if(isMenu || isPage || isUrl || isOldUrl){
const urlObj = _.isObject(carousel_item.url) ? carousel_item.url :
window.getSiteUrl(carousel_item.url, carousel_item.url_same_window === 1 ?
"_blank" : "");
const {url, page, menu, type, new_tab, nofollow, noopener,
noreferrer} = urlObj;
const target = new_tab ? "_blank" : "";
let relData = "";
relData += nofollow ? "nofollow" : "";
relData += noopener ? " noopener" : "";
relData += noreferrer ? " noreferrer" : "";
let newUrl = "";
if(type === "url") newUrl = url;
if(type === "menu") newUrl = menu;
if(type === "page") newUrl = page ?
`index.php?option=com_sppagebuilder&view=page&id=${page}` :
"";
#>
<a href=\'{{ newUrl }}\' target=\'{{ target
}}\' rel=\'{{ relData }}\' >
<#
}
#>
<# if(carouselImg.src &&
carouselImg.src.indexOf("https://") == -1 &&
carouselImg.src.indexOf("http://") == -1){ #>
<img class="sppb-img-responsive
sppb-addon-clients-image" src=\'{{ pagebuilder_base +
carouselImg.src }}\' alt="{{ carousel_item.title }}">
<# } else if(carouselImg.src){ #>
<img class="sppb-img-responsive
sppb-addon-clients-image" src=\'{{ carouselImg.src }}\'
alt="{{ carousel_item.title }}">
<# } #>
<# if(isMenu || isPage || isUrl || isOldUrl){ #></a><#
} #>
</div>
<# });
}
} else { #>
<div class="sppb-addon-content">
<div class="sppb-row">
<# _.each(data.sp_clients_item, function(clients_item, key){
var clientImg = {}
if (typeof clients_item.image !== "undefined" &&
typeof clients_item.image.src !== "undefined") {
clientImg = clients_item.image
} else {
clientImg = {src: clients_item.image}
}
if(clientImg.src){
#>
<div class="{{ column_class }}">
<#
const isMenu = _.isObject(clients_item.url) &&
clients_item.url.type === "menu" &&
clients_item.url.menu;
const isPage = _.isObject(clients_item.url) &&
clients_item.url.type === "page" &&
clients_item?.url.page;
const isUrl = _.isObject(clients_item.url) &&
clients_item.url.type === "url" && clients_item?.url.url;
const isOldUrl = _.isString(clients_item.url) &&
clients_item.url !== "";
if(isMenu || isPage || isUrl || isOldUrl){
const urlObj = _.isObject(clients_item.url) ? clients_item.url :
window.getSiteUrl(clients_item.url, clients_item.url_same_window === 1 ?
"_blank" : "");
const {url, page, menu, type, new_tab, nofollow, noopener,
noreferrer} = urlObj;
const target = new_tab ? "_blank" : "";
let relData = "";
relData += nofollow ? "nofollow" : "";
relData += noopener ? " noopener" : "";
relData += noreferrer ? " noreferrer" : "";
let newUrl = "";
if(type === "url") newUrl = url;
if(type === "menu") newUrl = menu;
if(type === "page") newUrl = page ?
`index.php?option=com_sppagebuilder&view=page&id=${page}` :
"";
#>
<a href=\'{{ newUrl }}\' target=\'{{ target
}}\' rel=\'{{ relData }}\' >
<# } #>
<# if(clientImg.src &&
clientImg.src.indexOf("https://") == -1 &&
clientImg.src.indexOf("http://") == -1){ #>
<img class="sppb-img-responsive
sppb-addon-clients-image" src=\'{{ pagebuilder_base +
clientImg.src }}\' alt="{{ clients_item.title }}">
<# } else if(clientImg.src){ #>
<img class="sppb-img-responsive
sppb-addon-clients-image" src=\'{{ clientImg.src }}\'
alt="{{ clients_item.title }}">
<# } #>
<# if((_.isObject(clients_item?.url) &&
clients_item?.url?.url !== "") || (!_.isObject(clients_item?.url)
&& clients_item?.url !== "")){ #></a><# }
#>
</div>
<# } #>
<# }); #>
</div>
</div>
<# } #>
</div>
';
return $output;
}
}