Current File : /home/pacjaorg/.trash/modules/mod_tz_flex_grid/helper.php
<?php
/*------------------------------------------------------------------------

# TZ Flex Grid Module

# ------------------------------------------------------------------------

# Author:    DuongTVTemPlaza

# Copyright: Copyright (C) 2011-2019 tzportfolio.com. All Rights Reserved.

# @License - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL

# Website: http://www.tzportfolio.com

# Technical Support:  Forum - http://tzportfolio.com/forum

# Family website: http://www.templaza.com

-------------------------------------------------------------------------*/

// no direct access
defined('_JEXEC') or die;

use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;

JLoader::import('com_tz_portfolio_plus.helpers.route', JPATH_SITE . '/components');
JLoader::import('com_tz_portfolio_plus.helpers.tags', JPATH_SITE . '/components');
JLoader::import('com_tz_portfolio_plus.helpers.categories', JPATH_SITE.'/components');
JLoader::import('com_tz_portfolio_plus.libraries.plugin.helper', JPATH_ADMINISTRATOR.'/components');

//JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_tz_portfolio_plus/models', 'TZ_Portfolio_PlusModel');

abstract class ModTZ_Flex_GridHelper{

    protected static $cache = array();
    protected static $moduleName = 'mod_tz_flex_grid';

    public static function getList(&$params, $module = null){

        if($module){
            if(is_object($module)){
                self::$moduleName = $module -> module;
            }elseif(is_string($module)){
                self::$moduleName   = $module;
            }
        }

        $storeId    = __METHOD__.'::'.md5($params -> toString());

        if(!isset(self::$cache[$storeId])){
            self::$cache[$storeId]  = false;
        }

        if(!self::$cache[$storeId]){
            $db     = JFactory::getDbo();
            $query  = self::getListQuery($params);
            $db -> setQuery($query, 0, $params -> get('article_limit', 5));
            if($items = $db -> loadObjectList()){
                $app    = JFactory::getApplication();

                $ssl    = 2;
                $uri    = JUri::getInstance();
                if($uri -> isSsl()){
                    $ssl    = 1;
                }

                JPluginHelper::importPlugin('content');
                TZ_Portfolio_PlusPluginHelper::importPlugin('content');
                TZ_Portfolio_PlusPluginHelper::importPlugin('mediatype');

                $app -> triggerEvent('onAlwaysLoadDocument', array('modules.'.self::$moduleName));
                $app -> triggerEvent('onLoadData', array('modules.'.self::$moduleName, $items, $params));

                $content_ids        = ArrayHelper::getColumn($items, 'id');
                $mainCategories     = TZ_Portfolio_PlusFrontHelperCategories::getCategoriesByArticleId($content_ids,
                    array('main' => true));
                $second_categories  = TZ_Portfolio_PlusFrontHelperCategories::getCategoriesByArticleId($content_ids,
                    array('main' => false));

                foreach($items as $i => &$item){
                    $item -> params = clone($params);

                    $app -> triggerEvent('onTPContentBeforePrepare', array('modules.'.self::$moduleName,
                        &$item, &$item -> params));

                    // Create Article Link
                    $item -> link       = JRoute::_(TZ_Portfolio_PlusHelperRoute::getArticleRoute($item -> slug, $item -> catid));
                    $item -> fullLink   = JRoute::_(TZ_Portfolio_PlusHelperRoute::getArticleRoute($item -> slug, $item -> catid), true, $ssl);
                    $item -> authorLink = JRoute::_(TZ_Portfolio_PlusHelperRoute::getUserRoute($item -> created_by, $params->get('usermenuitem', 'auto')));
                    $item -> layout     = $params->get('layout');

                    // Set main category
                    if($mainCategories && isset($mainCategories[$item -> id])) {
                        $mainCategory = $mainCategories[$item->id];
                        if ($mainCategory) {
                            $item -> catid = $mainCategory->id;
                            $item -> category_title = $mainCategory->title;
                            $item -> catslug = $mainCategory->id . ':' . $mainCategory->alias;
                            $item -> category_link = $mainCategory->link;
                        }
                    }

                    // Get all second categories
                    $item -> second_categories  = null;
                    if(isset($second_categories[$item -> id])) {
                        $item -> second_categories = $second_categories[$item -> id];
                    }

                    $media      = $item -> media;
                    if(!empty($media)) {
                        $registry = new Registry($media);

                        $media = $registry->toObject();
                        $item->media = $media;
                    }

                    $item -> mediatypes = array();

                    $item -> event  = new stdClass();

                    //Call trigger in group content
                    if (!isset($item->text))
                    {
                        $item->text = $item->introtext;
                    }

                    $results = $app -> triggerEvent('onContentPrepare', array ('modules.'.self::$moduleName, &$item, &$params, 0));
                    $item->introtext = $item->text;

                    if($introtext_limit = $params -> get('introtext_limit')){
		                $item -> introtext  = '<p>'.JHtml::_('string.truncate', $item->introtext, $introtext_limit, true, false).'</p>';
	                }

                    $results = $app -> triggerEvent('onContentBeforeDisplay', array('modules.'.self::$moduleName,
                        &$item, &$params, 0, $params->get('layout', 'default')));
                    $item->event->beforeDisplayContent = trim(implode("\n", $results));

                    $results = $app -> triggerEvent('onContentAfterDisplay', array('modules.'.self::$moduleName,
                        &$item, &$params, 0, $params->get('layout', 'default')));
                    $item->event->afterDisplayContent = trim(implode("\n", $results));

                    // Process the tz portfolio's content plugins.
                    $results    = $app -> triggerEvent('onBeforeDisplayAdditionInfo',array('modules.'.self::$moduleName,
                        &$item, &$params, 0, $params->get('layout', 'default')));
                    $item -> event -> beforeDisplayAdditionInfo   = trim(implode("\n", $results));

                    $results    = $app -> triggerEvent('onAfterDisplayAdditionInfo',array('modules.'.self::$moduleName,
                        &$item, &$params, 0, $params->get('layout', 'default')));
                    $item -> event -> afterDisplayAdditionInfo   = trim(implode("\n", $results));

                    $results    = $app -> triggerEvent('onContentDisplayListView',array('modules.'.self::$moduleName,
                        &$item, &$params, 0, $params->get('layout', 'default')));
                    $item -> event -> contentDisplayListView   = trim(implode("\n", $results));

                    //Call trigger in group tz_portfolio_plus_mediatype
                    $results    = $app -> triggerEvent('onContentDisplayMediaType',array('modules.'.self::$moduleName,
                        &$item, &$params, 0, $params->get('layout', 'default')));
                    if(isset($item) && $item){
                        $item -> event -> onContentDisplayMediaType    = trim(implode("\n", $results));
                        if($results    = $app -> triggerEvent('onAddMediaType')){
                            $mediatypes = array();
                            foreach($results as $result){
                                if(isset($result -> special) && $result -> special) {
                                    $mediatypes[] = $result -> value;
                                }
                            }
                            $item -> mediatypes = $mediatypes;
                        }
                    }
                    else{
                        // Unset item if add-on is special (Examples: Add-On Link and Quote).
                        unset($items[$i]);
                    }

                    $app -> triggerEvent('onTPContentAfterPrepare', array('modules.'.self::$moduleName,
                        &$item, &$item -> params, 0, $params->get('layout', 'default')));
                }
                self::$cache[$storeId]  = $items;
            }
        }

        return self::$cache[$storeId];
    }

    protected static function getListQuery($params){
        $db     = JFactory::getDbo();
        $user   = JFactory::getUser();
        $query  = $db -> getQuery(true);

        $query -> select('c.*, c.id as content_id,t.title AS tagName, m.catid AS catid ,cc.title AS category_title');
        $query -> select('u.name AS author');
        $query -> select('CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(":", c.id, c.alias) ELSE c.id END as slug');
        $query -> select('CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END as catslug');
        $query -> select('CASE WHEN CHAR_LENGTH(c.fulltext) THEN c.fulltext ELSE null END as readmore');

        $query -> from($db -> quoteName('#__tz_portfolio_plus_content').' AS c');

        $query -> join('INNER',$db -> quoteName('#__tz_portfolio_plus_content_category_map').' AS m ON m.contentid=c.id');
        $query -> join('LEFT',$db -> quoteName('#__tz_portfolio_plus_categories').' AS cc ON cc.id=m.catid');
        $query -> join('LEFT',$db -> quoteName('#__tz_portfolio_plus_tag_content_map').' AS x ON x.contentid=c.id');
        $query -> join('LEFT',$db -> quoteName('#__tz_portfolio_plus_tags').' AS t ON t.id=x.tagsid');
        $query -> join('LEFT',$db -> quoteName('#__users').' AS u ON u.id=c.created_by');


        // Join over the categories to get parent category titles
        $query -> select('parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias');
        $query -> join('LEFT', '#__tz_portfolio_plus_categories as parent ON parent.id = cc.parent_id');

        $query -> where('c.state = 1');

        if($params -> get('show_noauth', 0)){
            $groups	= implode(',', $user -> getAuthorisedViewLevels());

            $query -> where('c.access IN ('.$groups.')');
            $query -> where('cc.access IN ('.$groups.')');
        }

        // Filter by categories
        $catids = $params -> get('catid', array());
        if(is_array($catids)){
            $catids = array_filter($catids);
            if(count($catids)){
                $query -> where('m.catid IN('.implode(',',$catids).')');
            }
        }
        elseif(!empty($catids)){
            $query -> where('m.catid IN('.$catids.')');
        }

        // Filter by media types
        if($types = $params -> get('media_types',array())){
            $types  = array_filter($types);
            if(count($types)) {
                $media_conditions   = array();
                foreach($types as $type){
                    $media_conditions[] = 'c.type='.$db -> quote($type);
                }
                if(count($media_conditions)){
                    $query -> andWhere($media_conditions);
                }
            }
        }

        switch ($params -> get('orderby_sec', 'rdate')){
            default:
                $orderby    = 'c.id DESC';
                break;
            case 'rdate':
                $orderby    = 'c.created DESC';
                break;
            case 'date':
                $orderby    = 'c.created ASC';
                break;
            case 'alpha':
                $orderby    = 'c.title ASC';
                break;
            case 'ralpha':
                $orderby    = 'c.title DESC';
                break;
            case 'author':
                $orderby    = 'u.name ASC';
                break;
            case 'rauthor':
                $orderby    = 'u.name DESC';
                break;
            case 'hits':
                $orderby    = 'c.hits DESC';
                break;
            case 'rhits':
                $orderby    = 'c.hits ASC';
                break;
            case 'order':
                $orderby    = 'c.ordering ASC';
                break;
        }

        $query -> order($orderby);

        $query -> group('c.id');

        return $query;
    }

	protected static function __getArticleByKey($article, $key = 'id')
	{
		$contentId	= ArrayHelper::getColumn($article, $key);
		$storeId = md5(__METHOD__ . '::' . $key.'::'.implode(',',$contentId));
		if (!isset(self::$cache[$storeId])) {
			self::$cache[$storeId] = ArrayHelper::getColumn($article, $key);
			return self::$cache[$storeId];
		}
		return self::$cache[$storeId];
	}

	public static function getTagsFilterByArticle($params)
	{
		if ($articles = self::getList($params)) {
			$contentId = self::__getArticleByKey($articles, 'content_id');
			return TZ_Portfolio_PlusFrontHelperTags::getTagsFilterByArticleId($contentId);
		}
		return false;
	}

	public static function getCategoriesFilterByArticle($params)
	{
		if ($articles = self::getList($params)) {
			$contentId = self::__getArticleByKey($articles, 'content_id');
			return TZ_Portfolio_PlusFrontHelperCategories::getCategoriesByArticleId($contentId, array('reverse_contentid' => false, 'groupby' => 'c.id'));
		}
		return false;
	}
	public static function getCategoriesByArticle($params)
	{
		if ($articles = self::getList($params)) {
			$contentId = self::__getArticleByKey($articles, 'content_id');
			return TZ_Portfolio_PlusFrontHelperCategories::getCategoriesByArticleId($contentId, array('reverse_contentid' => true));
		}
		return false;
	}
	public static function getTagsByArticle($params)
	{
		if ($articles = self::getList($params)) {
			$contentId = self::__getArticleByKey($articles, 'content_id');
			return TZ_Portfolio_PlusFrontHelperTags::getTagsByArticleId($contentId, array(
					'orderby' => 'm.contentid',
					'menuActive' => $params->get('tagmenuitem', 'auto'),
					'reverse_contentid' => true
				)
			);
		}
	}
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!