예제 #1
0
 public static function getList(&$params)
 {
     $app = JFactory::getApplication();
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
     $appParams = JFactory::getApplication()->getParams();
     $model->setState('params', $appParams);
     // Introtext
     $show_intro = $params->get('show_intro');
     $introtext_limit = intval($params->get('introtext_limit'));
     $li = $params->get('li');
     $lmttext = $params->get('lmttext');
     $clear_tag = $params->get('clear_tag');
     // Fulltext
     $show_full = $params->get('show_full', 0);
     $fulltext_limit = intval($params->get('fulltext_limit'));
     $li_full = $params->get('li_full');
     $lmttext_full = $params->get('lmttext_full');
     $clear_tag_full = $params->get('clear_tag_full');
     // Date
     $data_format = $params->get('data_format');
     $df_d = $params->get('df_d');
     $df_m = $params->get('df_m');
     $df_y = $params->get('df_y');
     // Image
     $pik = $params->def('pik');
     $imageWidth = intval($params->get('imageWidth'));
     $imageHeight = intval($params->get('imageHeight'));
     $thumb_width = intval($params->get('thumb_width'));
     $noimage = $params->def('noimage');
     $imglink = $params->def('imglink');
     $link_enabled = $params->get('link_enabled', 1);
     $youtube_img_show = $params->def('youtube_img_show', 1);
     $gallery = $params->def('gallery', 1);
     // Set the filters based on the module params
     $model->setState('list.start', (int) $params->get('count_skip', 0));
     $model->setState('list.limit', (int) $params->get('count', 5));
     $model->setState('filter.published', 1);
     $model->setState('list.select', 'a.fulltext, a.id, a.title, a.alias, a.title_alias, a.introtext, a.state, a.catid, a.created, a.created_by, a.created_by_alias,' . ' a.modified, a.modified_by, a.publish_up, a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access,' . ' a.hits, a.featured');
     // Access filter
     $access = !JComponentHelper::getParams('com_content')->get('show_noauth');
     $authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id'));
     $model->setState('filter.access', $access);
     // User filter
     $userId = JFactory::getUser()->get('id');
     switch ($params->get('user_id')) {
         case 'by_me':
             $model->setState('filter.author_id', (int) $userId);
             break;
         case 'not_me':
             $model->setState('filter.author_id', $userId);
             $model->setState('filter.author_id.include', false);
             break;
         case '0':
             break;
         default:
             $model->setState('filter.author_id', (int) $params->get('user_id'));
             break;
     }
     // Filter by language
     $model->setState('filter.language', $app->getLanguageFilter());
     //  Featured switch
     switch ($params->get('show_featured')) {
         case '1':
             $model->setState('filter.featured', 'only');
             break;
         case '0':
             $model->setState('filter.featured', 'hide');
             break;
         default:
             $model->setState('filter.featured', 'show');
             break;
     }
     // Set ordering
     $order_map = array('title_asc' => 'a.title', 'title_desc' => 'a.title DESC', 'id_asc' => 'a.id', 'id_desc' => 'a.id DESC', 'hits_asc' => 'a.hits', 'hits_desc' => 'a.hits DESC', 'created_asc' => 'a.created', 'created_desc' => 'a.created DESC', 'modified_desc' => 'a.modified DESC', 'modified_created_dsc' => 'a.modified DESC, a.created', 'modified_touch_dsc' => 'CASE WHEN (a.modified = ' . $db->quote($db->getNullDate()) . ') THEN a.created ELSE a.modified END', 'ordering_asc' => 'a.ordering', 'ordering_desc' => 'a.ordering DESC', 'rand' => 'rand()', 'publish_dsc' => 'a.publish_up', 'rating_dsc' => 'v.rating_count');
     $ordering = JArrayHelper::getValue($order_map, $params->get('ordering'), 'a.publish_up');
     $dir = '';
     $model->setState('list.ordering', $ordering);
     $model->setState('list.direction', $dir);
     // Select article or categories
     if ($params->def('display_article') == 1) {
         // Article filter
         $model->setState('filter.article_id', $params->def('articleid', array()));
     } else {
         // Category filter
         //$catids = $params->get('catid');
         $catids = $params->get('catid', array());
         if ($params->get('category_filtering_type') == 1) {
             $model->setState('filter.category_id.include', (bool) $params->get('category_filtering_type'));
         }
         if ($catids) {
             if ($params->get('show_child_category_articles', 0) && (int) $params->get('levels', 0) > 0) {
                 $categories = JModelLegacy::getInstance('Categories', 'ContentModel', array('ignore_request' => true));
                 $categories->setState('params', $appParams);
                 $levels = $params->get('levels', 1) ? $params->get('levels', 1) : 99999;
                 $categories->setState('filter.get_children', $levels);
                 $categories->setState('filter.published', 1);
                 $categories->setState('filter.access', $access);
                 $additional_catids = array();
                 foreach ($catids as $catid) {
                     $categories->setState('filter.parentId', $catid);
                     $recursive = true;
                     $items = $categories->getItems($recursive);
                     if ($items) {
                         foreach ($items as $category) {
                             $condition = $category->level - $categories->getParent()->level <= $levels;
                             if ($condition) {
                                 $additional_catids[] = $category->id;
                             }
                         }
                     }
                 }
                 $catids = array_unique(array_merge($catids, $additional_catids));
             }
             $model->setState('filter.category_id', $catids);
         }
         $excluded_articles = $params->get('excluded_articles', '');
         if ($excluded_articles) {
             $excluded_articles = explode("\r\n", $excluded_articles);
             $model->setState('filter.article_id', $excluded_articles);
             $model->setState('filter.article_id.include', false);
             // Exclude
         }
     }
     $date_filtering = $params->get('date_filtering', 0);
     $relative_date = $params->get('relative_date', 0);
     if ($date_filtering == 1) {
         $model->setState('filter.date_filtering', $date_filtering == 1 && $relative_date == 1 ? 'range' : 'relative');
         $model->setState('filter.date_field', $params->get('date_field', 'a.created'));
         switch ($relative_date) {
             case '1':
                 $model->setState('filter.start_date_range', $params->get('start_date_range', date('Y-m-d') . ' 00:00:00'));
                 $model->setState('filter.end_date_range', $params->get('end_date_range', date('Y-m-d H:i:s')));
                 break;
             case '2':
                 $model->setState('filter.relative_date', '7');
                 break;
             case '3':
                 $model->setState('filter.relative_date', '14');
                 break;
             case '4':
                 $model->setState('filter.relative_date', cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y')));
                 break;
             case '5':
                 $model->setState('filter.relative_date', '365');
                 break;
             case '6':
                 $model->setState('filter.relative_date', $params->get('custom_days', '30'));
                 break;
             case '0':
             default:
                 $model->setState('filter.relative_date', '1');
                 break;
         }
     }
     $items = $model->getItems();
     // JComments integration
     if ($params->def('JC') == 1 && count($items)) {
         $comments = JPATH_SITE . '/components/com_jcomments/jcomments.php';
         if (file_exists($comments)) {
             $ids = array();
             foreach ($items as $item) {
                 $ids[] = $item->id;
             }
             $db->setQuery('SELECT object_id, count(*) AS cnt FROM #__jcomments WHERE object_group = "com_content" AND object_id IN (' . implode(',', $ids) . ') AND published = "1"');
             $commentsCount = $db->loadObjectList('object_id');
             foreach ($items as &$item) {
                 $item->comments = isset($commentsCount[$item->id]) ? $commentsCount[$item->id]->cnt : 0;
                 $item->commentslink = '#comments';
                 $item->commentstext = JText::plural('LINK_READ_COMMENTS', $item->comments);
                 if ($item->comments == 0) {
                     $item->comments = '';
                     $item->commentslink = '#addcomments';
                     $item->commentstext = JText::_('LINK_ADD_COMMENT');
                 }
             }
         } else {
             echo '<strong style="color: green;">' . JText::_('MOD_JUNEWS_JC_NOT_INSTALLED') . '</strong>';
         }
     }
     foreach ($items as &$item) {
         $item->slug = $item->id . ':' . $item->alias;
         $item->catslug = $item->catid . ':' . $item->category_alias;
         if ($access || in_array($item->access, $authorised)) {
             $item->link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug));
             $catlink = JRoute::_(ContentHelperRoute::getCategoryRoute($item->catslug));
         } else {
             $item->link = JRoute::_('index.php?option=com_users&view=login');
             $catlink = $item->link;
         }
         // article title
         $item->title = preg_replace('#"(.*?)"#is', '«\\1»', strip_tags($item->title));
         // category title
         if ($params->get('showcat') == 1) {
             $cattitle = strip_tags($item->category_title);
             if ($params->get('showcatlink') == 1) {
                 $item->cattitle = '<a href="' . $catlink . '">' . $cattitle . '</a>';
             } else {
                 $item->cattitle = $cattitle;
             }
         }
         if ($pik == 1) {
             if ($imglink == 1) {
                 $imlink = '<a href="' . $item->link . '"' . ($params->get('tips') == 1 ? ' title="' . strip_tags($item->title) . '"' : '') . '>';
                 $imlink2 = '</a>';
             } else {
                 $imlink = '';
                 $imlink2 = '';
             }
             $junuimgresmatche = $item->introtext . $item->fulltext;
             if (preg_match('/{gallery\\s+(.*?)}/i', $junuimgresmatche, $junuimgsource) && $gallery == '1') {
                 $junuimgsource = $junuimgsource[1];
                 $imglist = explode("|", $junuimgsource);
                 $junuimgsource = $imglist[0];
                 $imglist = '';
                 $root = JPATH_BASE . '/';
                 $folder = 'images/' . $junuimgsource;
                 $img_folder = $root . $folder;
                 if (is_dir($img_folder)) {
                     $files = array();
                     $dir = opendir($img_folder);
                     while (($file = readdir($dir)) !== false) {
                         if ($file !== '.' && $file !== '..' && (strtolower(substr($file, -3)) === 'jpg' || strtolower(substr($file, -3)) === 'png' || strtolower(substr($file, -3)) === 'gif')) {
                             $files[] = $file;
                             break;
                         }
                     }
                     closedir($dir);
                     sort($files);
                     $junuimgsource = $folder . '/' . $files[0];
                 } else {
                     $junuimgsource = '';
                 }
             } elseif (preg_match('/<img(.*?)src="(.*?)"(.*?)>\\s*(<\\/img>)?/', $junuimgresmatche, $junuimgsource)) {
                 $junuimgsource = $junuimgsource[2];
             }
             // images from article parameters
             $images = json_decode($item->images);
             if ($params->def('image_source', 0) > '0' && (isset($images->image_intro) && !empty($images->image_intro) || isset($images->image_fulltext) && !empty($images->image_fulltext))) {
                 if ($params->def('image_source', 0) == '1') {
                     if (isset($images->image_intro) && !empty($images->image_intro)) {
                         $junuimgsource = htmlspecialchars($images->image_intro);
                         // raw image source
                         $item->imagesource = htmlspecialchars($images->image_intro);
                     } elseif (isset($images->image_fulltext) && !empty($images->image_fulltext)) {
                         $junuimgsource = htmlspecialchars($images->image_fulltext);
                         // raw image source
                         $item->imagesource = htmlspecialchars($images->image_fulltext);
                     }
                 } elseif ($params->def('image_source', 0) == '2' && (isset($images->image_intro) && !empty($images->image_intro))) {
                     $junuimgsource = htmlspecialchars($images->image_intro);
                     // raw image source
                     $item->imagesource = htmlspecialchars($images->image_intro);
                 } elseif ($params->def('image_source', 0) == '3' && (isset($images->image_fulltext) && !empty($images->image_fulltext))) {
                     $junuimgsource = htmlspecialchars($images->image_fulltext);
                     // raw image source
                     $item->imagesource = htmlspecialchars($images->image_fulltext);
                 }
             } else {
                 if ($junuimgsource) {
                     $junuimgsource = str_replace(JURI::base(), '', $junuimgsource);
                     // raw image source
                     $item->imagesource = $junuimgsource;
                 } else {
                     $junuimgsource = '';
                 }
             }
             switch ($thumb_width) {
                 case '0':
                     $contentimage = $imlink . '<img src="' . $junuimgsource . '" width="' . $imageWidth . '" alt="' . strip_tags($item->title) . '" />' . $imlink2;
                     $blankimage = $imlink . '<img src="' . JURI::base() . '/media/mod_junewsultra/' . $noimage . '" width="' . $imageWidth . '" alt="' . strip_tags($item->title) . '" />' . $imlink2;
                     if ($youtube_img_show == 1) {
                         $regex1 = '%(?:youtube(?:-nocookie)?\\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\\.be/)([^>"&?/ ]{11})%i';
                         $regex2 = '#(player.vimeo.com)/video/([0-9]+)#i';
                         if (preg_match($regex1, $junuimgresmatche, $match)) {
                             $yimg = modJUNewsUltraHelper::video('http://youtu.be/' . $match[1], 'hqthumb');
                             $item->image = $imlink . '<img src="' . $yimg . '" width="' . $imageWidth . '" alt="' . strip_tags($item->title) . '" />' . $imlink2;
                             $item->imagesource = $yimg;
                         } elseif (preg_match($regex2, $junuimgresmatche, $match)) {
                             $yimg = modJUNewsUltraHelper::video('http://vimeo.com/' . $match[2], 'hqthumb');
                             $item->image = $imlink . '<img src="' . $yimg . '" width="' . $imageWidth . '" alt="' . strip_tags($item->title) . '" />' . $imlink2;
                             $item->imagesource = $yimg;
                         } elseif ($junuimgsource) {
                             $item->image = $contentimage;
                         } elseif ($params->def('defaultimg', 1) == 1) {
                             $item->image = $blankimage;
                         }
                     } elseif ($junuimgsource) {
                         $item->image = $contentimage;
                     } elseif ($params->def('defaultimg', 1) == 1) {
                         $item->image = $blankimage;
                     }
                     break;
                 case '1':
                 default:
                     $thumb_img = modJUNewsUltraHelper::RenderImage($junuimgsource, &$params, '', '', '', '');
                     list($width, $height, $type, $attr) = getimagesize($thumb_img);
                     $contentimage = $imlink . '<img src="' . $thumb_img . '" ' . $attr . ' alt="' . strip_tags($item->title) . '" />' . $imlink2;
                     $blank_thumb_img = modJUNewsUltraHelper::RenderImage('media/mod_junewsultra/' . $noimage, &$params, '', '', '', '');
                     list($width, $height, $type, $attr) = getimagesize($blank_thumb_img);
                     $blankimage = $imlink . '<img src="' . $blank_thumb_img . '" ' . $attr . ' alt="' . strip_tags($item->title) . '" />' . $imlink2;
                     if ($youtube_img_show == 1 && $link_enabled == 1) {
                         $regex1 = '%(?:youtube(?:-nocookie)?\\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\\.be/)([^>"&?/ ]{11})%i';
                         $regex2 = '#(player.vimeo.com)/video/([0-9]+)#i';
                         if (preg_match($regex1, $junuimgresmatche, $match)) {
                             $yimg = modJUNewsUltraHelper::video('http://youtu.be/' . $match[1], 'hqthumb');
                             $video_img = modJUNewsUltraHelper::RenderImage($yimg, &$params, '', '', '', '');
                             list($width, $height, $type, $attr) = getimagesize($video_img);
                             $item->image = $imlink . '<img src="' . $video_img . '" ' . $attr . ' alt="' . strip_tags($item->title) . '" />' . $imlink2;
                             $item->imagesource = $yimg;
                         } elseif (preg_match($regex2, $junuimgresmatche, $match)) {
                             $yimg = modJUNewsUltraHelper::video('http://vimeo.com/' . $match[2], 'hqthumb');
                             $video_img = modJUNewsUltraHelper::RenderImage($yimg, &$params, '', '', '', '');
                             list($width, $height, $type, $attr) = getimagesize($video_img);
                             $item->image = $imlink . '<img src="' . $video_img . '" ' . $attr . ' alt="' . strip_tags($item->title) . '" />' . $imlink2;
                             $item->imagesource = $yimg;
                         } elseif ($junuimgsource) {
                             $item->image = $contentimage;
                         } elseif ($params->def('defaultimg', 1) == 1) {
                             $item->image = $blankimage;
                         }
                     } elseif ($junuimgsource) {
                         $item->image = $contentimage;
                     } elseif ($params->def('defaultimg', 1) == 1) {
                         $item->image = $blankimage;
                     }
                     break;
             }
         }
         // introtext
         if ($show_intro == '1') {
             if ($clear_tag == '1') {
                 $item->introtext = preg_replace('/{([a-zA-Z0-9\\-_]*)\\s*(.*?)}/i', '', $item->introtext);
                 $item->introtext = str_replace('&nbsp;', ' ', $item->introtext);
                 $item->introtext = strip_tags($item->introtext);
             } else {
                 $item->introtext = preg_replace('/{([a-zA-Z0-9\\-_]*)\\s*(.*?)}/i', '', $item->introtext);
                 $item->introtext = preg_replace('/<img(.*?)>/i', '', $item->introtext);
             }
             if ($li == '1') {
                 if ($lmttext == '1') {
                     $item->introtext = trim(implode(" ", array_slice(explode(" ", $item->introtext), 0, $introtext_limit)));
                 } else {
                     $item->introtext = trim(JString::substr($item->introtext, 0, $introtext_limit));
                 }
                 if (!preg_match('#(\\.|\\?|\\!)$#ismu', $item->introtext)) {
                     $item->introtext = preg_replace('#^\\s?(\\,|\\;|\\:|\\-)#ismu', '', $item->introtext);
                     $item->introtext = $item->introtext . '...';
                 }
             }
         }
         // fulltext
         if ($show_full == '1') {
             if ($clear_tag == '1') {
                 $item->fulltext = preg_replace('/{([a-zA-Z0-9\\-_]*)\\s*(.*?)}/i', '', $item->fulltext);
                 $item->fulltext = str_replace('&nbsp;', ' ', $item->fulltext);
                 $item->fulltext = strip_tags($item->fulltext);
             } else {
                 $item->fulltext = preg_replace('/{([a-zA-Z0-9\\-_]*)\\s*(.*?)}/i', '', $item->fulltext);
                 $item->fulltext = preg_replace('/<img(.*?)>/i', '', $item->fulltext);
             }
             if ($li_full == '1') {
                 if ($lmttext_full == '1') {
                     $item->fulltext = trim(implode(" ", array_slice(explode(" ", $item->fulltext), 0, $fulltext_limit)));
                 } else {
                     $item->fulltext = trim(JString::substr($item->fulltext, 0, $fulltext_limit));
                 }
                 if (!preg_match('#(\\.|\\?|\\!)$#ismu', $item->fulltext)) {
                     $item->fulltext = preg_replace('#^\\s?(\\,|\\;|\\:|\\-)#ismu', '', $item->fulltext);
                     $item->fulltext = $item->fulltext . '...';
                 }
             }
         }
         // author
         if ($params->def('juauthor') == 1) {
             if ($item->created_by_alias) {
                 $item->author = $item->created_by_alias;
             } else {
                 $item->author = $item->author;
             }
         }
         // date
         if ($params->get('show_date') == 1) {
             $item->date = JHtml::date($item->created, $data_format);
             $item->df_d = JHtml::date($item->created, $df_d);
             $item->df_m = JHtml::date($item->created, $df_m);
             $item->df_y = JHtml::date($item->created, $df_y);
         }
         // hits
         if ($params->get('showHits') == 1) {
             $item->hits = $item->hits;
         }
         // rating
         if ($params->get('showRating') == 1) {
             $template = str_replace('_:', '', $params->def('template'));
             $starImageOn = JHTML::_('image.site', 'modules/mod_junewsultra/tmpl/' . $template . '/images/rating_star.png', null);
             $starImageOff = JHtml::_('image.site', 'modules/mod_junewsultra/tmpl/' . $template . '/images/rating_star_blank.png', NULL, NULL, true);
             $img = '';
             for ($i = 0; $i < $item->rating; $i++) {
                 $img .= $starImageOn;
             }
             for ($i = $item->rating; $i < 5; $i++) {
                 $img .= $starImageOff;
             }
             $item->rating = $img;
         }
     }
     return $items;
 }