                                                                                                                                                                                
                                                                                                                                                                                
PK       ! 6      
  index.htmlnu bS        <!DOCTYPE html><title></title>PK       ! Xŝ      css/basic.cssnu bS        .tz_portfolio_plus_portfolio{
    color: #616161;
    margin-left: 0;
    box-sizing: border-box;
}
.tz_portfolio_plus_portfolio *{
    box-sizing: border-box;
}
.tz_portfolio_plus_portfolio .element{
    color: #616161;
}
.tz_portfolio_plus_portfolio:not(.tpp-bootstrap) .TzInner {
     padding: 5px;
     border-color: #ddd;
}
.tz_portfolio_plus_portfolio:not(.tpp-bootstrap) .information {
    padding: 0 10px 10px;
}
.tz_portfolio_plus_portfolio .tzpp_media{
    margin-bottom: 15px;
}
.tz_portfolio_plus_portfolio .title{
    margin-top: 0;
    font-size: 20px;
    line-height: 26px;
}
.tz_portfolio_plus_portfolio .title a{
    color: #3b3b3b;
}
.tz_portfolio_plus_portfolio .title a:hover,
.tz_portfolio_plus_portfolio .title a:focus{
    outline: none;
    text-decoration: none;
}
.tz_portfolio_plus_portfolio .item-meta{
    margin-bottom: 10px;
}
.tz_portfolio_plus_portfolio .readmore{
    margin: 10px 0;
}
.tz_portfolio_plus_portfolio >li .readmore{
    margin-top: 5px;
    box-shadow: none;
    text-shadow: none;
    border-color: #2e6da4;
    background-image: none;
    background-color: #337ab7;
}
.tz_portfolio_plus_portfolio >li .readmore:hover,
.tz_portfolio_plus_portfolio >li .readmore:focus,
.tz_portfolio_plus_portfolio >li .readmore:active{
    border-color: #204d74;
    background-color: #286090;
}
.tz_portfolio_plus_portfolio > li{
    margin-bottom: 20px;
    list-style: none;
}PK       ! 6        css/index.htmlnu bS        <!DOCTYPE html><title></title>PK       ! x4~  ~    css/style.cssnu bS        .tz_portfolio_plus_portfolio .element {
    background: none;
}
/*.tz_portfolio_plus_portfolio:not(.tpp-bootstrap) .TzInner {*/
    /*!*margin: 10px;*!*/
    /*!*padding: 10px;*!*/
    /*overflow: hidden;*/
    /*border-color: 1px solid #ebebeb;*/
/*}*/
.tz_portfolio_plus_portfolio:not(.tpp-bootstrap) .option-combo .selected{
    background: #e6e6e6;
}
.tz_portfolio_plus_portfolio:not(.tpp-bootstrap) .information{
    padding: 9px;
}
.tz_portfolio_plus_portfolio .element img{
    max-width: 100%;
    position: relative;
}
.tz_portfolio_plus_portfolio .element .tzpp_media{
    overflow: hidden;
}
/*.tz_portfolio_plus_portfolio:not(.tpp-bootstrap) .element .information{*/
    /*padding: 9px 0;*/
/*}*/
.tz_portfolio_plus_portfolio:not(.tpp-bootstrap) .btn-view-all{
    padding: 6px 20px;
}
.tz_portfolio_plus_portfolio:not(.tpp-bootstrap) .tpp-portfolio__action{
    margin-top: 10px;
}PK       ! 6        tmpl/index.htmlnu bS        <!DOCTYPE html><title></title>PK       ! ߽Z2  2    tmpl/default.phpnu bS        <?php
/*------------------------------------------------------------------------

# TZ Portfolio Plus Extension

# ------------------------------------------------------------------------

# author    TuanNATemPlaza

# copyright Copyright (C) 2015-2018 tzportfolio.com. All Rights Reserved.

# @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL

# Websites: http://www.templaza.com

# Technical Support:  Forum - http://templaza.com/Forum

-------------------------------------------------------------------------*/

// no direct access
defined('_JEXEC') or die;

use Joomla\Utilities\ArrayHelper;

$bootstrap4 = ($params -> get('enable_bootstrap',0) && $params -> get('bootstrapversion', 3) == 4);

$doc = JFactory::getDocument();
$doc->addScript(JUri::root() . '/components/com_tz_portfolio_plus/js/jquery.isotope.min.js', array('version' => 'auto'));
$doc->addScript(JUri::root() . '/components/com_tz_portfolio_plus/js/tz_portfolio_plus.min.js', array('version' => 'auto'));
$doc->addStyleSheet(JUri::base(true) . '/components/com_tz_portfolio_plus/css/isotope.min.css', array('version' => 'auto'));

if(!$bootstrap4){
    $doc -> addStyleSheet('components/com_tz_portfolio_plus/css/tzportfolioplus.min.css',
        array('version' => 'auto'));
}

$doc->addStyleSheet(JUri::base(true) . '/modules/'.$module -> module.'/css/style.css', array('version' => 'auto'));

if($params -> get('load_style', 0)) {
    $doc->addStyleSheet(JUri::base(true) . '/modules/'.$module -> module.'/css/basic.css', array('version' => 'auto'));
}
if ($params->get('height_element')) {
    $doc->addStyleDeclaration('
        #portfolio' . $module->id . ' .TzInner{
            height:' . $params->get('height_element') . 'px;
        }
    ');
}
if($params -> get('enable_resize_image', 0)){
    $doc -> addScript(JUri::base(true) . '/modules/'.$module -> module.'/js/resize.js', array('version' => 'auto'));
    if ($params->get('height_element')) {
        $doc->addStyleDeclaration('
        #portfolio' . $module->id . ' .tzpp_media img{
            max-width: none;
        }
        #portfolio' . $module->id . ' .tzpp_media{
            height:' . $params->get('height_element') . 'px;
        }
    ');
    }
}
$doc->addScriptDeclaration('
jQuery(function($){
    $(document).ready(function(){
        $("#portfolio' . $module->id . '").tzPortfolioPlusIsotope({
            "mainElementSelector"       : "#TzContent' . $module->id . '",
            "containerElementSelector"  : "#portfolio' . $module->id . '",
            "sortParentTag"             : "filter'.$module->id.'",
            isotope_options             : {
                "filterSelector"            : "#tz_options'.$module -> id.' .option-set"
            },
            "params"                    : {
                "orderby_sec"           : "'.$params -> get('orderby_sec', 'rdate').'",
                "tz_column_width"       : ' . $params->get('width_element') . ',
                "tz_show_filter"        : ' . $params->get('show_filter', 1) . ',
                "tz_filter_type"        : "'.$params -> get('tz_filter_type', 'categories').'"
            },
            "afterColumnWidth" : function(newColCount,newColWidth){
                '.($params -> get('enable_resize_image', 0)?'TzPortfolioPlusArticlesResizeImage($("#portfolio' . $module->id . ' > .element .tzpp_media"));':'').'
            }
        });
    });
    $(window).load(function(){
        var $tzppisotope    = $("#portfolio' . $module->id . '").data("tzPortfolioPlusIsotope");
        if(typeof $tzppisotope === "object"){
            $tzppisotope.imagesLoaded(function(){
                $tzppisotope.tz_init();
            });
        }
    });
});
');

if ($list):
    ?>
<div id="TzContent<?php echo $module->id; ?>" class="tz_portfolio_plus_portfolio<?php echo $moduleclass_sfx;?> TzContent tpp-bootstrap">
    <?php if($show_filter && isset($filter_tag) && isset($categories)):?>
    <div id="tz_options<?php echo $module -> id;?>" class="clearfix">
        <div class="option-combo mb-3">
            <div class="filter-title TzFilter"><?php echo JText::_('MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_FILTER');?></div>
            <div id="filter<?php echo $module->id;?>" class="option-set clearfix" data-option-key="filter">
                <a href="#show-all" data-option-value="*" class="btn btn-default btn-outline-secondary btn-sm btn-small selected"><?php
                    echo JText::_('MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_ALL');?></a>
                <?php if($params->get('tz_filter_type','categories') == 'tags' && $filter_tag):?>
                    <?php foreach($filter_tag as $i => $itag):?>
                        <a href="#<?php echo $itag -> alias; ?>"
                           class="btn btn-default btn-outline-secondary btn-sm btn-small"
                           data-option-value=".<?php echo $itag -> alias; ?>">
                            <?php echo $itag -> title;?>
                        </a>
                    <?php endforeach;?>
                <?php endif;?>
                <?php if($params->get('tz_filter_type','categories') == 'categories' && $filter_cat): ?>
                    <?php foreach($filter_cat as $i => $icat):?>
                        <a href="#<?php echo $icat -> alias; ?>"
                           class="btn btn-default btn-outline-secondary btn-sm btn-small"
                           data-option-value=".<?php echo $icat -> alias; ?>">
                            <?php  echo $icat -> title;?>
                        </a>
                    <?php endforeach;?>
                <?php endif;?>
            </div>
        </div>
    </div>
    <?php endif?>
    <div id="portfolio<?php echo $module->id; ?>" class="masonry row mb-3">
        <?php foreach ($list as $i => $item) : ?>
            <?php
            $item_filter    = array();
            if ($item -> params->get('tz_filter_type','') == 'tags' && isset($tags[$item->content_id]) && !empty($tags[$item->content_id])) {
                $item_filter = ArrayHelper::getColumn($tags[$item->content_id], 'alias');
            }

            if ($item -> params->get('tz_filter_type','') == 'categories' && isset($categories[$item->content_id]) && !empty($categories[$item->content_id])) {
                if(isset($categories[$item->content_id])){
                    $item_filter    = ArrayHelper::getColumn($categories[$item->content_id], 'alias');
                }
            }
            ?>
        <div class="element <?php echo implode(' ', $item_filter)?>"
             data-date="<?php echo strtotime($item -> created); ?>"
             data-title="<?php echo $item -> title; ?>"
             data-hits="<?php echo (int) $item -> hits; ?>">
            <div class="card rounded-0 m-2 TzInner">
                <?php
                if(isset($item->event->onContentDisplayMediaType)){
                    if($item->event->onContentDisplayMediaType && !empty($item->event->onContentDisplayMediaType)){
                ?>
                <div class="tzpp_media">
                  <?php echo $item->event->onContentDisplayMediaType;?>
                </div>
                <?php
                    }
                }

                if(!isset($item -> mediatypes) || (isset($item -> mediatypes) && !in_array($item -> type,$item -> mediatypes))){
                ?>
                <div class="card-body information">
                    <?php
                    if ($item -> params -> get('show_title', 1)) {
                        echo '<h3 class="title"><a href="' . $item->link . '">' . $item->title . '</a></h3>';
                    }

                    //Call event onContentBeforeDisplay on plugin
                    if(isset($item -> event -> beforeDisplayContent)) {
                        echo $item->event->beforeDisplayContent;
                    }

                    if ($item -> params->get('show_introtext', 1)) {
                    ?>
                        <div class="description"><?php echo $item->introtext;?></div>
                    <?php }
                    if($item -> params -> get('show_author', 1) or $item -> params->get('show_created_date', 1)
                        or $item -> params->get('show_hit', 1) or $item -> params->get('show_tag', 1)
                        or $item -> params->get('show_category', 1)
                        or !empty($item -> event -> beforeDisplayAdditionInfo)
                        or !empty($item -> event -> afterDisplayAdditionInfo)) {
                    ?>
                    <div class="muted text-muted item-meta mb-3">
                        <?php
                        if (isset($item->event->beforeDisplayAdditionInfo)) {
                            echo $item->event->beforeDisplayAdditionInfo;
                        }

                        if ($item -> params->get('show_author', 1)) {
                            echo '<div class="tz_created_by"><span class="text">' . JText::_('MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_TZ_CREATED_BY')
                                . '</span><a href="' . $item->author_link . '">' . $item->user_name . '</a></div>';
                        }
                        if ($item -> params->get('show_created_date', 1)) {
                            echo '<div class="tz_date"><span class="text">' . JText::_('MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_TZ_DATE')
                                . '</span>' . JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC1')) . '</div>';
                        }
                        if ($item -> params->get('show_hit', 1)) {
                            echo '<div class="tz_hit"><span class="text">' . JText::_('MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_TZ_HIT') . '</span>' . $item->hits . '</div>';
                        }
                        if ($item -> params->get('show_tag', 1)) {
                            if (isset($tags[$item->content_id])) {
                                echo '<div class="tz_tag"><span class="text">' . JText::_('MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_TZ_TAGS') . '</span>';
                                foreach ($tags[$item->content_id] as $t => $tag) {
                                    echo '<a href="' . $tag->link . '">' . $tag->title . '</a>';
                                    if ($t != count($tags[$item->content_id]) - 1) {
                                        echo ', ';
                                    }
                                }
                                echo '</div>';
                            }
                        }
                        if ($item -> params->get('show_category', 1)) {
                            if (isset($categories[$item->content_id]) && $categories[$item->content_id]) {
                                if (count($categories[$item->content_id]))
                                    echo '<div class="tz_categories"><span class="text">' . JText::_('MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_TZ_CATEGORIES') . '</span>';
                                foreach ($categories[$item->content_id] as $c => $category) {
                                    echo '<a href="' . $category->link . '">' . $category->title . '</a>';
                                    if ($c != count($categories[$item->content_id]) - 1) {
                                        echo ', ';
                                    }
                                }
                                echo '</div>';
                            }
                        }
                        if(isset($item -> event -> afterDisplayAdditionInfo)){
                            echo $item -> event -> afterDisplayAdditionInfo;
                        }
                        ?>
                    </div>
                        <?php
                    }

                    if(isset($item -> event -> contentDisplayListView)) {
                        echo $item->event->contentDisplayListView;
                    }
                    if($item -> params -> get('show_readmore',1)){
                    ?>
                    <a href="<?php echo $item->link?>"
                       class="btn btn-primary readmore"><?php echo $item -> params -> get('readmore_text','Read More');?></a>
                    <?php }?>
                </div>
                <?php } ?>
            </div>
        </div>
        <?php endforeach; ?>
    </div>
    <?php if($params -> get('show_view_all', 0)){?>
    <div class="tpp-portfolio__action text-center mb-3">
        <a href="<?php echo $params -> get('view_all_link');?>"<?php echo ($target = $params -> get('view_all_target'))?' target="'
            .$target.'"':'';?> class="btn btn-primary btn-view-all"><?php
            echo $params -> get('view_all_text', 'View All Portfolios');?></a>
    </div>
    <?php } ?>
</div>
<?php endif; ?>PK       ! `      js/resize.jsnu bS        /**
 * ------------------------------------------------------------------------
 * resizeImage Plugin
 * ------------------------------------------------------------------------
 * Copyright (C) 2012-2013 SUNLAND Co., JSC. All Rights Reserved.
 * license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: Sonle
 * Email: sonlv@templaza.com
 * Websites: http://www.templaza.com
 * ------------------------------------------------------------------------
 */


(function($,window){
    'use strict';
    window.TzPortfolioPlusArticlesResizeImage = function (obj,wstage,hstage){
        var widthStage;
        var heightStage ;
        var widthImage;
        var heightImage;
        if(Object.keys(obj).length > 1) {
            obj.each(function (i, el) {
                heightStage = jQuery(this).height();
                widthStage = jQuery(this).width();
                if(wstage){
                    widthStage  = wstage;
                }
                if(hstage){
                    heightStage  = hstage;
                }
                var img_url = jQuery(this).find('img').attr('src');
                var image = new Image();
                image.src = img_url;

                widthImage = image.naturalWidth;
                heightImage = image.naturalHeight;
                var tzimg = new resizeImage(widthImage, heightImage, widthStage, heightStage);
                jQuery(this).find('img').css({top: tzimg.top, left: tzimg.left, width: tzimg.width, height: tzimg.height});
            });
        }else{
            heightStage = obj.height();
            widthStage = obj.width();
            var img_url = obj.find('img').attr('src');
            var image = new Image();
            image.src = img_url;

            if(wstage){
                widthStage  = wstage;
            }
            if(hstage){
                heightStage  = hstage;
            }

            widthImage = image.naturalWidth;
            heightImage = image.naturalHeight;
            // console.log('widthImage='+widthImage+'heightImage='+heightImage+'heightStage='+heightStage);
            var tzimg = new resizeImage(widthImage, heightImage, widthStage, heightStage);
            obj.find('img').css({top: tzimg.top, left: tzimg.left, width: tzimg.width, height: tzimg.height});
        }
    };

    var resizeImage = function (widthImage, heightImage, widthStage, heightStage) {

        var escImageX = widthStage / widthImage;
        var escImageY = heightStage / heightImage;

        var escalaImage = (escImageX > escImageY) ? escImageX : escImageY;

        var widthV = widthImage * escalaImage;
        var heightV = heightImage * escalaImage;
        var posImageY = 0;
        var posImageX = 0;

        if (heightV > heightStage) {
            posImageY = (heightStage - heightV) / 2;
        }

        if (widthV > widthStage) {
            posImageX = (widthStage - widthV) / 2;
        }
        return { top: posImageY, left: posImageX, width: widthV, height: heightV };
    };
})(jQuery, window);PK       ! 6        js/index.htmlnu bS        <!DOCTYPE html><title></title>PK       ! l7  7  
  helper.phpnu bS        <?php
/*------------------------------------------------------------------------

# TZ Portfolio Plus Extension

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

# author    DuongTVTemPlaza

# copyright Copyright (C) 2015 templaza.com. All Rights Reserved.

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

# Websites: http://www.templaza.com

# Technical Support:  Forum - http://templaza.com/Forum

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

// 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');

class modTZ_Portfolio_PlusPortfolioHelper
{
    protected static $cache;

    public static function getList(&$params, $module = null)
    {
        $storeId    = __METHOD__;
        $storeId   .= ':'.serialize($params);
        $storeId    = md5($storeId);

        if(isset(self::$cache[$storeId])){
            return self::$cache[$storeId];
        }

        // Get the dbo
        $app    = JFactory::getApplication();
        $db     = JFactory::getDbo();
        $query  = $db->getQuery(true);

        $query->select('c.*, c.id as content_id, m.catid AS catid, u.name as user_name, u.id as user_id');
        $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('#__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');

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

        if($params -> get('category_filter', 2) == 2){
            $query -> where('(m.main = 0 OR m.main = 1)');
        }elseif($params -> get('category_filter',2) == 1){
            $query -> where('m.main = 1');
        }else{
            $query -> where('m.main = 0');
        }


        $nullDate = $db->Quote($db->getNullDate());
        $nowDate = $db->Quote(JFactory::getDate()->toSQL());

        $query->where('(c.publish_up = ' . $nullDate . ' OR c.publish_up <= ' . $nowDate . ')');
        $query->where('(c.publish_down = ' . $nullDate . ' OR c.publish_down >= ' . $nowDate . ')');

        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 -> where('('.implode(' OR ', $media_conditions).')');
                }
            }
        }

        if (!$params->get('show_featured', 1)) {
            $query -> where('c.featured = 0');
        } elseif ($params->get('show_featured', 1) == 2) {
            $query -> where('c.featured = 1');
        }

        $catids = $params->get('catid');
        if (is_array($catids)) {
            $catids = array_filter($catids);
            if (count($catids)) {
                $query->where('m.catid IN(' . implode(',', $catids) . ')');
            }
        } else {
            $query->where('m.catid IN(' . $catids . ')');
        }

        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;
        }

        if ($params->get('random_article', 0)) {
            $query->order('RAND()');
        }

        $query->order($orderby);
        $query->group('c.id');
        $db->setQuery($query, 0, $params->get('article_limit', 5));
        $items = $db->loadObjectList();

        if ($items) {
            JPluginHelper::importPlugin('content');
            TZ_Portfolio_PlusPluginHelper::importPlugin('content');
            TZ_Portfolio_PlusPluginHelper::importPlugin('mediatype');

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

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

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

                $config = JFactory::getConfig();
                $ssl    = 2;
                if($config -> get('force_ssl')){
                    $ssl    = $config -> get('force_ssl');
                }
                $uri    = JUri::getInstance();
                if($uri -> isSsl()){
                    $ssl    = 1;
                }

                $item->link = JRoute::_(TZ_Portfolio_PlusHelperRoute::getArticleRoute($item->slug, $item->catslug, $item->language));
                $item->fullLink = JRoute::_(TZ_Portfolio_PlusHelperRoute::getArticleRoute($item->slug, $item->catslug, $item->language), true, $ssl);
                $item->author_link = JRoute::_(TZ_Portfolio_PlusHelperRoute::getUserRoute($item->user_id, $params->get('usermenuitem', 'auto')));

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

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

                $item -> mediatypes = array();


                // Old plugins: Ensure that text property is available
                if (!isset($item->text))
                {
                    $item->text = $item->introtext;
                }
                $item -> event  = new stdClass();

                //Call trigger in group content
                $results = $app -> triggerEvent('onContentPrepare', array ('modules.mod_tz_portfolio_plus_portfolio', &$item, &$item -> params, 0));
                $item->introtext = $item->text;

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

                $results = $app -> triggerEvent('onContentBeforeDisplay', array('modules.mod_tz_portfolio_plus_portfolio',
                    &$item, &$item -> params, 0, $params->get('layout', 'default'), $module));
                if(is_array($results)){
                    $results    = array_unique($results);
                }
                $item->event->beforeDisplayContent = trim(implode("\n", $results));

                $results = $app -> triggerEvent('onContentAfterDisplay', array('modules.mod_tz_portfolio_plus_portfolio',
                    &$item, &$item -> params, 0, $params->get('layout', 'default'), $module));
                if(is_array($results)){
                    $results    = array_unique($results);
                }
                $item->event->afterDisplayContent = trim(implode("\n", $results));

                // Process the tz portfolio's content plugins.
                $results    = $app -> triggerEvent('onBeforeDisplayAdditionInfo',array('modules.mod_tz_portfolio_plus_portfolio',
                    &$item, &$item -> params, 0, $params->get('layout', 'default'), $module));
                if(is_array($results)){
                    $results    = array_unique($results);
                }
                $item -> event -> beforeDisplayAdditionInfo   = trim(implode("\n", $results));

                $results    = $app -> triggerEvent('onAfterDisplayAdditionInfo',array('modules.mod_tz_portfolio_plus_portfolio',
                    &$item, &$item -> params, 0, $params->get('layout', 'default'), $module));
                if(is_array($results)){
                    $results    = array_unique($results);
                }
                $item -> event -> afterDisplayAdditionInfo   = trim(implode("\n", $results));

                $results    = $app -> triggerEvent('onContentDisplayListView',array('modules.mod_tz_portfolio_plus_portfolio',
                    &$item, &$item -> params, 0, $params->get('layout', 'default'), $module));
                if(is_array($results)){
                    $results    = array_unique($results);
                }
                $item -> event -> contentDisplayListView   = trim(implode("\n", $results));

                //Call trigger in group tz_portfolio_plus_mediatype
                $results    = $app -> triggerEvent('onContentDisplayMediaType',array('modules.mod_tz_portfolio_plus_portfolio',
                    &$item, &$item -> params, 0, $params->get('layout', 'default'), $module));
                if(is_array($results)){
                    $results    = array_unique($results);
                }
                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($items[$i]);
                }

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

    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 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 getCategoriesGroupByArticle($params)
    {
        if ($articles = self::getList($params)) {
            $contentId = self::__getArticleByKey($articles, 'content_id');
            return TZ_Portfolio_PlusFrontHelperCategories::getCategoriesByArticleId($contentId, array('reverse_contentid' => true, 'groupby' => 'c.id'));
        }
        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
                )
            );
        }
    }

    public static function getTagsByCategory($params)
    {
        $catids = $params->get('catid');
        if(isset($catids)) {
            $tags = TZ_Portfolio_PlusFrontHelperTags::getTagsByCategoryId($catids);
            return $tags;
        }else {
            return false;
        }
    }

    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;
    }
}
PK       ! 
\  \  #  mod_tz_portfolio_plus_portfolio.phpnu bS        <?php
/*------------------------------------------------------------------------

# TZ Portfolio Plus Extension

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

# author    DuongTVTemPlaza

# copyright Copyright (C) 2015 templaza.com. All Rights Reserved.

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

# Websites: http://www.templaza.com

# Technical Support:  Forum - http://templaza.com/Forum

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

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

// Include the syndicate functions only once
require_once dirname(__FILE__) . '/helper.php';

JLoader::import('com_tz_portfolio_plus.libraries.helper.modulehelper', JPATH_ADMINISTRATOR.'/components');

JHtml::_('jquery.framework');

$doc    = JFactory::getDocument();

if($params -> get('enable_bootstrap', 0)  && $params -> get('enable_bootstrap_js', 1)) {
    if( $params -> get('bootstrapversion', 3) == 4) {
        $doc->addScript(TZ_Portfolio_PlusUri::base(true) . '/vendor/bootstrap/js/bootstrap.min.js',
            array('version' => 'auto'));
        $doc->addScript(TZ_Portfolio_PlusUri::base(true) . '/vendor/bootstrap/js/bootstrap.bundle.min.js',
            array('version' => 'auto'));
    }else{
        $doc -> addScript(TZ_Portfolio_PlusUri::base(true).'/bootstrap/js/bootstrap.min.js',
            array('version' => 'auto'));
    }
}

$doc -> addScript(TZ_Portfolio_PlusUri::root(true).'/js/core.min.js');

$list = modTZ_Portfolio_PlusPortfolioHelper::getList($params, $module);
$categories = modTZ_Portfolio_PlusPortfolioHelper::getCategoriesByArticle($params);
$tags = modTZ_Portfolio_PlusPortfolioHelper::getTagsByArticle($params);
$show_filter = $params->get('show_filter',1);
if($show_filter) {
    $filter_tag = modTZ_Portfolio_PlusPortfolioHelper::getTagsFilterByArticle($params);
    $filter_cat = modTZ_Portfolio_PlusPortfolioHelper::getCategoriesFilterByArticle($params);
}
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'));
require TZ_Portfolio_PlusModuleHelper::getTZLayoutPath($module, $params->get('layout', 'default'));
PK       ! =15  5  #  mod_tz_portfolio_plus_portfolio.xmlnu bS        <?xml version="1.0" encoding="utf-8"?>
<extension version="3.0" type="module" client="site" method="upgrade">
    <name>mod_tz_portfolio_plus_portfolio</name>
    <author>DuongTVTemplaza</author>
    <creationDate>January 10 2018</creationDate>
    <copyright>Copyright (C) 2015-2018 TemPlaza. All rights reserved.</copyright>
    <license>GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html</license>
    <authorEmail>support@templaza.com</authorEmail>
    <authorUrl>www.templaza.com/</authorUrl>
    <version>2.3.6</version>
    <description>MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_XML_DESCRIPTION</description>
    <files>
        <filename module="mod_tz_portfolio_plus_portfolio">mod_tz_portfolio_plus_portfolio.php</filename>
        <folder>css</folder>
        <folder>js</folder>
        <folder>tmpl</folder>
        <filename>helper.php</filename>
        <filename>index.html</filename>
        <filename>mod_tz_portfolio_plus_portfolio.xml</filename>
    </files>
    <languages folder="language">
        <language tag="en-GB">en-GB/en-GB.mod_tz_portfolio_plus_portfolio.ini</language>
        <language tag="en-GB">en-GB/en-GB.mod_tz_portfolio_plus_portfolio.sys.ini</language>
    </languages>
    <config>
        <fields name="params">
            <fieldset name="basic" addfieldpath="administrator/components/com_tz_portfolio_plus/models/fields">
                <field name="catid" type="tzcategory" multiple="true" size="10"
                       default="" label="JCATEGORY" description="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_FIELD_CATEGORY_DESC">
                    <option value="">JOPTION_ALL_CATEGORIES</option>
                </field>
                <field type="tzmediatypes" name="media_types"
                       multiple="true"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_MEDIA_TYPES_LABEL">
                    <option value="">MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_ALL_MEDIA_TYPES</option>
                    <option value="none">MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_NO_MEDIA</option>
                </field>
                <field type="tztemplates" name="template_id"
                       label="COM_TZ_PORTFOLIO_PLUS_TEMPLATE_LABEL">
                    <option value="0">JOPTION_USE_DEFAULT</option>
                </field>
                <field name="show_title" type="radio"
                       class="switcher btn-group" default="1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_TITLE">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field name="show_introtext" type="radio"
                       class="switcher btn-group" default="1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_INTROTEXT_LABEL">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field name="introtext_limit" type="text"
                       showon="show_introtext:1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_FIELD_INTROTEXT_LIMIT_LABEL"/>
                <field type="radio" name="show_created_date"
                       class="switcher btn-group" default="1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_CREATED_DATE_LABEL">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field type="radio" name="show_hit"
                       class="switcher btn-group" default="1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_HIT_LABEL">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field type="radio" name="show_author"
                       class="switcher btn-group" default="1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_AUTHOR_LABEL">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field type="radio" name="show_category"
                       class="switcher btn-group" default="1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_CATEGORY_LABEL">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field type="radio" name="show_tag"
                       class="switcher btn-group" default="1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_TAG_LABEL">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field type="radio" name="show_readmore"
                        class="switcher btn-group" default="1"
                        label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_READMORE_LABEL">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field type="text" name="readmore_text"
                       default="Read more"
                       showon="show_readmore:1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_READMORE_TEXT_LABEL"/>
                <field type="radio" name="show_view_all"
                        class="switcher btn-group" default="0"
                        label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_VIEW_ALL_PORTFOLIOS_LABEL"
                        description="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_VIEW_ALL_PORTFOLIOS_DESC">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field type="text" name="view_all_link"
                       showon="show_view_all:1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_LINK"
                       description="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_LINK_DESC"/>
                <field type="text" name="view_all_text"
                       default="View All Portfolios"
                       showon="show_view_all:1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_TEXT"
                       description="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_TEXT_DESC"/>
                <field type="list" name="view_all_target"
                       showon="show_view_all:1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_TARGET_WINDOW_LABEL"
                       description="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_TARGET_WINDOW_DESC">
                    <option value="">MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_VALUE_PARENT_WINDOW</option>
                    <option value="_blank">MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_VALUE_NEW_WINDOW</option>
                </field>
                <field name="article_limit" type="text"
                       default="5" label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_FIELD_ARTICLE_LIMIT_LABEL"/>
                <field name="show_featured" type="list" default=""
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_FIELD_FEATURED_LABEL"
                       description="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_FIELD_FEATURED_DESC">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                    <option value="2">MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_VALUE_ONLY_SHOW_FEATURED</option>
                </field>
                <field type="radio" name="random_article"
                       class="switcher btn-group" default="0"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_RANDOM_ARTICLE_LABEL">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field name="orderby_sec"
                       type="list"
                       default="rdate"
                       label="JGLOBAL_ARTICLE_ORDER_LABEL"
                       description="JGLOBAL_ARTICLE_ORDER_DESC">
                    <option value="rdate">JGLOBAL_MOST_RECENT_FIRST</option>
                    <option value="date">JGLOBAL_OLDEST_FIRST</option>
                    <option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
                    <option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
                    <option value="author">JGLOBAL_AUTHOR_ALPHABETICAL</option>
                    <option value="rauthor">JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL</option>
                    <option value="hits">JGLOBAL_MOST_HITS</option>
                    <option value="rhits">JGLOBAL_LEAST_HITS</option>
                    <option value="order">JGLOBAL_ARTICLE_MANAGER_ORDER</option>
                </field>

                <field name="usermenuitem" type="menuitem" default="auto"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SELECT_MENU_ITEMID_USER_LABEL">
                    <option value="auto">JGLOBAL_AUTO</option>
                </field>
                <field name="tagmenuitem" type="menuitem" default="auto"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SELECT_MENU_ITEMID_TAG_LABEL">
                    <option value="auto">JGLOBAL_AUTO</option>
                </field>
                <field type="radio" name="load_style"
                       class="switcher btn-group" default="0"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_LOAD_STYLE_LABEL">
                    <option value="0">JNO</option>
                    <option value="1">JYES</option>
                </field>
            </fieldset>

            <fieldset name="portfolio" label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_PORTFOLIO_FIELDSET_LABEL">
                <field name="width_element" type="number" class="btn-group" default="300"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_WIDTH_ELEMENT_LABEL"/>
                <field name="height_element" type="number" class="btn-group" default=""
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_HEIGHT_ELEMENT_LABEL"/>
                <field type="radio" name="show_filter"
                       class="switcher btn-group" default="1"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_SHOW_FILTER_LABEL">
                    <option value="0">JHIDE</option>
                    <option value="1">JSHOW</option>
                </field>
                <field type="list" name="tz_filter_type"
                       default="categories"
                       showon="show_filter:1"
                       label="MOD_TZ_PORTFOLIO_PLUS_FILTER_TYPE">
                    <option value="tags">MOD_TZ_PORTFOLIO_PLUS_TAGS</option>
                    <option value="categories">MOD_TZ_PORTFOLIO_PLUS_CATEGORIES</option>
                </field>
                <field type="radio" name="enable_resize_image"
                       class="switcher btn-group" default="0"
                       label="MOD_TZ_PORTFOLIO_PLUS_PORTFOLIO_ENABLE_RESIZE_IMAGE_LABEL">
                    <option value="0">JNO</option>
                    <option value="1">JYES</option>
                </field>
            </fieldset>

            <fieldset name="advanced">

                <field type="modulelayout" name="layout"
                       label="JFIELD_ALT_LAYOUT_LABEL"
                       description="JFIELD_ALT_MODULE_LAYOUT_DESC"/>
                <field type="text" name="moduleclass_sfx"
                       label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
                       description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC"/>
                <field type="list" name="cache"
                       default="1"
                       label="COM_MODULES_FIELD_CACHING_LABEL"
                       description="COM_MODULES_FIELD_CACHING_DESC">
                    <option value="1">JGLOBAL_USE_GLOBAL</option>
                    <option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
                </field>
                <field type="text" name="cache_time"
                       default="900"
                       label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
                       description="COM_MODULES_FIELD_CACHE_TIME_DESC"/>
                <field type="hidden" name="cachemode"
                       default="static">
                    <option value="static"></option>
                </field>
                <field type="radio" name="enable_bootstrap"
                       default="0" class="switcher btn-group"
                       label="COM_TZ_PORTFOLIO_PLUS_ENABLE_BOOTSTRAP_LIBRARY_LABEL">
                    <option value="0">JNO</option>
                    <option value="1">JYES</option>
                </field>
                <field type="list" name="bootstrapversion"
                       default="3"
                       showon="enable_bootstrap:1"
                       label="COM_TZ_PORTFOLIO_PLUS_BOOTSTRAP_VERSION">
                    <option value="3">JGLOBAL_SEF_ADVANCED_LEGACY</option>
                    <option value="4">v4</option>
                </field>
                <field type="radio" name="enable_bootstrap_js"
                       default="1" class="switcher btn-group"
                       showon="enable_bootstrap:1"
                       label="COM_TZ_PORTFOLIO_PLUS_ENABLE_BOOTSTRAP_JS_LABEL">
                    <option value="0">JNO</option>
                    <option value="1">JYES</option>
                </field>
            </fieldset>
        </fields>
    </config>
</extension>
PK         ! 6      
                index.htmlnu bS        PK         ! Xŝ                X   css/basic.cssnu bS        PK         ! 6                    css/index.htmlnu bS        PK         ! x4~  ~              v  css/style.cssnu bS        PK         ! 6                  1
  tmpl/index.htmlnu bS        PK         ! ߽Z2  2              
  tmpl/default.phpnu bS        PK         ! `                =  js/resize.jsnu bS        PK         ! 6                  I  js/index.htmlnu bS        PK         ! l7  7  
            5J  helper.phpnu bS        PK         ! 
\  \  #            5  mod_tz_portfolio_plus_portfolio.phpnu bS        PK         ! =15  5  #              mod_tz_portfolio_plus_portfolio.xmlnu bS        PK      z  M    