/administrator/components/com_users/models/levels.php
https://bitbucket.org/eternaware/joomus · PHP · 214 lines · 107 code · 30 blank · 77 comment · 10 complexity · 84f5448e7d2d7662d480f3aa2e9be693 MD5 · raw file
- <?php
- /**
- * @package Joomla.Administrator
- * @subpackage com_users
- *
- * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
- * @license GNU General Public License version 2 or later; see LICENSE.txt
- */
- defined('_JEXEC') or die;
- /**
- * Methods supporting a list of user access level records.
- *
- * @package Joomla.Administrator
- * @subpackage com_users
- * @since 1.6
- */
- class UsersModelLevels extends JModelList
- {
- /**
- * Constructor.
- *
- * @param array An optional associative array of configuration settings.
- * @see JController
- * @since 1.6
- */
- public function __construct($config = array())
- {
- if (empty($config['filter_fields'])) {
- $config['filter_fields'] = array(
- 'id', 'a.id',
- 'title', 'a.title',
- 'ordering', 'a.ordering',
- );
- }
- parent::__construct($config);
- }
- /**
- * Method to auto-populate the model state.
- *
- * Note. Calling getState in this method will result in recursion.
- *
- * @since 1.6
- */
- protected function populateState($ordering = null, $direction = null)
- {
- $app = JFactory::getApplication('administrator');
- // Load the filter state.
- $search = $this->getUserStateFromRequest($this->context.'.filter.search', 'filter_search');
- $this->setState('filter.search', $search);
- // Load the parameters.
- $params = JComponentHelper::getParams('com_users');
- $this->setState('params', $params);
- // List state information.
- parent::populateState('a.title', 'asc');
- }
- /**
- * Method to get a store id based on model configuration state.
- *
- * This is necessary because the model is used by the component and
- * different modules that might need different sets of data or different
- * ordering requirements.
- *
- * @param string $id A prefix for the store id.
- *
- * @return string A store id.
- */
- protected function getStoreId($id = '')
- {
- // Compile the store id.
- $id .= ':'.$this->getState('filter.search');
- return parent::getStoreId($id);
- }
- /**
- * Build an SQL query to load the list data.
- *
- * @return JDatabaseQuery
- */
- protected function getListQuery()
- {
- // Create a new query object.
- $db = $this->getDbo();
- $query = $db->getQuery(true);
- // Select the required fields from the table.
- $query->select(
- $this->getState(
- 'list.select',
- 'a.*'
- )
- );
- $query->from($db->quoteName('#__viewlevels').' AS a');
- // Add the level in the tree.
- $query->group('a.id, a.title, a.ordering, a.rules');
- // Filter the items over the search string if set.
- $search = $this->getState('filter.search');
- if (!empty($search)) {
- if (stripos($search, 'id:') === 0) {
- $query->where('a.id = '.(int) substr($search, 3));
- } else {
- $search = $db->Quote('%'.$db->escape($search, true).'%');
- $query->where('a.title LIKE '.$search);
- }
- }
- $query->group('a.id');
- // Add the list ordering clause.
- $query->order($db->escape($this->getState('list.ordering', 'a.lft')).' '.$db->escape($this->getState('list.direction', 'ASC')));
- //echo nl2br(str_replace('#__','jos_',$query));
- return $query;
- }
- /**
- * Method to adjust the ordering of a row.
- *
- * @param int The ID of the primary key to move.
- * @param integer Increment, usually +1 or -1
- * @return boolean False on failure or error, true otherwise.
- */
- public function reorder($pk, $direction = 0)
- {
- // Sanitize the id and adjustment.
- $pk = (!empty($pk)) ? $pk : (int) $this->getState('level.id');
- $user = JFactory::getUser();
- // Get an instance of the record's table.
- $table = JTable::getInstance('viewlevel');
- // Load the row.
- if (!$table->load($pk)) {
- $this->setError($table->getError());
- return false;
- }
- // Access checks.
- $allow = $user->authorise('core.edit.state', 'com_users');
- if (!$allow)
- {
- $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'));
- return false;
- }
- // Move the row.
- // TODO: Where clause to restrict category.
- $table->move($pk);
- return true;
- }
- /**
- * Saves the manually set order of records.
- *
- * @param array An array of primary key ids.
- * @param int +/-1
- */
- public function saveorder($pks, $order)
- {
- $table = JTable::getInstance('viewlevel');
- $user = JFactory::getUser();
- $conditions = array();
- if (empty($pks)) {
- return JError::raiseWarning(500, JText::_('COM_USERS_ERROR_LEVELS_NOLEVELS_SELECTED'));
- }
- // update ordering values
- foreach ($pks as $i => $pk)
- {
- $table->load((int) $pk);
- // Access checks.
- $allow = $user->authorise('core.edit.state', 'com_users');
- if (!$allow)
- {
- // Prune items that you can't change.
- unset($pks[$i]);
- JError::raiseWarning(403, JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'));
- }
- elseif ($table->ordering != $order[$i])
- {
- $table->ordering = $order[$i];
- if (!$table->store())
- {
- $this->setError($table->getError());
- return false;
- }
- }
- }
- // Execute reorder for each category.
- foreach ($conditions as $cond)
- {
- $table->load($cond[0]);
- $table->reorder($cond[1]);
- }
- return true;
- }
- }