Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/modules/mod_articles/mod_articles.php
<?php
/**
* @version        $Id$
* @package        Elxis
* @subpackage    Module Articles
* @copyright    Copyright (c) 2006-2021 Elxis CMS (https://www.elxis.org). All rights reserved.
* @license        Elxis Public License ( https://www.elxis.org/elxis-public-license.html )
* @author        Elxis Team ( https://www.elxis.org )
* @description     Elxis CMS is free software. Read the license for copyright notices and details
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed');


if (!
class_exists('modArticles', false)) {
    class
modArticles {

        private
$source = 0;
        private
$catid = 0;
        private
$subcats = 0;
        private
$catids = array();
        private
$artids = array();
        private
$order = 0;
        private
$days = 10;
        private
$limit = 5;
        private
$layout = 1;//1: 1column, 2: left-right
       
private $short = 1;
        private
$short_columns = 1;
        private
$short_imp = 0;
        private
$short_sub = 1;
        private
$short_cat = 0;
        private
$short_date = 0;
        private
$short_text = 0;
        private
$short_more = 0;
        private
$short_img = 8;
        private
$short_caption = 0;
        private
$links_sub = 0;
        private
$links_cat = 0;
        private
$links_date = 0;
        private
$links_img = 0;
        private
$links_columns = 1;
        private
$errormsg = '';
        private
$lng = 'en';
        private
$translate = false;
        private
$relkey = '';


       
/*********************/
        /* MAGIC CONSTRUCTOR */
        /*********************/
       
public function __construct($params) {
           
$this->lng = eFactory::getURI()->getUriLang();
            if (
eFactory::getElxis()->getConfig('MULTILINGUISM') == 1) {
                if (
$this->lng != '') { $this->translate = true; }
            }
           
$this->getParams($params);
        }


       
/*************************/
        /* GET MODULE PARAMETERS */
        /*************************/
       
private function getParams($params) {
           
$this->limit = (int)$params->get('limit', 5);
            if (
$this->limit < 1) { $this->limit = 5; }

           
$this->source = (int)$params->get('source', 0);
            if (
$this->source == 1) {
               
$this->catid = (int)$params->get('catid', 0);
               
$this->subcats = (int)$params->get('subcats', 0);
                if (
$this->catid < 1) { $this->errormsg = 'No category selected for the articles!'; }
            } else if (
$this->source == 2) {
               
$catstr = trim($params->get('catids', ''));
               
$catids = explode(',', $catstr);
                if (
$catids) {
                    foreach (
$catids as $catid) {
                       
$catid = (int)$catid;
                        if (
$catid > 0) { $this->catids[] = $catid; }
                    }
                }
                if (
count($this->catids) == 0) { $this->errormsg = 'No categories selected for the articles!'; }
            } else if (
$this->source == 4) {
               
$artstr = trim($params->get('artids', ''));
               
$artids = explode(',', $artstr);
                if (
$artids) {
                    foreach (
$artids as $artid) {
                       
$artid = (int)$artid;
                        if (
$artid > 0) { $this->artids[] = $artid; }
                    }
                }
               
$n = count($this->artids);
                if (
$n == 0) {
                   
$this->errormsg = 'No categories selected for the articles!';
                } else {
                    if (
$n > $this->limit) { $this->limit = $n; }
                }
            }

           
$this->order = (int)$params->get('order', 0);
            if (
$this->order == 2) {
               
$this->days = (int)$params->get('days', 10);
                if (
$this->days < 1) { $this->days = 10; }
            }

           
$this->layout = (int)$params->get('layout', 1);
            if (
$this->layout != 2) { $this->layout = 1; }
           
$this->relkey = trim($params->get('relkey', ''));
           
$this->short = (int)$params->get('short', 1);
            if (
$this->short > $this->limit) { $this->short = $this->limit; }
           
$this->short_columns = (int)$params->get('short_columns', 1);
           
$this->short_imp = (int)$params->get('short_imp', 0);
           
$this->short_sub = (int)$params->get('short_sub', 1);
           
$this->short_cat = (int)$params->get('short_cat', 0);
           
$this->short_date = (int)$params->get('short_date', 0);
           
$this->short_text = (int)$params->get('short_text', 0);
           
$this->short_more = (int)$params->get('short_more', 0);
           
$this->short_caption = (int)$params->get('short_caption', 0);
           
$this->short_img = (int)$params->get('short_img', 8);
           
//backwards compatibility
           
if ($this->short_img == 6) { $this->short_img = 1; }
            if (
$this->short_img == 7) { $this->short_img = 2; }
           
$this->links_sub = (int)$params->get('links_sub', 0);
           
$this->links_cat = (int)$params->get('links_cat', 0);
           
$this->links_date = (int)$params->get('links_date', 0);
           
$this->links_img = (int)$params->get('links_img', 0);
           
//backwards compatibility
           
if ($this->links_img == 3) { $this->links_img = 1; }
            if (
$this->links_img == 4) { $this->links_img = 2; }
           
$this->links_columns = (int)$params->get('links_columns', 1);
            if (
$this->source == 3) {
               
$this->short_cat = 0;
               
$this->links_cat = 0;
            }
        }


       
/*************************/
        /* DISPLAY ERROR MESSAGE */
        /*************************/
       
private function showError($msg) {
            echo
'<div class="elx5_error">'.$msg."</div>\n";
        }


       
/********************/
        /* RUN FOREST, RUN! */
        /********************/        
       
public function run() {
            if (
$this->errormsg != '') {
               
$this->showError($this->errormsg);
                return;
            }

           
$rows = $this->getArticles();
            if (!
$rows) { return; }

           
$total = count($rows);
           
$short = $this->short;
            if (
$short > $total) { $short = $total; }
           
$numlinks = $total - $short;

            if ((
$short == 0) || ($numlinks == 0)) { $this->layout = 1; }

            if (
$this->layout == 2) {
                echo
'<div class="elx5_2colwrap">'."\n";
                echo
'<div class="elx5_2colbox">'."\n";
               
$this->showShort($rows, $short);
                echo
"</div>\n";
                echo
'<div class="elx5_2colbox">'."\n";
               
$this->showLinks($rows, $short, $numlinks);
                echo
"</div>\n";
                echo
"</div>\n";
            } else {
               
$this->showShort($rows, $short);
               
$this->showLinks($rows, $short, $numlinks);
            }
        }


       
/**************************/
        /* RENDER LINKED ARTICLES */
        /**************************/
       
private function showLinks($articles, $skip, $numlinks) {
           
$eLang = eFactory::getLang();
           
$elxis = eFactory::getElxis();
           
$eFiles = eFactory::getFiles();

            switch (
$this->links_img) {
                case
1: $figaddon = ' elx5_content_imageboxtl'; $boxaddon = ' elx5_artboxtl'; break;
                case
2: $figaddon = ' elx5_content_imageboxtr'; $boxaddon = ' elx5_artboxtr'; break;
                case
0: default: $figaddon = ''; $boxaddon = ''; break;
            }

           
$i = 0;
           
$b = 0;
           
$c = 0;
           
$buffer = array();
            foreach (
$articles as $id => $article) {
                if (
$i < $skip) { $i++; continue; }
                if (
$c >= $numlinks) { break; }
                if (
$this->source != 3) {
                   
$link = $elxis->makeURL($article->seolink.$article->seotitle.'.html');
                } else {
                   
$link = $elxis->makeURL($article->seotitle.'.html');
                }

               
$imgbox = '';
                if (
$this->links_img > 0) {
                    if ((
trim($article->image) == '') || !file_exists(ELXIS_PATH.'/'.$article->image)) {
                       
$alt = (trim($article->caption) != '') ? $article->caption : $article->title;
                       
$imgbox = '<figure class="elx5_content_imagebox'.$figaddon.'">'."\n";
                       
$imgbox .= '<a href="'.$link.'" title="'.$article->title.'">';
                       
$imgbox .= '<img src="'.$elxis->secureBase().'/templates/system/images/nopicture_article.jpg" alt="'.$alt.'" />';
                       
$imgbox .= "</a>\n";
                       
$imgbox .= "</figure>\n";
                    } else {
                       
$imgfile = $elxis->secureBase().'/'.$article->image;
                       
$file_info = $eFiles->getNameExtension($article->image);
                        if (
file_exists(ELXIS_PATH.'/'.$file_info['name'].'_thumb.'.$file_info['extension'])) {
                           
$imgfile = $elxis->secureBase().'/'.$file_info['name'].'_thumb.'.$file_info['extension'];
                        }
                        unset(
$file_info);

                       
$alt = (trim($article->caption) != '') ? $article->caption : $article->title;
                       
$imgbox = '<figure class="elx5_content_imagebox'.$figaddon.'">'."\n";
                       
$imgbox .= '<a href="'.$link.'" title="'.$article->title.'"><img src="'.$imgfile.'" alt="'.$alt.'" /></a>'."\n";
                       
$imgbox .= "</figure>\n";
                    }
                }

               
$buffer[$b] = $imgbox;
               
$buffer[$b] .= '<div class="elx5_artbox_inner">'."\n";
               
$buffer[$b] .= '<h3><a href="'.$link.'" title="'.$article->title.'">'.$article->title.'</a></h3>'."\n";
                if (
$this->links_date == 1) {
                   
$txt = '<time datetime="'.$article->created.'">'.$this->friendlyDate($article->created).'</time>';
                    if ((
$this->links_cat == 1) && ($article->catid > 0)) {
                       
$link2 = $elxis->makeURL($article->seolink);
                       
$txt .= ' '.$eLang->get('IN').' <a href="'.$link2.'" title="'.$article->cattitle.'">'.$article->cattitle."</a>\n";
                    }
                   
$buffer[$b] .= '<div class="elx5_dateauthor">'.$txt.'</div>'."\n";
                } elseif ((
$this->links_cat == 1) && ($article->catid > 0)) {
                   
$link2 = $elxis->makeURL($article->seolink);
                   
$txt = $eLang->get('IN').' <a href="'.$link2.'" title="'.$article->cattitle.'">'.$article->cattitle."</a>\n";
                   
$buffer[$b] .= '<div class="elx5_dateauthor">'.$txt.'</div>'."\n";
                }

                if (
$this->links_sub == 1) {
                    if (
trim($article->subtitle) != '') { $buffer[$b] .= '<p class="elx5_content_subtitle">'.$article->subtitle."</p>\n"; }
                }
                if (
$imgbox != '') { $buffer[$b] .= '<div class="clear"></div>'."\n"; }
               
$buffer[$b] .= "</div>\n";//elx5_artbox_inner
               
$i++;
               
$b++;
               
$c++;
            }

            if (!
$buffer) { return; }

            if (
$this->links_columns > 1) {
                echo
'<div class="elx5_'.$this->links_columns.'colwrap">'."\n";
                foreach (
$buffer as $txt) {
                    echo
'<div class="elx5_'.$this->links_columns.'colbox elx5_artbox'.$boxaddon.'">'."\n";
                    echo
$txt;
                    echo
"</div>\n";
                }
                echo
"</div>\n";
            } else {
                foreach (
$buffer as $txt) {
                    echo
'<div class="elx5_artbox'.$boxaddon.'">'."\n";
                    echo
$txt;
                    echo
"</div>\n";
                }
            }
        }


       
/*************************/
        /* RENDER SHORT ARTICLES */
        /*************************/
       
private function showShort($articles, $num) {
           
$eLang = eFactory::getLang();
           
$elxis = eFactory::getElxis();
           
$eFiles = eFactory::getFiles();
           
$eDate = eFactory::getDate();

            switch (
$this->short_img) {
                case
1: $figaddon = ' elx5_content_imageboxtl'; $boxaddon = ' elx5_artboxtl'; break;
                case
2: $figaddon = ' elx5_content_imageboxtr'; $boxaddon = ' elx5_artboxtr'; break;
                case
3: $figaddon = ' elx5_content_imageboxlt'; $boxaddon = ' elx5_artboxlt'; break;
                case
4: $figaddon = ' elx5_content_imageboxml'; $boxaddon = ' elx5_artboxml'; break;
                case
5: $figaddon = ' elx5_content_imageboxmr'; $boxaddon = ' elx5_artboxmr'; break;
                case
8: $figaddon = ' elx5_content_imageboxlt'; $boxaddon = ' elx5_artboxvt'; break;
                case
0: default: $figaddon = ''; $boxaddon = ''; break;
            }

           
$i = 0;
           
$b = 0;
           
$buffer = array();
            foreach (
$articles as $id => $article) {
                if (
$i >= $num) { break; }
                if (
$this->source != 3) {
                   
$link = $elxis->makeURL($article->seolink.$article->seotitle.'.html');
                } else {
                   
$link = $elxis->makeURL($article->seotitle.'.html');
                }

               
$imgbox = '';
                if (
$this->short_img > 0) {
                    if ((
trim($article->image) == '') || !file_exists(ELXIS_PATH.'/'.$article->image)) {
                       
$alt = (trim($article->caption) != '') ? $article->caption : $article->title;
                       
$imgbox = '<figure class="elx5_content_imagebox'.$figaddon.'">'."\n";
                       
$imgbox .= '<a href="'.$link.'" title="'.$article->title.'">';
                       
$imgbox .= '<img src="'.$elxis->secureBase().'/templates/system/images/nopicture_article.jpg" alt="'.$alt.'" />';
                       
$imgbox .= "</a>\n";
                        if ((
$this->short_caption == 1) && (trim($article->caption) != '')) { $imgbox .= '<figcaption>'.$article->caption."</figcaption>\n"; }
                       
$imgbox .= "</figure>\n";
                    } else {
                       
$imgfile = $elxis->secureBase().'/'.$article->image;
                        if (
$this->short_img != 8) {
                           
$file_info = $eFiles->getNameExtension($article->image);
                            if (
file_exists(ELXIS_PATH.'/'.$file_info['name'].'_medium.'.$file_info['extension'])) {
                               
$imgfile = $elxis->secureBase().'/'.$file_info['name'].'_medium.'.$file_info['extension'];
                            }
                            unset(
$file_info);
                        }

                       
$alt = (trim($article->caption) != '') ? $article->caption : $article->title;
                       
$imgbox = '<figure class="elx5_content_imagebox'.$figaddon.'">'."\n";
                       
$imgbox .= '<a href="'.$link.'" title="'.$article->title.'"><img src="'.$imgfile.'" alt="'.$alt.'" /></a>'."\n";
                        if ((
$this->short_caption == 1) && (trim($article->caption) != '')) { $imgbox .= '<figcaption>'.$article->caption."</figcaption>\n"; }
                       
$imgbox .= "</figure>\n";
                    }
                }

               
$buffer[$b] = '';
                if (
$this->short_img != 3) { $buffer[$b] .= $imgbox; }

               
$buffer[$b] .= '<div class="elx5_artbox_inner">'."\n";
               
$buffer[$b] .= '<h3><a href="'.$link.'" title="'.$article->title.'">'.$article->title.'</a></h3>'."\n";
                if (
$this->short_date == 1) {
                   
$txt = '<time datetime="'.$article->created.'">'.$this->friendlyDate($article->created).'</time>';
                    if ((
$this->short_cat == 1) && ($article->catid > 0)) {
                       
$link2 = $elxis->makeURL($article->seolink);
                       
$txt .= ' '.$eLang->get('IN').' <a href="'.$link2.'" title="'.$article->cattitle.'">'.$article->cattitle."</a>\n";
                    }
                   
$buffer[$b] .= '<div class="elx5_dateauthor">'.$txt.'</div>'."\n";
                } elseif ((
$this->short_cat == 1) && ($article->catid > 0)) {
                   
$link2 = $elxis->makeURL($article->seolink);
                   
$txt = $eLang->get('IN').' <a href="'.$link2.'" title="'.$article->cattitle.'">'.$article->cattitle."</a>\n";
                   
$buffer[$b] .= '<div class="elx5_dateauthor">'.$txt.'</div>'."\n";
                }
               
$buffer[$b] .= "</div>\n";
                if (
$this->short_img == 3) { $buffer[$b] .= $imgbox; }

               
$buffer[$b] .= '<div class="elx5_artbox_inner">'."\n";
                if (
$this->short_sub == 1) {
                    if (
trim($article->subtitle) != '') { $buffer[$b] .= '<p class="elx5_content_subtitle">'.$article->subtitle."</p>\n"; }
                }

                if (
$this->short_text > 0) {
                   
$article->introtext = $this->removePlugins($article->introtext);
                    if (
$this->short_text < 1000) {
                       
$txt = strip_tags($article->introtext);
                       
$len = eUTF::strlen($txt);
                        if (
$len > $this->short_text) {
                           
$limit = $this->short_text - 3;
                           
$txt = eUTF::substr($txt, 0, $limit).'...';
                        }
                    } else {
                       
$txt = $article->introtext;
                    }
                    if (
$this->short_more) {
                       
$txt .= ' <a href="'.$link.'" title="'.$article->title.'">'.$eLang->get('MORE')."</a>\n";
                    }
                   
$buffer[$b] .= '<p>'.$txt."</p>\n";
                } else if (
$this->short_more) {
                   
$buffer[$b] .= '<a href="'.$link.'" title="'.$article->title.'">'.$eLang->get('MORE')."</a>\n";
                }

                if (
$this->short_date == 2) {
                   
$txt = '<time datetime="'.$article->created.'">'.$this->friendlyDate($article->created).'</time>';
                    if ((
$this->short_cat == 2) && ($article->catid > 0)) {
                       
$link2 = $elxis->makeURL($article->seolink);
                       
$txt .= ' '.$eLang->get('IN').' <a href="'.$link2.'" title="'.$article->cattitle.'">'.$article->cattitle."</a>\n";
                    }
                   
$buffer[$b] .= '<div class="elx5_dateauthor">'.$txt.'</div>'."\n";
                } elseif ((
$this->short_cat == 2) && ($article->catid > 0)) {
                   
$link2 = $elxis->makeURL($article->seolink);
                   
$txt = $eLang->get('IN').' <a href="'.$link2.'" title="'.$article->cattitle.'">'.$article->cattitle."</a>\n";
                   
$buffer[$b] .= '<div class="elx5_dateauthor">'.$txt.'</div>'."\n";
                }

                if ((
$this->short_img != 3) && ($this->short_img != 8)) {
                   
$buffer[$b] .= '<div class="clear"></div>'."\n";
                }
               
$buffer[$b] .= "</div>\n";//elx5_artbox_inner
               
$i++;
               
$b++;
            }

            if (!
$buffer) { return; }
            if (
$this->short_columns > 1) {
                echo
'<div class="elx5_'.$this->short_columns.'colwrap">'."\n";
                foreach (
$buffer as $txt) {
                    echo
'<div class="elx5_'.$this->short_columns.'colbox elx5_artbox'.$boxaddon.'">'."\n";
                    echo
$txt;
                    echo
"</div>\n";
                }
                echo
"</div>\n";
            } else {
                foreach (
$buffer as $txt) {
                    echo
'<div class="elx5_artbox'.$boxaddon.'">'."\n";
                    echo
$txt;
                    echo
"</div>\n";
                }
            }
        }


       
/********************************/
        /* REMOVE ALL PLUGINS FROM TEXT */
        /********************************/
        /* Use this method instead of elxisPlugin::removePlugins() in order not to initiate class in pages were we don't need it */
       
private function removePlugins($text) {
           
$cregex = '#<code>(.*?)</code>#';
           
$regex = '#{[^}]*}(?:.+?{\/[^}]*})?#';
           
$eregex = '~href="#elink:(.*?)"~';
           
$newtext = preg_replace($cregex, '', $text);
           
$newtext = preg_replace($regex, '', $newtext);
           
$newtext = preg_replace($eregex, 'href="javascript:void(null);"', $newtext);
            return
$newtext;
        }


       
/**********************/
        /* USER FRIENDLY DATE */
        /**********************/
       
private function friendlyDate($date) {
           
$eLang = eFactory::getLang();

           
$today = gmdate('Y-m-d');
            if (
strpos($date, $today) === 0) {
               
$dt = eFactory::getDate()->formatDate($date, '%H:%M');
                return
$eLang->get('TODAY').' '.$dt;
            } else {
               
$ts = time() - 86400;
               
$yesterday = gmdate('Y-m-d', $ts);
                if (
strpos($date, $yesterday) === 0) {
                   
$dt = eFactory::getDate()->formatDate($date, '%H:%M');
                    return
$eLang->get('YESTERDAY').' '.$dt;
                } else {
                    return
eFactory::getDate()->formatDate($date, $eLang->get('DATE_FORMAT_4'));
                }
            }
        }


       
/**********************************/
        /* GET ARTICLES FROM THE DATABASE */
        /**********************************/
       
private function getArticles() {
           
$db = eFactory::getDB();
           
$elxis = eFactory::getElxis();

           
$lowlev = $elxis->acl()->getLowLevel();
           
$exactlev = $elxis->acl()->getExactLevel();
           
$binds = array();

           
$sql = "SELECT a.id, a.catid, a.title, a.seotitle, a.subtitle, a.introtext, a.image, a.caption, a.created";
            if (
$this->source != 3) { $sql .= ", c.title AS cattitle, c.seolink"; }
           
$sql .= "\n FROM ".$db->quoteId('#__content')." a";
            if (
$this->source != 3) {
               
$sql .= "\n LEFT JOIN ".$db->quoteId('#__categories')." c ON c.catid=a.catid";
            }
           
$sql .= "\n WHERE a.published = 1";
            if ((
$this->short_imp == 1) && ($this->short > 0)) {
               
$sql .= ' AND a.important = :imp'; //bind will be set after prepare
           
}
            if (
$this->relkey != '') {
               
$sql .= ' AND a.relkey = :rlk';
               
$binds[] = array(':rlk', $this->relkey, PDO::PARAM_STR);
            }
            if (
$this->source != 3) {
                if ((
$this->source == 0) || ($this->source == 4)) {
                   
$sql .= " AND ((c.published = 1) OR (a.catid = 0))";
                } else {
                   
$sql .= " AND c.published = 1";
                }
            }
            if (
$this->source == 1) {
                if (
$this->subcats == 1) {
                   
$sql .= "\n AND ((c.catid = :ctg) OR (c.parent_id = :ctg))";
                   
$binds[] = array(':ctg', $this->catid, PDO::PARAM_INT);
                } else {
                   
$sql .= "\n AND c.catid = :ctg";
                   
$binds[] = array(':ctg', $this->catid, PDO::PARAM_INT);
                }
            } else if (
$this->source == 2) {
               
$sql .= "\n AND a.catid IN (".implode(",", $this->catids).")";
            } else if (
$this->source == 3) {
               
$sql .= "\n AND a.catid = :ctg";
               
$binds[] = array(':ctg', 0, PDO::PARAM_INT);
            } else if (
$this->source == 4) {
                if (
count($this->artids) == 1) {
                   
$sql .= "\n AND a.id = :xart";
                   
$binds[] = array(':xart', $this->artids[0], PDO::PARAM_INT);
                } else {
                   
$v = implode(',', $this->artids);
                   
$sql .= "\n AND a.id IN (".$v.")";
                }
            }
           
$sql .= " AND ((a.alevel <= :lowlevel) OR (a.alevel = :exactlevel))";
           
$binds[] = array(':lowlevel', $lowlev, PDO::PARAM_INT);
           
$binds[] = array(':exactlevel', $exactlev, PDO::PARAM_INT);

            if (
$this->source == 4) {
                if (
count($this->artids) > 1) {
                   
$sql .= "\n ORDER BY FIELD(a.id,".implode(',', $this->artids).")";//Mysql only
               
}
            } else {
                if (
$this->order == 1) {
                   
$sql .= "\n ORDER BY a.hits DESC";
                } else if (
$this->order == 2) {
                   
$ts = gmmktime(0, 0, 0, gmdate('m'), gmdate('d') - $this->days, gmdate('Y'));
                   
$date = gmdate('Y-m-d H:i:s', $ts);
                   
$sql .= " AND a.created > :crdate";
                   
$binds[] = array(':crdate', $date, PDO::PARAM_STR);
                   
$sql .= "\n ORDER BY a.hits DESC";
                } else {
                   
$sql .= "\n ORDER BY a.created DESC";
                }
            }

            if ((
$this->short_imp == 1) && ($this->short > 0)) { //first get the important as short
               
$stmt = $db->prepareLimit($sql, 0, $this->short);
                foreach (
$binds as $bind) {
                   
$stmt->bindParam($bind[0], $bind[1], $bind[2]);
                }
               
$imp = 1;
               
$stmt->bindParam(':imp', $imp, PDO::PARAM_INT);
            } else {
               
$stmt = $db->prepareLimit($sql, 0, $this->limit);
                foreach (
$binds as $bind) {
                   
$stmt->bindParam($bind[0], $bind[1], $bind[2]);
                }                
            }
           
$stmt->execute();
           
$firstrows = $stmt->fetchAllAssoc('id', PDO::FETCH_OBJ);

           
$secondrows = false;

            if ((
$this->short_imp == 1) && ($this->short > 0)) {
               
$n = $firstrows ? count($firstrows) : 0;
               
$this->short = $n;//set short number to those found as important. The rest (limit - short) will be displayed as links
               
$rest = $this->limit - $n;
                if (
$rest > 0) {
                   
$stmt = $db->prepareLimit($sql, 0, $rest);
                    foreach (
$binds as $bind) {
                       
$stmt->bindParam($bind[0], $bind[1], $bind[2]);
                    }
                   
$imp = 0;//not important articles only
                   
$stmt->bindParam(':imp', $imp, PDO::PARAM_INT);
                   
$stmt->execute();
                   
$secondrows = $stmt->fetchAllAssoc('id', PDO::FETCH_OBJ);
                }
            }

           
$rows = array();
            if (
$firstrows) { $rows = $firstrows; }
            if (
$secondrows) {
                foreach (
$secondrows as $id => $row) { $rows[$id] = $row; }
            }

            if (
$rows && ($this->translate === true)) {
               
$rows = $this->translateArticles($rows);
            }

            return
$rows;
        }


       
/**********************/
        /* TRANSLATE ARTICLES */
        /**********************/
       
private function translateArticles($rows) {
           
$db = eFactory::getDB();

           
$ids = array();
           
$catids = array();
            foreach (
$rows as $row) {
               
$ids[] = $row->id;
                if (
$row->catid > 0) { $catids[] = $row->catid; }
            }

            if ((
$this->source != 3) && ($catids)) { $catids = array_unique($catids); }

           
$sql = "SELECT ".$db->quoteId('elid').", ".$db->quoteId('element').", ".$db->quoteId('translation')
            .
"\n FROM ".$db->quoteId('#__translations')
            .
"\n WHERE ".$db->quoteId('category')."=".$db->quote('com_content')." AND ".$db->quoteId('language')." = :lng"
           
."\n AND ((".$db->quoteId('element')." = ".$db->quote('title').") OR (".$db->quoteId('element')." = ".$db->quote('subtitle').")"
           
."\n OR (".$db->quoteId('element')." = ".$db->quote('introtext').") OR (".$db->quoteId('element')." = ".$db->quote('caption')."))"
           
."\n AND ".$db->quoteId('elid')." IN (".implode(", ", $ids).")";
           
$stmt = $db->prepare($sql);
           
$stmt->bindParam(':lng', $this->lng, PDO::PARAM_STR);
           
$stmt->execute();
           
$translations = $stmt->fetchAll(PDO::FETCH_ASSOC);

            if (
$translations) {
                foreach (
$translations as $trans) {
                   
$id = (int)$trans['elid'];
                   
$element = $trans['element'];
                    if (!isset(
$rows[$id])) { continue; }
                    switch(
$element) {
                        case
'title': $rows[$id]->title = $trans['translation']; break;
                        case
'subtitle': $rows[$id]->subtitle = $trans['translation']; break;
                        case
'introtext': $rows[$id]->introtext = $trans['translation']; break;
                        case
'caption': $rows[$id]->caption = $trans['translation']; break;
                        default: break;
                    }
                }
            }

            if ((
$this->source != 3) && ($catids)) {
                if (((
$this->short > 0) && ($this->short_cat > 0)) || ($this->links_cat > 0)) {
                   
$sql = "SELECT ".$db->quoteId('elid').", ".$db->quoteId('translation')." FROM ".$db->quoteId('#__translations')
                    .
"\n WHERE ".$db->quoteId('category')."=".$db->quote('com_content')." AND ".$db->quoteId('language')." = :lng"
                   
."\n AND ".$db->quoteId('element')." = ".$db->quote('category_title')." AND ".$db->quoteId('elid')." IN (".implode(", ", $catids).")";
                   
$stmt = $db->prepare($sql);
                   
$stmt->bindParam(':lng', $this->lng, PDO::PARAM_STR);
                   
$stmt->execute();
                   
$translations = $stmt->fetchAllAssoc('elid', PDO::FETCH_ASSOC);
                    if (
$translations) {
                        foreach (
$rows as $id => $row) {
                            if ((
$row->catid > 0) && isset($translations[ $row->catid ])) {
                               
$rows[$id]->cattitle = $translations[ $row->catid ]['translation'];
                            }
                        }
                    }
                }
            }

            return
$rows;
        }

    }
}


$elxmodarts = new modArticles($params);
$elxmodarts->run();
unset(
$elxmodarts);

?>