| Server IP : 46.105.57.169 / Your IP : 216.73.216.144 Web Server : Apache System : Linux webd003.cluster120.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : maitricfuz ( 93378) PHP Version : 8.4.10 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/maitricfuz/www/saint-martin-lg/plugins/sliderck/flexicontent/helper/ |
Upload File : |
<?php
/**
* @name Slider CK
* @copyright Copyright (C) 2019. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @author Cedric Keiflin - https://www.template-creator.com - https://www.joomlack.fr
*/
// No direct access
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\Router\Route;
use Joomla\Component\Content\Administrator\Extension\ContentComponent;
use Joomla\Component\Content\Site\Helper\RouteHelper;
use Joomla\Component\Content\Site\Helper\AssciationHelper;
/**
* Helper Class.
*/
class SliderckHelpersourceFlexicontent {
private static $params;
/*
* Get the items from the source
*/
public static function getItems($params) {
if (empty(self::$params)) {
self:$params = $params;
}
/*
table items_ext >> list articles par ID, avec params flexi comme type_id
table fields_item_relations >> item_id = article, field_id, value = a:3:{s:12:"originalname";s:23:"away-3101302_1280-2.jpg";s:12:"existingname";s:0:"";s:4:"desc";s:0:"";}
*/
$db = \Joomla\CMS\Factory::getDBO();
$filterByCustomField = ($params->get('flexicontent_imgsource', '')
&& $params->get('flexicontent_imgsource', '') != 'introimage'
&& $params->get('flexicontent_imgsource', '') != 'firstimage'
);
/*--------- Load items based on the Flexicontent field and type ----------*/
$query = false;
$fieldName = false;
// use the Flexicontent image field only if selected
// else the selection is based on the articles only
if ($filterByCustomField) {
$catids = $params->get('flexicontent_catid');
// get the field name
$query = "SELECT f.name"
. " FROM #__flexicontent_fields AS f"
. " WHERE f.id = " . $params->get('flexicontent_imgsource', '0')
;
$db->setQuery($query);
if ($db->execute()) {
$fieldName = $db->loadResult();
} else {
echo '<p style="color:red;font-weight:bold;">Error loading SQL data : loading the field name in Maximenu CK</p>';
return false;
}
// get the list of articles that have the field id filled
$query = "SELECT ffir.value, ffir.item_id as id, ffir.field_id, cir.catid"
. " FROM #__flexicontent_fields_item_relations AS ffir"
. " INNER JOIN #__flexicontent_cats_item_relations as cir on cir.itemid = ffir.item_id"
. ((int)$params->get('flexicontent_type', '0') > 0 ? " INNER JOIN #__flexicontent_items_ext as fie on fie.item_id = ffir.item_id" : "")
. " WHERE cir.catid IN (" . implode(',', $catids) . ")"
. ($filterByCustomField ? " AND ffir.field_id = " . $params->get('flexicontent_imgsource', '0') : "")
. ((int)$params->get('flexicontent_type', '0') > 0 ? " AND fie.type_id = " . $params->get('flexicontent_type', '0') : "")
;
}
else if ((int)$params->get('flexicontent_type', '0') > 0) {
// get the list of articles that have the field id filled
$query = "SELECT fie.item_id as id"
. " FROM #__flexicontent_items_ext AS fie"
. " WHERE fie.type_id = " . $params->get('flexicontent_type', '0')
;
}
if ($query) {
$db->setQuery($query);
if ($db->execute()) {
$rows = $db->loadObjectList();
} else {
echo '<p style="color:red;font-weight:bold;">Error loading SQL data : loading the flexitontent fields in Maximenu CK</p>';
return false;
}
$flexicontentItems = array();
foreach($rows as $row) {
$flexicontentItems[] = $row->id;
}
}
else {
$flexicontentItems = false;
}
/*-------------- Load articles based on the options --------------*/
$app = Factory::getApplication();
if (version_compare(JVERSION, '4') >= 0) {
$factory = $app->bootComponent('com_content')->getMVCFactory();
// Get an instance of the generic articles model
$articles = $factory->createModel('Articles', 'Site', ['ignore_request' => true]);
} else {
// load the content articles file
$com_path = JPATH_SITE . '/components/com_content/';
include_once $com_path . 'router.php';
include_once $com_path . 'helpers/route.php';
\Joomla\CMS\MVC\Model\BaseDatabaseModel::addIncludePath($com_path . '/models', 'ContentModel');
// Get an instance of the generic articles model
$articles = \Joomla\CMS\MVC\Model\BaseDatabaseModel::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
}
// Set application parameters in model
$appParams = $app->getParams();
$articles->setState('params', $appParams);
$articles->setState('filter.article_id', $flexicontentItems);
$articles->setState('filter.article_id.include', true); // Exclude
// Set the filters based on the module params
// $articles->setState('list.start', 0);
// if ($params->get('articleimgsource', 'introimage') == 'text') {
// $articles->setState('list.limit', $params->get('limitslides',0));
// } else {
// $articles->setState('list.limit', 0);
// }
$articles->setState('filter.published', 1);
// Access filter
$access = !\Joomla\CMS\Component\ComponentHelper::getParams('com_content')->get('show_noauth');
$authorised = \Joomla\CMS\Access\Access::getAuthorisedViewLevels(\Joomla\CMS\Factory::getUser()->get('id'));
$articles->setState('filter.access', $access);
/*
// Prep for Normal or Dynamic Modes
$mode = $params->get('flexicontent_mode', 'normal');
$option = $app->input->get('option', '', 'cmd');
$view = $app->input->get('view', '', 'cmd');
switch ($mode)
{
case 'dynamic':
if ($option === 'com_content') {
switch($view)
{
case 'category':
$catids = array($app->input->get('id', 0, 'int'));
break;
case 'categories':
$catids = array($app->input->get('id', 0, 'int'));
break;
case 'article':
if ($params->get('flexicontent_show_on_article_page', 1)) {
$article_id = $app->input->get('id', 0, 'int');
$catid = $app->input->get('catid', 0, 'int');
if (!$catid) {
// Get an instance of the generic article model
$article = \Joomla\CMS\MVC\Model\BaseDatabaseModel::getInstance('Article', 'ContentModel', array('ignore_request' => true));
$article->setState('params', $appParams);
$article->setState('filter.published', 1);
$article->setState('article.id', (int) $article_id);
$item = $article->getItem();
$catids = array($item->catid);
}
else {
$catids = array($catid);
}
}
else {
// Return right away if show_on_article_page option is off
return;
}
break;
case 'featured':
default:
// Return right away if not on the category or article views
return;
}
}
else {
// Return right away if not on a com_content page
return;
}
break;
case 'normal':
default:
$catids = $params->get('flexicontent_catid');
$articles->setState('filter.category_id.include', (bool) $params->get('flexicontent_category_filtering_type', 1));
break;
}
// Category filter
if ($catids && !empty($catids) && isset($catids[0]) && $catids[0] !== '') {
if ($params->get('flexicontent_show_child_category_articles', 0) && (int) $params->get('flexicontent_levels', 0) > 0) {
// Get an instance of the generic categories model
$categories = \Joomla\CMS\MVC\Model\BaseDatabaseModel::getInstance('Categories', 'ContentModel', array('ignore_request' => true));
$categories->setState('params', $appParams);
$levels = $params->get('flexicontent_levels', 1) ? $params->get('flexicontent_levels', 1) : 9999;
$categories->setState('filter.get_children', $levels);
$categories->setState('filter.published', 1);
$categories->setState('filter.access', $access);
$additional_catids = array();
foreach($catids as $catid)
{
$categories->setState('filter.parentId', $catid);
$recursive = true;
$items = $categories->getItems($recursive);
if ($items)
{
foreach($items as $category)
{
$condition = (($category->level - $categories->getParent()->level) <= $levels);
if ($condition) {
$additional_catids[] = $category->id;
}
}
}
}
$catids = array_unique(array_merge($catids, $additional_catids));
}
$articles->setState('filter.category_id', $catids);
}
*/
// Ordering
$articles->setState('list.ordering', $params->get('flexicontent_article_ordering', 'a.ordering'));
$articles->setState('list.direction', $params->get('flexicontent_article_ordering_direction', 'ASC'));
// New Parameters
$articles->setState('filter.featured', $params->get('flexicontent_show_front', 'show'));
// $articles->setState('filter.author_id', $params->get('flexicontent_created_by', ""));
// $articles->setState('filter.author_id.include', $params->get('flexicontent_author_filtering_type', 1));
// $articles->setState('filter.author_alias', $params->get('flexicontent_created_by_alias', ""));
// $articles->setState('filter.author_alias.include', $params->get('flexicontent_author_alias_filtering_type', 1));
$excluded_articles = $params->get('flexicontent_excluded_articles', '');
if ($excluded_articles) {
$excluded_articles = explode("\r\n", $excluded_articles);
$articles->setState('filter.article_id', $excluded_articles);
$articles->setState('filter.article_id.include', false); // Exclude
}
$date_filtering = $params->get('flexicontent_date_filtering', 'off');
if ($date_filtering !== 'off') {
$articles->setState('filter.date_filtering', $date_filtering);
$articles->setState('filter.date_field', $params->get('flexicontent_date_field', 'a.created'));
$articles->setState('filter.start_date_range', $params->get('flexicontent_start_date_range', '1000-01-01 00:00:00'));
$articles->setState('filter.end_date_range', $params->get('flexicontent_end_date_range', '9999-12-31 23:59:59'));
$articles->setState('filter.relative_date', $params->get('flexicontent_relative_date', 30));
}
// Filter by language
$articles->setState('filter.language', $app->getLanguageFilter());
$articlesItems = Array();
foreach ($articles->getItems() as $tmparticle) {
$articlesItems[] = $tmparticle->id;
}
/*--------------- Load the resulting articles from Flexicontent ------------*/
if ($flexicontentItems !== false) {
$filteredItems = array_intersect($articlesItems, $flexicontentItems);
} else {
$filteredItems = $articlesItems;
}
//include constants file
require_once (JPATH_ADMINISTRATOR.DS.'components/com_flexicontent/defineconstants.php');
\Joomla\CMS\Table\Table::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_flexicontent'.DS.'tables');
require_once(JPATH_SITE.DS."components/com_flexicontent/classes/flexicontent.fields.php");
require_once(JPATH_SITE.DS."components/com_flexicontent/classes/flexicontent.helper.php");
require_once(JPATH_SITE.DS."components/com_flexicontent/helpers/permission.php");
// require_once(JPATH_SITE.DS."components/com_content/helpers/route.php");
require_once(JPATH_SITE.DS."components/com_flexicontent/helpers/route.php");
require_once(JPATH_SITE.DS."components/com_flexicontent/models/".FLEXI_ITEMVIEW.".php");
$itemmodel_name = FLEXI_J16GE ? 'FlexicontentModelItem' : 'FlexicontentModelItems';
$itemmodel = new $itemmodel_name();
// load the articles/flexicontent items
$slideItems = Array();
foreach( $filteredItems as $item_id ) {
$item = $itemmodel->getItem($item_id, $check_view_access=false);
$item_link = \Joomla\CMS\Router\Route::_(FlexicontentHelperRoute::getItemRoute($item->slug, $item->categoryslug));
// use the Flexicontent image field only if selected
if ($flexicontentItems !== false && $fieldName) {
$items = array(&$item);
// Get fields values from the DB,
if (! isset($item->fields[$fieldName]->display_large_src)) {
FlexicontentFields::getFields($items);
FlexicontentFields::getFieldDisplay($item, $fieldName);
}
// if no image found, don't count
// $item->fields[$fieldName]->display_original_src = original image, but protected by htaccess
if (! isset($item->fields[$fieldName]->display_large_src) || ! $item->fields[$fieldName]->display_large_src) {
continue;
}
$articleImage = $item->fields[$fieldName]->display_large_src;
$articleImage = trim($articleImage, \Sliderck\CKUri::root(true));
$articleText = $item->introtext;
// else the selection is based on the articles only
} else {
$articleImage = false;
$articleText = '';
$registry = new \Sliderck\CKRegistry;
$registry->loadString($item->images);
$item->images = $registry->toArray();
switch ($params->get('flexicontent_imgsource', 'introimage')) {
case 'firstimage':
$search_images = preg_match('/<img(.*?)src="(.*?)"(.*?)\/>/is', $item->introtext, $imgresult);
$articleImage = (isset($imgresult[2]) && $imgresult[2] != '') ? $imgresult[2] : false;
$articleText = (isset($imgresult[2])) ? str_replace($imgresult[0], '', $item->introtext) : $item->introtext;
break;
case 'fullimage':
$articleImage = (isset($item->images['image_fulltext']) && $item->images['image_fulltext']) ? $item->images['image_fulltext'] : false;
$articleText = $item->introtext;
break;
case 'introimage':
default:
$articleImage = (isset($item->images['image_intro']) && $item->images['image_intro']) ? $item->images['image_intro'] : false;
$articleText = $item->introtext;
break;
}
}
// do nothing if no image found
if (! $articleImage) continue;
if (count($slideItems) < (int) $params->get('limitslides', 0)
|| (int) $params->get('limitslides', 0) == 0
) {
$slideItem = SliderckHelper::initItem();
$slideItem->image = SliderckHelper::setImageUrl($articleImage);
$slideItem->link = $item_link;
$slideItem->title = $item->title;
$slideItem->text = $articleText;
$slideItems[] = $slideItem;
}
}
return $slideItems;
}
}