Your IP : 216.73.216.240


Current Path : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/
Upload File :
Current File : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/TCategory.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\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;
    }
}