| Current Path : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/ |
| Current File : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/TArticle.php |
<?php
/*
* @package Tech Fry Library
* @license https://www.gnu.org/licenses/gpl-3.0.en.html
*/
namespace TechFry\Library;
use Joomla\CMS\Factory;
use Joomla\CMS\Table\Content;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\Component\Content\Site\Helper\RouteHelper;
use Joomla\CMS\Router\Route;
// Script for Working with Joomla Articles
class TArticle
{
/*
find_article, create_article, update_article, filter_articles, get_tags, get_article, get_articles
get_articles_by_category, get_articles_by_tag, get_last_id, get_fields, render_fields, get_article_link
*/
public $article_id;
// 01. Returns article id from alias
public function find_article($alias, $catid = null)
{
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName('id'))
->from($db->quoteName('#__content'))
->where($db->quoteName('alias') . ' = '. $db->quote($alias));
if ($catid != null)
{
$query->andWhere($db->quoteName('catid') . ' = '. $db->quote($catid));
}
$db->setQuery($query);
$article_id = $db->loadResult();
return $article_id ? $article_id : false;
}
// 02. Create new joomla article from $data array
public function create_article($data)
{
// $data array - title, catid required
$app = Factory::getApplication();
$mvcFactory = $app->bootComponent('com_content')->getMVCFactory();
$articleModel = $mvcFactory->createModel('Article', 'Administrator', array('ignore_request' => true));
$data['introtext'] = $data['introtext'] ?? '';
if (!isset($data['language']))
{
$data['language'] = '*';
}
$data['id'] = 0;
$data['created'] = Factory::getDate()->toSql();
$data['modified'] = Factory::getDate()->toSql();
if (!$articleModel->save($data))
{
$app->enqueueMessage($articleModel->getError(), 'error');
return false;
}
$article_id = $this->get_last_id();
return $article_id;
}
// 03. Update existing joomla article
public function update_article($data)
{
$app = Factory::getApplication();
if (!$data['id'])
{
$app->enqueueMessage('Article ID is not set.', 'error');
return false;
}
$mvcFactory = $app->bootComponent('com_content')->getMVCFactory();
$articleModel = $mvcFactory->createModel('Article', 'Administrator', array('ignore_request' => true));
if (!isset($data['tags']))
{
$th = new TagsHelper();
$currentTags = $th->getTagIds($data['id'], 'com_content.article');
$data['tags'] = explode(',', $currentTags);
}
$data['modified'] = Factory::getDate()->toSql();
if (!$articleModel->save($data))
{
$app->enqueueMessage($articleModel->getError(), 'error');
return false;
}
return true;
}
// 04. Filter articles
public function filter_articles($filters, $articlefilters)
{
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query
->select($db->quoteName(array('a.id')))
->from($db->quoteName('#__content', 'a'))
->where($db->quoteName('a.id') . ' > ' . $db->quote(0))
->order('a.id ASC');
// Joomla Content Table
if (is_string($filters))
{
$filters = json_decode($filters);
}
$filters_arr = (array) $filters;
if (!empty($filters_arr))
{
foreach ($filters_arr as $filter_obj)
{
$filter = (array) $filter_obj;
// Case 1: Filter value is given
if (($filter['where_field'] != '') && ($filter['where_value'] != ''))
{
if ($filter['field_type'] == 'date')
{
$date = Factory::getDate('now -' . $filter['where_value'] . ' day');
$filter['where_value'] = $date->toSQL();
}
$query->andWhere($db->quoteName('a.' . $filter['where_field']) . ' ' . $filter['where_operator'] . ' ' . $db->quote($filter['where_value']));
}
// Case 2: Filter value is not given (Example: IS NULL)
elseif (!empty($filter['where_field']) && empty($filter['where_value']))
{
$query->andWhere($db->quoteName('a.' . $filter['where_field']) . ' ' . $filter['where_operator']);
}
}
}
// Content Custom Fields
if (is_array(json_decode($articlefilters, true)) && (json_last_error() == JSON_ERROR_NONE))
{
$articlefilters = json_decode($articlefilters);
}
$articlefilters_arr = (array) $articlefilters;
if (!empty($articlefilters_arr))
{
foreach ($articlefilters_arr as $filter_obj)
{
$filter = (array) $filter_obj;
if (is_numeric($filter['where_field']))
{
$query->join('INNER', $db->quoteName('#__fields_values', 'c') . ' ON (' . $db->quoteName('a.id') . ' = ' . $db->quoteName('c.item_id') . ')')
->andWhere($db->quoteName('c.field_id') . ' = ' . $db->quote($filter['where_field']))
->andWhere($db->quoteName('c.value') . ' ' . $filter['where_operator'] . ' ' . $db->quote($filter['where_value']));
}
}
}
$db->setQuery($query);
$articles = $db->loadColumn();
return $articles;
}
// 05. Returns array of tag names associated with article
public function get_tags($article_id)
{
$th = new TagsHelper();
$currentTags = $th->getTagIds($article_id, 'com_content.article');
$currentTagnames = $th->getTagNames(explode(',', $currentTags));
return $currentTagnames;
}
// 06. Get article by ID
public function get_article($article_id)
{
// Joomla Article + image, image_intro, image_fulltext, url
$ex = new TExtension('com_content');
$articleModel = $ex->get_model('Article');
$article = $articleModel->getItem($article_id);
$article->image = $article->images['image_intro'];
$article->image_intro = $article->images['image_intro'];
$article->image_fulltext = $article->images['image_fulltext'];
$slug = $article->id . ':' . $article->alias;
$article->url = Route::link('site', RouteHelper::getArticleRoute($slug, $article->catid, $article->language));
return $article;
}
// 07. Get Joomla Articles
public function get_articles($config = array())
{
$conditions = array();
// Published
$published = $config['published'] ?? $config['state'] ?? 1;
$conditions[] = array('state', '=', $published);
// Categories
$categories = $config['category'] ?? $config['catid'] ?? 0;
if ($categories)
{
$categories = (array) $categories;
$conditions[] = array('catid', 'IN', implode(',', $categories));
}
if (\is_array($config['filter']))
{
$conditions = array_merge($conditions, $config['filter']);
}
$limit = isset($config['limit']) && $config['limit'] ? $config['limit'] : '';
$order_col = isset($config['order']) && $config['order']? $config['order'] : 'id';
$order_dirn = $config['order_dirn'] ?? 'DESC';
$order = $order_col . ' ' . $order_dirn;
$db = new TDb('content');
$articles = $db->get_items(array('conditions' => $conditions, 'order' => $order, 'limit' => $limit));
foreach ($articles as $article)
{
$images = json_decode($article->images, true);
if (isset($images['image_intro']))
{
$article->image = $images['image_intro'];
$article->image_intro = $images['image_intro'];
}
if (isset($images['image_fulltext']))
{
$article->image_fulltext = $images['image_fulltext'];
}
$slug = $article->id . ':' . $article->alias;
$article->url = Route::link('site', RouteHelper::getArticleRoute($slug, $article->catid, $article->language));
}
return $articles;
}
// 08. Get articles by category
public function get_articles_by_category($category_id, $order = 'id DESC', $limit = 12)
{
$today = Factory::getDate();
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('id', 'title', 'alias', 'introtext', 'fulltext', 'state', 'access', 'images', 'catid', 'language', 'publish_up')))
->from($db->quoteName('#__content'))
->where($db->quoteName('catid') . ' = ' . $category_id)
->andWhere($db->quoteName('state') . ' = '. $db->quote('1'))
->andWhere($db->quoteName('publish_up') . ' < ' . $db->quote($today))
->order($order)
->setLimit($limit);
$db->setQuery($query);
$articles = $db->loadObjectList();
return $articles;
}
// 09. Get articles by tag
public function get_articles_by_tag($tag_id, $order = 'id DESC', $limit = 12)
{
$typesr = null;
$includeChildren = false;
$orderByOption = 'c.core_title';
$orderDir = 'ASC';
$anyOrAll = true;
$languageFilter = 'all';
$stateFilter = '0,1';
$th = new TagsHelper();
$query = $th->getTagItemsQuery($tag_id, $typesr, $includeChildren, $orderByOption, $orderDir, $anyOrAll, $languageFilter, $stateFilter);
$db = Factory::getDbo();
$db->setQuery($query);
$articles = $db->loadObjectList();
return $articles;
}
// 10. Get ID of last article
public function get_last_id()
{
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select('id')
->from($db->quoteName('#__content'))
->order('id DESC')
->setLimit('1');
$db->setQuery($query);
$result = $db->loadResult();
return $result;
}
// 11. Get fields
public function get_fields($article_id = null)
{
if ($article_id == null)
{
$fields = FieldsHelper::getFields('com_content.article');
}
else
{
$item = $this->get_article($article_id);
$fields = FieldsHelper::getFields('com_content.article', $item);
}
return $fields;
}
// 12. Render fields
public function render_fields($article_id)
{
$output = '';
$item = $this->get_article($article_id);
$fields = FieldsHelper::getFields('com_content.article', $item);
foreach ($fields as $field)
{
$output .= FieldsHelper::render('com_content.article', 'field.render', array('field' => $field));
}
return $output;
}
// 13.
public function get_article_link($article_id)
{
$article = $this->get_article($article_id);
$slug = $article->id . ':' . $article->alias;
$link = Route::link('site', RouteHelper::getArticleRoute($slug, $article->catid, $article->language));
return $link;
}
}