joomla-platform / libraries / joomla / database / table / category.php

<?php
/**
 * @package     Joomla.Platform
 * @subpackage  Database
 *
 * @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE
 */

defined('JPATH_PLATFORM') or die;

jimport('joomla.database.tablenested');

/**
 * Category table
 *
 * @package     Joomla.Platform
 * @subpackage  Table
 * @since       11.1
 */
class JTableCategory extends JTableNested
{
    /**
     * @param database A database connector object
     */
    public function __construct(&$db)
    {
        parent::__construct('#__categories', 'id', $db);

        $this->access   = (int) JFactory::getConfig()->get('access');
    }

    /**
     * Method to compute the default name of the asset.
     * The default name is in the form `table_name.id`
     * where id is the value of the primary key of the table.
     *
     * @return  string
     */
    protected function _getAssetName()
    {
        $k = $this->_tbl_key;
        return $this->extension.'.category.'.(int) $this->$k;
    }

    /**
     * Method to return the title to use for the asset table.
     *
     * @return  string
     * @since   11.1
     */
    protected function _getAssetTitle()
    {
        return $this->title;
    }

    /**
     * Get the parent asset id for the record
     *
     * @return  int
     */
    protected function _getAssetParentId($table = null, $id = null)
    {
        // Initialise variables.
        $assetId = null;
        $db     = $this->getDbo();

        // This is a category under a category.
        if ($this->parent_id > 1) {
            // Build the query to get the asset id for the parent category.
            $query  = $db->getQuery(true);
            $query->select('asset_id');
            $query->from('#__categories');
            $query->where('id = '.(int) $this->parent_id);

            // Get the asset id from the database.
            $db->setQuery($query);
            if ($result = $db->loadResult()) {
                $assetId = (int) $result;
            }
        }
        // This is a category that needs to parent with the extension.
        elseif ($assetId === null) {
            // Build the query to get the asset id for the parent category.
            $query  = $db->getQuery(true);
            $query->select('id');
            $query->from('#__assets');
            $query->where('name = '.$db->quote($this->extension));

            // Get the asset id from the database.
            $db->setQuery($query);
            if ($result = $db->loadResult()) {
                $assetId = (int) $result;
            }
        }

        // Return the asset id.
        if ($assetId) {
            return $assetId;
        } else {
            return parent::_getAssetParentId($table, $id);
        }
    }

    /**
     * Override check function
     *
     * @return  boolean
     * @see     JTable::check
     * @since   11.1
     */
    public function check()
    {
        // Check for a title.
        if (trim($this->title) == '') {
            $this->setError(JText::_('JLIB_DATABASE_ERROR_MUSTCONTAIN_A_TITLE_CATEGORY'));
            return false;
        }
        $this->alias = trim($this->alias);
        if (empty($this->alias)) {
            $this->alias = strtolower($this->title);
        }

        $this->alias = JApplication::stringURLSafe($this->alias);
        if (trim(str_replace('-','',$this->alias)) == '') {
            $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s');
        }

        return true;
    }
    /**
     * Overloaded bind function.
     *
     * @param   array       named array
     * @return  null|string null is operation was satisfactory, otherwise returns an error
     * @see     JTable:bind
     * @since   11.1
     */
    public function bind($array, $ignore = '')
    {
        if (isset($array['params']) && is_array($array['params'])) {
            $registry = new JRegistry();
            $registry->loadArray($array['params']);
            $array['params'] = (string)$registry;
        }

        if (isset($array['metadata']) && is_array($array['metadata'])) {
            $registry = new JRegistry();
            $registry->loadArray($array['metadata']);
            $array['metadata'] = (string)$registry;
        }

        // Bind the rules.
        if (isset($array['rules']) && is_array($array['rules'])) {
            $rules = new JRules($array['rules']);
            $this->setRules($rules);
        }

        return parent::bind($array, $ignore);
    }

    /**
     * Overriden JTable::store to set created/modified and user id.
     *
     * @param   boolean True to update fields even if they are null.
     *
     * @return  boolean True on success.
     * @since   11.1
     */
    public function store($updateNulls = false)
    {
        $date   = JFactory::getDate();
        $user   = JFactory::getUser();
        $db     = $this->getDbo();
        if ($this->id) {
            // Existing category
            $this->modified_time    = $db->toSQLDate($date);
            $this->modified_user_id = $user->get('id');
        } else {
            // New category
            $this->created_time     = $db->toSQLDate($date);
            $this->created_user_id  = $user->get('id');
        }
    // Verify that the alias is unique
        $table = JTable::getInstance('Category','JTable');
        if ($table->load(array('alias'=>$this->alias,'parent_id'=>$this->parent_id,'extension'=>$this->extension)) && ($table->id != $this->id || $this->id==0)) {

            $this->setError(JText::_('JLIB_DATABASE_ERROR_CATEGORY_UNIQUE_ALIAS'));
            return false;
        }
        return parent::store($updateNulls);
    }
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.