Current File : /home/pacjaorg/public_html/nsa/components/com_sppagebuilder/helpers/articles.php |
<?php
/**
* @package SP Page Builder
* @author JoomShaper http://www.joomshaper.com
* @copyright Copyright (c) 2010 - 2021 JoomShaper
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later
*/
//no direct accees
defined ('_JEXEC') or die ('Restricted access');
use Joomla\Utilities\ArrayHelper;
if(!class_exists('ContentHelperRoute')) require_once (JPATH_SITE . '/components/com_content/helpers/route.php');
abstract class SppagebuilderHelperArticles
{
public static function getArticles( $count = 5, $ordering = 'latest', $catid = '', $include_subcategories = true, $post_format = '', $tagids = array() ) {
$authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id'));
$app = JFactory::getApplication();
$db = JFactory::getDbo();
$nullDate = $db->quote($db->getNullDate());
$nowDate = $db->quote(JFactory::getDate()->toSql());
$query = $db->getQuery(true);
$query
->select('a.*')
->from($db->quoteName('#__content', 'a'))
->select($db->quoteName('b.alias', 'category_alias'))
->select($db->quoteName('b.title', 'category'))
->join('LEFT', $db->quoteName('#__categories', 'b') . ' ON (' . $db->quoteName('a.catid') . ' = ' . $db->quoteName('b.id') . ')')
->where($db->quoteName('b.extension') . ' = ' . $db->quote('com_content'));
if($post_format) {
$query->where('('.$db->quoteName('a.attribs') . ' LIKE ' . $db->quote('%"post_format":"'. $post_format .'"%') . ' OR ' . $db->quoteName('a.attribs') . ' LIKE ' . $db->quote('%"helix_ultimate_article_format":"'. $post_format .'"%').')');
}
$query->where($db->quoteName('a.state') . ' = ' . $db->quote(1));
// Category filter
if (($catid != '' || is_array($catid)))
{
if (!is_array($catid))
{
$catid = array($catid);
}
if (!in_array('', $catid))
{
$categories = self::getCategories( $catid, $include_subcategories );
$categories = array_merge($categories, $catid);
//array_unshift($categories, $catid);
$query->where($db->quoteName('a.catid')." IN (" . implode( ',', $categories ) . ")");
}
}
// tags filter
if (is_array($tagids) && count($tagids))
{
$tagId = implode(',', ArrayHelper::toInteger($tagids));
if ($tagId)
{
$subQuery = $db->getQuery(true)
->select('DISTINCT content_item_id')
->from($db->quoteName('#__contentitem_tag_map'))
->where('tag_id IN (' . $tagId . ')')
->where('type_alias = ' . $db->quote('com_content.article'));
$query->innerJoin('(' . (string) $subQuery . ') AS tagmap ON tagmap.content_item_id = a.id');
}
}
// publishing
if ( JVERSION < 4)
{
$query->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')');
$query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')');
}
else
{
$nowDate = JFactory::getDate()->toSql();
$query->extendWhere(
'AND',
[
$db->quoteName('a.publish_up') . ' IS NULL',
$db->quoteName('a.publish_up') . ' <= :publishUp',
],
'OR'
)->extendWhere(
'AND',
[
$db->quoteName('a.publish_down') . ' IS NULL',
$db->quoteName('a.publish_down') . ' >= :publishDown',
],
'OR'
)->bind([':publishUp', ':publishDown'], $nowDate);
}
// has order by
if ($ordering == 'hits') {
$query->order($db->quoteName('a.hits') . ' DESC');
} elseif($ordering == 'featured') {
$query->where($db->quoteName('a.featured') . ' = ' . $db->quote(1));
$query->order($db->quoteName('a.publish_up') . ' DESC');
} elseif($ordering == 'oldest') {
$query->order($db->quoteName('a.publish_up') . ' ASC');
} elseif($ordering == 'alphabet_asc') {
$query->order($db->quoteName('a.title') . ' ASC');
} elseif($ordering == 'alphabet_desc') {
$query->order($db->quoteName('a.title') . ' DESC');
} elseif($ordering == 'random') {
$query->order($query->Rand());
} else {
$query->order($db->quoteName('a.publish_up') . ' DESC');
}
// Language filter
if ($app->isClient('site') && $app->getLanguageFilter()) {
$query->where('a.language IN (' . $db->Quote(JFactory::getLanguage()->getTag()) . ',' . $db->Quote('*') . ')');
}
// continue query
$query->where($db->quoteName('a.access')." IN (" . implode( ',', $authorised ) . ")");
$query->order($db->quoteName('a.created') . ' DESC')
->setLimit($count);
$db->setQuery($query);
$items = $db->loadObjectList();
foreach ($items as &$item) {
$item->slug = $item->id . ':' . $item->alias;
$item->catslug = $item->catid . ':' . $item->category_alias;
$item->username = JFactory::getUser($item->created_by)->name;
$item->link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catid, $item->language));
$attribs = json_decode($item->attribs);
$feature_img = '';
if (isset($attribs->helix_ultimate_image) && $attribs->helix_ultimate_image) {
$feature_img = $attribs->helix_ultimate_image;
} elseif (isset($attribs->spfeatured_image) && $attribs->spfeatured_image) {
$feature_img = $attribs->spfeatured_image;
}
// Featured Image
if(isset($feature_img) && $feature_img != NULL) {
$item->featured_image = $featured_image = $feature_img;
$img_baseurl = basename($featured_image);
//Small
$small = JPATH_ROOT . '/' . dirname($featured_image) . '/' . JFile::stripExt($img_baseurl) . '_small.' . JFile::getExt($img_baseurl);
if(file_exists($small)) {
$item->image_small = JURI::root(true) . '/' . dirname($featured_image) . '/' . JFile::stripExt($img_baseurl) . '_small.' . JFile::getExt($img_baseurl);
}
//Thumb
$thumbnail = JPATH_ROOT . '/' . dirname($featured_image) . '/' . JFile::stripExt($img_baseurl) . '_thumbnail.' . JFile::getExt($img_baseurl);
if(file_exists($thumbnail)) {
$item->image_thumbnail = JURI::root(true) . '/' . dirname($featured_image) . '/' . JFile::stripExt($img_baseurl) . '_thumbnail.' . JFile::getExt($img_baseurl);
} else {
$item->image_thumbnail = JURI::root(true) . '/' . $item->featured_image;
}
//Medium
$medium = JPATH_ROOT . '/' . dirname($featured_image) . '/' . JFile::stripExt($img_baseurl) . '_medium.' . JFile::getExt($img_baseurl);
if(file_exists($medium)) {
$item->image_medium = JURI::root(true) . '/' . dirname($featured_image) . '/' . JFile::stripExt($img_baseurl) . '_medium.' . JFile::getExt($img_baseurl);
}
//Large
$large = JPATH_ROOT . '/' . dirname($featured_image) . '/' . JFile::stripExt($img_baseurl) . '_large.' . JFile::getExt($img_baseurl);
if(file_exists($large)) {
$item->image_large = JURI::root(true) . '/' . dirname($featured_image) . '/' . JFile::stripExt($img_baseurl) . '_large.' . JFile::getExt($img_baseurl);
}
} else {
$images = json_decode($item->images);
if(isset($images->image_intro) && $images->image_intro) {
if(strpos($images->image_intro, "http://") !== false || strpos($images->image_intro, "https://") !== false){
$item->image_thumbnail = $images->image_intro;
} else {
$item->image_thumbnail = JURI::root(true) . '/' . $images->image_intro;
}
} elseif (isset($images->image_fulltext) && $images->image_fulltext) {
if(strpos($images->image_fulltext, "http://") !== false || strpos($images->image_fulltext, "https://") !== false){
$item->image_thumbnail = $images->image_fulltext;
} else {
$item->image_thumbnail = JURI::root(true) . '/' . $images->image_fulltext;
}
} else {
$item->image_thumbnail = false;
}
}
// Post Format
$item->post_format = 'standard';
if(isset($attribs->helix_ultimate_article_format) && $attribs->helix_ultimate_article_format != '') {
$item->post_format = $attribs->helix_ultimate_article_format;
} elseif(isset($attribs->post_format) && $attribs->post_format != '') {
$item->post_format = $attribs->post_format;
}
// Post Format Video
if(isset($item->post_format) && $item->post_format == 'video') {
$video_url = '';
if (isset($attribs->helix_ultimate_video) && $attribs->helix_ultimate_video) {
$video_url = $attribs->helix_ultimate_video;
} elseif (isset($attribs->video) && $attribs->video) {
$video_url = $attribs->video;
}
if(isset($video_url) && $video_url != NULL) {
$video = parse_url($video_url);
$video_src = '';
switch($video['host']) {
case 'youtu.be':
$video_id = trim($video['path'],'/');
$video_src = '//www.youtube.com/embed/' . $video_id;
break;
case 'www.youtube.com':
case 'youtube.com':
parse_str($video['query'], $query);
$video_id = $query['v'];
$video_src = '//www.youtube.com/embed/' . $video_id;
break;
case 'vimeo.com':
case 'www.vimeo.com':
$video_id = trim($video['path'],'/');
$video_src = "//player.vimeo.com/video/" . $video_id;
}
$item->video_src = $video_src;
} else {
$item->video_src = '';
}
}
// Post Format Audio
if(isset($item->post_format) && $item->post_format == 'audio') {
$audio_url = '';
if (isset($attribs->helix_ultimate_audio) && $attribs->helix_ultimate_audio) {
$audio_url = $attribs->helix_ultimate_audio;
} elseif (isset($attribs->audio) && $attribs->audio) {
$audio_url = $attribs->audio;
}
if(isset($audio_url) && $audio_url != NULL) {
$item->audio_embed = $audio_url;
} else {
$item->audio_embed = '';
}
}
// Post Format Quote
if(isset($item->post_format) && $item->post_format == 'quote') {
if(isset($attribs->quote_text) && $attribs->quote_text != NULL) {
$item->quote_text = $attribs->quote_text;
} else {
$item->quote_text = '';
}
if(isset($attribs->quote_author) && $attribs->quote_author != NULL) {
$item->quote_author = $attribs->quote_author;
} else {
$item->quote_author = '';
}
}
// Post Format Status
if(isset($item->post_format) && $item->post_format == 'status') {
if(isset($attribs->post_status) && $attribs->post_status != NULL) {
$item->post_status = $attribs->post_status;
} else {
$item->post_status = '';
}
}
// Post Format Link
if(isset($item->post_format) && $item->post_format == 'link') {
if(isset($attribs->link_title) && $attribs->link_title != NULL) {
$item->link_title = $attribs->link_title;
} else {
$item->link_title = '';
}
if(isset($attribs->link_url) && $attribs->link_url != NULL) {
$item->link_url = $attribs->link_url;
} else {
$item->link_url = '';
}
}
// Post Format Gallery
if(isset($item->post_format) && $item->post_format == 'gallery') {
$gallery_imgs = '';
if (isset($attribs->helix_ultimate_gallery) && $attribs->helix_ultimate_gallery) {
$gallery_imgs = $attribs->helix_ultimate_gallery;
} elseif (isset($attribs->gallery) && $attribs->gallery) {
$gallery_imgs = $attribs->gallery;
}
$item->imagegallery = new stdClass();
$gallery_imgs;
if(isset($gallery_imgs) && $gallery_imgs != NULL) {
$gallery_img_decode = json_decode($gallery_imgs);
$gallery_all_images = '';
if (isset($gallery_img_decode->helix_ultimate_gallery_images) && $gallery_img_decode->helix_ultimate_gallery_images) {
$gallery_all_images = $gallery_img_decode->helix_ultimate_gallery_images;
} elseif (isset($gallery_img_decode->gallery_images) && $gallery_img_decode->gallery_images) {
$gallery_all_images = $gallery_img_decode->gallery_images;
}
$gallery_images = array();
if(isset($gallery_all_images) && is_array($gallery_all_images)){
foreach ($gallery_all_images as $key=>$value) {
$gallery_images[$key]['full'] = $value;
$gallery_img_baseurl = basename($value);
//Small
$small = JPATH_ROOT . '/' . dirname($value) . '/' . JFile::stripExt($gallery_img_baseurl) . '_small.' . JFile::getExt($gallery_img_baseurl);
if(file_exists($small)) {
$gallery_images[$key]['small'] = JURI::root(true) . '/' . dirname($value) . '/' . JFile::stripExt($gallery_img_baseurl) . '_small.' . JFile::getExt($gallery_img_baseurl);
}
//Thumbnail
$thumbnail = JPATH_ROOT . '/' . dirname($value) . '/' . JFile::stripExt($gallery_img_baseurl) . '_thumbnail.' . JFile::getExt($gallery_img_baseurl);
if(file_exists($thumbnail)) {
$gallery_images[$key]['thumbnail'] = JURI::root(true) . '/' . dirname($value) . '/' . JFile::stripExt($gallery_img_baseurl) . '_thumbnail.' . JFile::getExt($gallery_img_baseurl);
}
//Medium
$medium = JPATH_ROOT . '/' . dirname($value) . '/' . JFile::stripExt($gallery_img_baseurl) . '_medium.' . JFile::getExt($gallery_img_baseurl);
if(file_exists($medium)) {
$gallery_images[$key]['medium'] = JURI::root(true) . '/' . dirname($value) . '/' . JFile::stripExt($gallery_img_baseurl) . '_medium.' . JFile::getExt($gallery_img_baseurl);
}
//Large
$large = JPATH_ROOT . '/' . dirname($value) . '/' . JFile::stripExt($gallery_img_baseurl) . '_large.' . JFile::getExt($gallery_img_baseurl);
if(file_exists($large)) {
$gallery_images[$key]['large'] = JURI::root(true) . '/' . dirname($value) . '/' . JFile::stripExt($gallery_img_baseurl) . '_large.' . JFile::getExt($gallery_img_baseurl);
}
}
}
$item->imagegallery->images = $gallery_images;
} else {
$item->imagegallery->images = array();
}
}
}
return $items;
}
public static function getCategories($parent_id = 1, $include_subcategories = true, $child = false, $cats = array()) {
$app = JFactory::getApplication();
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('*')
->from($db->quoteName('#__categories'))
->where($db->quoteName('extension') . ' = ' . $db->quote('com_content'))
->where($db->quoteName('published') . ' = ' . $db->quote(1))
->where($db->quoteName('access')." IN (" . implode( ',', JFactory::getUser()->getAuthorisedViewLevels() ) . ")")
->where($db->quoteName('language')." IN (" . $db->Quote(JFactory::getLanguage()->getTag()).", ".$db->Quote('*') . ")")
->where($db->quoteName('parent_id')." IN (" . implode( ',', $parent_id ) . ")")
->order($db->quoteName('lft') . ' ASC');
$db->setQuery($query);
$rows = $db->loadObjectList();
foreach ($rows as $row) {
if($include_subcategories) {
array_push($cats, $row->id);
if (self::hasChildren($row->id)) {
$cats = self::getCategories(array($row->id), $include_subcategories, true, $cats);
}
}
}
return $cats;
}
private static function hasChildren($parent_id = 1) {
$app = JFactory::getApplication();
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('*')
->from($db->quoteName('#__categories'))
->where($db->quoteName('extension') . ' = ' . $db->quote('com_content'))
->where($db->quoteName('published') . ' = ' . $db->quote(1))
->where($db->quoteName('access')." IN (" . implode( ',', JFactory::getUser()->getAuthorisedViewLevels() ) . ")")
->where($db->quoteName('language')." IN (" . $db->Quote(JFactory::getLanguage()->getTag()).", ".$db->Quote('*') . ")")
->where($db->quoteName('parent_id') . ' = ' . $db->quote($parent_id))
->order($db->quoteName('created_time') . ' DESC');
$db->setQuery($query);
$childrens = $db->loadObjectList();
if(is_array($childrens) && count($childrens)) {
return true;
}
return false;
}
}