AnonSec Shell
Server IP : 54.36.91.62  /  Your IP : 216.73.217.112
Web Server : Apache
System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User : coopiak ( 151928)
PHP Version : 8.3.23
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/coopiak/amisdesseniors-fr/administrator/components/com_djcatalog2/models/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/coopiak/amisdesseniors-fr/administrator/components/com_djcatalog2/models//category.php
<?php
/**
 * @package DJ-Catalog2
 * @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
 * @license http://www.gnu.org/licenses GNU/GPL
 * @author url: http://dj-extensions.com
 * @author email contact@dj-extensions.com
 */

// No direct access.
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\Table\Table;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Application\ApplicationHelper;
use Joomla\CMS\Language\LanguageHelper;
use Joomla\CMS\Language\Text;
//jimport('joomla.application.component.modeladmin');
require_once(JPATH_ROOT.'/administrator/components/com_djcatalog2/lib/modeladmin.php');

class Djcatalog2ModelCategory extends DJCAdminModel
{
    protected $text_prefix = 'COM_DJCATALOG2';
    protected $associationsContext = 'com_djcatalog2.category';

    public function __construct($config = array()) {
        //$config['event_after_save'] = 'onCategoryAfterSave';
        //$config['event_after_delete'] = 'onCategoryAfterDelete';
        parent::__construct($config);
    }

    public function getItem($pk = null) {
        if ($item = parent::getItem($pk)) {
            /*
             * Multilang
             */
            if (Associations::isEnabled())
            {
                $item->associations = array();

                if ($item->id != null)
                {
                    $associations = Associations::getAssociations('com_djcatalog2', '#__djc2_categories', 'com_djcatalog2.category', (int) $item->id, 'id', '', '');

                    foreach ($associations as $tag => $association)
                    {
                        $item->associations[$tag] = $association->id;
                    }
                }
            }



            return $item;
        } else {
            return false;
        }
    }

    public function getTable($type = 'Categories', $prefix = 'Djcatalog2Table', $config = array())
    {
        return Table::getInstance($type, $prefix, $config);
    }
    public function getForm($data = array(), $loadData = true)
    {
        // Initialise variables.
        $app	= Factory::getApplication();

        // Get the form.
        $form = $this->loadForm('com_djcatalog2.category', 'category', array('control' => 'jform', 'load_data' => $loadData));
        if (empty($form)) {
            return false;
        }

        return $form;
    }

    protected function loadFormData()
    {
        $data = Factory::getApplication()->getUserState('com_djcatalog2.edit.category.data', array());

        if (empty($data)) {
            $data = $this->getItem();
        }

        return $data;
    }

    protected function _prepareTable(&$table)
    {
        jimport('joomla.filter.output');
        $date = Factory::getDate();
        $user = Factory::getUser();

        $table->name		= htmlspecialchars_decode($table->name, ENT_QUOTES);
        $table->alias		= ApplicationHelper::stringURLSafe($table->alias);

        if (empty($table->alias)) {
            $table->alias = ApplicationHelper::stringURLSafe($table->name);
        }

        if (empty($table->id)) {
            if (empty($table->ordering)) {
                $db = Factory::getDbo();
                $db->setQuery('SELECT MAX(ordering) FROM #__djc2_categories WHERE parent_id = '.$table->parent_id);
                $max = $db->loadResult();

                $table->ordering = $max+1;
            }
        }
    }

    protected function getReorderConditions($table)
    {
        $condition = array();
        $condition[] = 'parent_id = '.(int) $table->parent_id;

        $where = implode(' AND ', $condition);
        return $where;
        //return $condition;
    }

    public function delete(&$cid = array())
    {
        if (count( $cid ))
        {
            $categories = Djc2Categories::getInstance();
            $categoryList = $cid;
            foreach($cid as $catid){
                $sublist = array($catid);
                if ($parent = $categories->get($catid) ) {
                    $parent->makeChildrenList($sublist);
                }
                $categoryList = array_merge($categoryList, $sublist);
            }
            $categoryList = array_unique($categoryList);
            $cids = implode(',', $categoryList);

            $this->_db->setQuery("SELECT COUNT(*) FROM #__djc2_items WHERE cat_id IN ( ".$cids." )");
            if ($this->_db->loadResult() > 0) {
                $this->setError(Text::_('COM_DJCATALOG2_DELETE_CATEGORIES_HAVE_ITEMS'));
                return false;
            }

            $cid = $categoryList;
            if (parent::delete($cid)){
                // since products may still be assigned to additional categories, we need to break those relations
                $this->_db->setQuery('delete from #__djc2_items_categories where category_id in ('.implode(',', $cid).')');
                if (!$this->_db->execute()) {
                    $this->setError($this->_db->getErrorMsg());
                    return false;
                }
                return true;
            }
        }
        return false;
    }


    public function save($data) {
        if(isset($data['sections'])) {
            if (!empty($data['sections'])) {
                if (is_array($data['sections'])) {
                    $data['sections'] = json_encode($data['sections']);
                }
            } else {
                $data['sections'] = null;
            }
        }

        if(isset($data['sections']) && !empty($data['sections']) && $data['sections'] != '[]'  && is_array($data['sections'])) {
            $data['sections'] = json_encode($data['sections']);
        }

        return parent::save($data);
    }

    /**
     * Method to test whether a record can be deleted.
     *
     * @param   object  $record  A record object.
     *
     * @return  boolean  True if allowed to delete the record. Defaults to the permission for the component.
     *
     * @since   1.6
     */
    protected function canDelete($record)
    {
        return Factory::getUser()->authorise('core.delete', $this->option) || Factory::getUser()->authorise('djcatalog2.admin.catalogue', $this->option);
    }

    /**
     * Method to test whether a record can have its state changed.
     *
     * @param   object  $record  A record object.
     *
     * @return  boolean  True if allowed to change the state of the record. Defaults to the permission for the component.
     *
     * @since   1.6
     */
    protected function canEditState($record)
    {
        return Factory::getUser()->authorise('core.edit.state', $this->option)  || Factory::getUser()->authorise('djcatalog2.admin.catalogue', $this->option);
    }

    /**
     * Method to preprocess the form to add the association fields dynamically
     *
     * @return     none
     */
    protected function preprocessForm(Joomla\CMS\Form\Form $form, $data, $group = 'content')
    {
        // Association content items
        if (Associations::isEnabled())
        {
            $languages = LanguageHelper::getContentLanguages(false, true, null, 'ordering', 'asc');

            if (count($languages) > 1)
            {
                $addform = new SimpleXMLElement('<form />');
                $fields = $addform->addChild('fields');
                $fields->addAttribute('name', 'associations');
                $fieldset = $fields->addChild('fieldset');
                $fieldset->addAttribute('name', 'item_associations');

                foreach ($languages as $language)
                {
                    $field = $fieldset->addChild('field');
                    $field->addAttribute('name', $language->lang_code);
                    $field->addAttribute('type', 'djcategorymodal');
                    $field->addAttribute('language', $language->lang_code);
                    $field->addAttribute('label', $language->title);
                    $field->addAttribute('translate_label', 'false');
                }

                $form->load($addform, false);
            }
        }

        parent::preprocessForm($form, $data, $group);
    }


    public function batch($pk, $batchData, $cursor)
    {

        $language = ((isset($batchData['language_id'])) ? $batchData['language_id'] : null);
        $language_copy = ((isset($batchData['language_copy'])) ? $batchData['language_copy'] : 'n');
        $move_copy = ((isset($batchData['move_copy'])) ? $batchData['move_copy'] : 'copy');

        $multilangEnabled = Associations::isEnabled();

        $success = false;
        $message = 'invalid language';
        $error = '';

        $db = Factory::getDbo();

        $table = $this->getTable();
        if ($language && $language_copy) {


            $item = $this->getItem($pk);


            // Get item images
            $query = $db->getQuery(true);
            $query
                ->select('id')
                ->from($db->quoteName('#__djc2_images', 'i'))
                ->where('i.type = ' . $db->quote('category'))
                ->where('i.item_id = ' . (int)$pk);

            $db->setQuery($query);
            $images = $db->loadColumn();

            $baseLang = $item->language;
            $baseName = $item->name;

            if ($baseLang == $language) {
                $error = Text::sprintf('COM_DJCATALOG2_MOVE_DUPLICATE_LANG', $pk);
            }


            $app = Factory::getApplication();
            $db = Factory::getDbo();

            if($move_copy == 'copy') {
                $item->id = 0;
                $app->input->set('id', 0);
                $this->setState('category.id', 0);
            }

            $db->setQuery('SELECT Count(*) FROM #__djc2_categories WHERE alias LIKE ' . $db->quote($db->escape('%' . $item->alias . '%')));
            $aliasesCount = $db->loadResult();

            $item->alias = $item->name . '-' . $aliasesCount;

            // Multilang
            if (isset($item->parent_id) && $item->parent_id && $multilangEnabled && $language_copy !== 'n') {
                $associations = Associations::getAssociations('com_djcatalog2', '#__djc2_categories', 'com_djcatalog2.category', (int)$item->parent_id, 'id', '', '');


                if (isset($associations[$language]->id)) {
                    $item->parent_id = $associations[$language]->id;
                }
            }else {
                $item->parent_id = 0;
            }


            // Default values
            $item->published = 0;
            $item->language = $language;

            if($language_copy == 'n') {
                $item->associations = array();
            } else {
                $item->associations[$baseLang] = $pk;
            }





            $app->input->set('image_file_id', $images);
            $currentTask = $app->input->get('task');
            $app->input->set('task', 'save2copy');

            $success =$this->save( Joomla\Utilities\ArrayHelper::fromObject($item));

            $message = '[' . $baseLang . '] ' . $baseName . ' (' . $move_copy . ') => ' . '[' . $language . ']' . $table->name . (($language_copy == 'y') ? ' (' . Text::_('COM_DJCATALOG2_BATCH_LANGUAGE_COPY_ASSIGNMENTS') . ')' : '');
        }

        if ($success) {
            $app = Factory::getApplication();
            $cid = $app->getUserState('com_djcatalog2.list.categories');

            unset($cid[$cursor]);
            $cid = array_values($cid);
            $app->setUserState('com_djcatalog2.list.categories', $cid);

        }

        return array(
            'success' => $success,
            'message' => $message,
            'error' => $error
        );

    }

    protected function batchCopy($value, $pks, $contexts)
    {
        // Initialize re-usable member properties, and re-usable local variables
        $this->initBatch();


        $language_id = $value;
        // Initialize re-usable member properties, and re-usable local variables

        $newIds = array();
        $db = $this->getDbo();


        // Parent exists so let's proceed
        while (!empty($pks)) {
            // Pop the first ID off the stack
            $pk = array_shift($pks);

            $query = $db->getQuery(true);
            $query
                ->select('id')
                ->from($db->quoteName('#__djc2_images', 'i'))
                ->where('i.type = ' . $db->quote('category'))
                ->where('i.item_id = ' . (int)$pk);

            $db->setQuery($query);
            $images = $db->loadColumn();

            $this->table->load($pk);
            $oldlang = ((isset($this->table->language)) ? $this->table->language : null);

            if ($oldlang == $language_id) {
                // Not fatal error
                $this->setError(\Text::sprintf('COM_DJCATALOG2_MOVE_DUPLICATE_LANG', $pk));
                continue;
            }


            // Reset the ID because we are making a copy
            $this->table->id = 0;

            $app = Factory::getApplication();
            $db = Factory::getDbo();
            $db->setQuery('SELECT Count(*) FROM #__djc2_categories WHERE alias LIKE ' . $db->quote($db->escape('%' . $this->table->alias . '%')));
            $aliasesCount = $db->loadResult();

            $this->table->alias .= (($aliasesCount) ? '-' . $aliasesCount : '');

            if (isset($this->table->parent_id) && $this->table->parent_id) {
                $associations = Associations::getAssociations('com_djcatalog2', '#__djc2_categories', 'com_djcatalog2.category', (int)$this->table->parent_id, 'id', '', '');


                if (isset($associations[$language_id]->id)) {
                    $this->table->parent_id = $associations[$language_id]->id;
                }
            }


            // Unpublish because we are making a copy
            if (isset($this->table->published)) {
                $this->table->published = 0;
            }

            // New category ID
            $this->table->language = $language_id;

            if (!$this->table->check()) {
                $this->setError($this->table->getError());

                return false;
            }

            // Store the row.
            if (!$this->table->store()) {
                $this->setError($this->table->getError());

                return false;
            }

            // Get the new item ID
            $newId = $this->table->get('id');


            $dispatcher = Joomla\CMS\Factory::getApplication()->getDispatcher();
            new Djcatalog2Event($dispatcher);

            $app->input->set('image_file_id', $images);
            $currentTask = $app->input->get('task');
            $app->input->set('task', 'import');

            Joomla\CMS\Factory::getApplication()->triggerEvent('onContentAfterSave', array('com_djcatalog2.category', &$this->table, 1));

            $this->cleanupPostBatchCopy($this->table, $newId, $pk);

            if ($language_id !== '*') {
                $data = array(
                    'id' => $newId,
                    'alias' => $this->table->alias,
                    'associations' => array(
                        $oldlang => $pk
                    )
                );


                $this->save($data);
            }

            // Add the new ID to the array
            $newIds[$pk] = $newId;
        }

        $app->input->set('task', $currentTask);
        // Clean the cache
        $this->cleanCache();
        return $newIds;
    }
}

Anon7 - 2022
AnonSec Team