Your IP : 216.73.216.240
<?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\Categories\Categories;
use Joomla\CMS\Categories\CategoryNode;
use Joomla\Component\Content\Site\Helper\RouteHelper;
use Joomla\CMS\Router\Route;
// Script for Joomla Categories
class TCategory
{
// get_category, get_categories, find_category, update_category
public $category_id;
public $extension;
public $parent_id;
public function __construct($config = [])
{
$this->extension = $config['extension'] ?? 'com_content';
}
// 01. Category information
public function get_category($catid)
{
// Category + image, url
$db = new TDb('categories');
$category = $db->get_item(array('id' => $catid));
$params = json_decode($category->params, true);
$category->image = $params['image'];
$category->url = $this->get_category_link($category->id);
return $category;
}
// 02. Get Categories
public function get_categories($config = [])
{
// $config - published, parent_category, filter, limit, order_col, order_dirn
$conditions = [];
// Exclude ROOT
$conditions[] = array('parent_id', '!=', 0);
// Published
$published = $config['published'] ?? 1;
$conditions[] = array('published', '=', $published);
// Parent Category
if (isset($config['parent_category']) && $config['parent_category'])
{
$conditions[] = array('parent_id', '=', $config['parent_category']);
}
// Other Conditions
if (isset($config['filter']) && $config['filter'])
{
$filters = (array) $config['filter'];
foreach ($filters as $filter)
{
$conditions[] = array($filter->where_field, $filter->where_operator, $filter->where_value);
}
}
$limit = isset($config['limit']) && $config['limit'] ? $config['limit'] : '';
$order_col = isset($config['order_col']) && $config['order_col']? $config['order_col'] : 'id';
$order_dirn = $config['order_dirn'] ?? 'DESC';
$order = $order_col . ' ' . $order_dirn;
$db = new TDb('categories');
$categories = $db->get_items(array('conditions' => $conditions, 'order' => $order, 'limit' => $limit));
foreach ($categories as $category)
{
if ($category->params)
{
$params = json_decode($category->params, true);
if (isset($params['image']))
{
$category->image = $params['image'];
}
}
$category->url = $this->get_category_link($category->id);
}
return $categories;
}
// 03. Find category for alias and parent id
public function find_category($alias, $parent_id = null)
{
$conditions = array(
array('alias', '=', $alias),
array('extension', '=', $this->extension),
);
if ($parent_id)
{
$conditions[] = array('parent_id', '=', $parent_id);
}
$select = array('id');
$db = new TDb('categories');
$category = $db->get_item(array('conditions' => $conditions, 'select' => $select));
return $category->id ? $category->id : false;
}
// 04. Update existing Joomla category
public function update_category($data)
{
$app = Factory::getApplication();
if (!$data['id'])
{
$app->enqueueMessage('Category ID is not set.', 'error');
return false;
}
$mvcFactory = $app->bootComponent('com_categories')->getMVCFactory();
$categoryModel = $mvcFactory->createModel('Category', 'Administrator', array('ignore_request' => true));
if (!$categoryModel->save($data))
{
$app->enqueueMessage($categoryModel->getError(), 'error');
return false;
}
return true;
}
public function get_category_link($category_id)
{
$link = Route::link('site', RouteHelper::getCategoryRoute($category_id));
return $link;
}
}