You've already forked joomla_test
							
							first commit
This commit is contained in:
		
							
								
								
									
										311
									
								
								libraries/joomla/form/fields/rules.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										311
									
								
								libraries/joomla/form/fields/rules.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,311 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @package     Joomla.Platform | ||||
|  * @subpackage  Form | ||||
|  * | ||||
|  * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved. | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE | ||||
|  */ | ||||
|  | ||||
| defined('JPATH_PLATFORM') or die; | ||||
|  | ||||
| /** | ||||
|  * Form Field class for the Joomla Platform. | ||||
|  * Field for assigning permissions to groups for a given asset | ||||
|  * | ||||
|  * @package     Joomla.Platform | ||||
|  * @subpackage  Form | ||||
|  * @see         JAccess | ||||
|  * @since       11.1 | ||||
|  */ | ||||
| class JFormFieldRules extends JFormField | ||||
| { | ||||
| 	/** | ||||
| 	 * The form field type. | ||||
| 	 * | ||||
| 	 * @var    string | ||||
| 	 * @since  11.1 | ||||
| 	 */ | ||||
| 	public $type = 'Rules'; | ||||
|  | ||||
| 	/** | ||||
| 	 * Method to get the field input markup for Access Control Lists. | ||||
| 	 * Optionally can be associated with a specific component and section. | ||||
| 	 * | ||||
| 	 * TODO: Add access check. | ||||
| 	 * | ||||
| 	 * @return  string  The field input markup. | ||||
| 	 * | ||||
| 	 * @since   11.1 | ||||
| 	 */ | ||||
| 	protected function getInput() | ||||
| 	{ | ||||
| 		JHtml::_('bootstrap.tooltip'); | ||||
|  | ||||
| 		// Initialise some field attributes. | ||||
| 		$section = $this->element['section'] ? (string) $this->element['section'] : ''; | ||||
| 		$component = $this->element['component'] ? (string) $this->element['component'] : ''; | ||||
| 		$assetField = $this->element['asset_field'] ? (string) $this->element['asset_field'] : 'asset_id'; | ||||
|  | ||||
| 		// Get the actions for the asset. | ||||
| 		$actions = JAccess::getActions($component, $section); | ||||
|  | ||||
| 		// Iterate over the children and add to the actions. | ||||
| 		foreach ($this->element->children() as $el) | ||||
| 		{ | ||||
| 			if ($el->getName() == 'action') | ||||
| 			{ | ||||
| 				$actions[] = (object) array('name' => (string) $el['name'], 'title' => (string) $el['title'], | ||||
| 					'description' => (string) $el['description']); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// Get the explicit rules for this asset. | ||||
| 		if ($section == 'component') | ||||
| 		{ | ||||
| 			// Need to find the asset id by the name of the component. | ||||
| 			$db = JFactory::getDbo(); | ||||
| 			$query = $db->getQuery(true) | ||||
| 				->select($db->quoteName('id')) | ||||
| 				->from($db->quoteName('#__assets')) | ||||
| 				->where($db->quoteName('name') . ' = ' . $db->quote($component)); | ||||
| 			$db->setQuery($query); | ||||
| 			$assetId = (int) $db->loadResult(); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			// Find the asset id of the content. | ||||
| 			// Note that for global configuration, com_config injects asset_id = 1 into the form. | ||||
| 			$assetId = $this->form->getValue($assetField); | ||||
| 		} | ||||
|  | ||||
| 		// Use the compact form for the content rules (deprecated). | ||||
|  | ||||
| 		/* @todo remove code: | ||||
| 		if (!empty($component) && $section != 'component') { | ||||
| 			return JHtml::_('rules.assetFormWidget', $actions, $assetId, $assetId ? null : $component, $this->name, $this->id); | ||||
| 		} | ||||
| 		 */ | ||||
|  | ||||
| 		// Full width format. | ||||
|  | ||||
| 		// Get the rules for just this asset (non-recursive). | ||||
| 		$assetRules = JAccess::getAssetRules($assetId); | ||||
|  | ||||
| 		// Get the available user groups. | ||||
| 		$groups = $this->getUserGroups(); | ||||
|  | ||||
| 		// Prepare output | ||||
| 		$html = array(); | ||||
|  | ||||
| 		// Description | ||||
| 		$html[] = '<p class="rule-desc">' . JText::_('JLIB_RULES_SETTINGS_DESC') . '</p>'; | ||||
|  | ||||
| 		// Begin tabs | ||||
| 		$html[] = '<div id="permissions-sliders" class="tabbable tabs-left">'; | ||||
|  | ||||
| 		// Building tab nav | ||||
| 		$html[] = '<ul class="nav nav-tabs">'; | ||||
| 		foreach ($groups as $group) | ||||
| 		{ | ||||
| 			// Initial Active Tab | ||||
| 			$active = ""; | ||||
| 			if ($group->value == 1) | ||||
| 			{ | ||||
| 				$active = "active"; | ||||
| 			} | ||||
|  | ||||
| 			$html[] = '<li class="' . $active . '">'; | ||||
| 			$html[] = '<a href="#permission-' . $group->value . '" data-toggle="tab">'; | ||||
| 			$html[] = str_repeat('<span class="level">–</span> ', $curLevel = $group->level) . $group->text; | ||||
| 			$html[] = '</a>'; | ||||
| 			$html[] = '</li>'; | ||||
| 		} | ||||
| 		$html[] = '</ul>'; | ||||
|  | ||||
| 		$html[] = '<div class="tab-content">'; | ||||
|  | ||||
| 		// Start a row for each user group. | ||||
| 		foreach ($groups as $group) | ||||
| 		{ | ||||
| 			// Initial Active Pane | ||||
| 			$active = ""; | ||||
| 			if ($group->value == 1) | ||||
| 			{ | ||||
| 				$active = " active"; | ||||
| 			} | ||||
|  | ||||
| 			$html[] = '<div class="tab-pane' . $active . '" id="permission-' . $group->value . '">'; | ||||
| 			$html[] = '<table class="table table-striped">'; | ||||
| 			$html[] = '<thead>'; | ||||
| 			$html[] = '<tr>'; | ||||
|  | ||||
| 			$html[] = '<th class="actions" id="actions-th' . $group->value . '">'; | ||||
| 			$html[] = '<span class="acl-action">' . JText::_('JLIB_RULES_ACTION') . '</span>'; | ||||
| 			$html[] = '</th>'; | ||||
|  | ||||
| 			$html[] = '<th class="settings" id="settings-th' . $group->value . '">'; | ||||
| 			$html[] = '<span class="acl-action">' . JText::_('JLIB_RULES_SELECT_SETTING') . '</span>'; | ||||
| 			$html[] = '</th>'; | ||||
|  | ||||
| 			// The calculated setting is not shown for the root group of global configuration. | ||||
| 			$canCalculateSettings = ($group->parent_id || !empty($component)); | ||||
| 			if ($canCalculateSettings) | ||||
| 			{ | ||||
| 				$html[] = '<th id="aclactionth' . $group->value . '">'; | ||||
| 				$html[] = '<span class="acl-action">' . JText::_('JLIB_RULES_CALCULATED_SETTING') . '</span>'; | ||||
| 				$html[] = '</th>'; | ||||
| 			} | ||||
|  | ||||
| 			$html[] = '</tr>'; | ||||
| 			$html[] = '</thead>'; | ||||
| 			$html[] = '<tbody>'; | ||||
|  | ||||
| 			foreach ($actions as $action) | ||||
| 			{ | ||||
| 				$html[] = '<tr>'; | ||||
| 				$html[] = '<td headers="actions-th' . $group->value . '">'; | ||||
| 				$html[] = '<label for="' . $this->id . '_' . $action->name . '_' . $group->value . '" class="hasTooltip" title="' | ||||
| 					. htmlspecialchars(JText::_($action->title) . ' ' . JText::_($action->description), ENT_COMPAT, 'UTF-8') . '">'; | ||||
| 				$html[] = JText::_($action->title); | ||||
| 				$html[] = '</label>'; | ||||
| 				$html[] = '</td>'; | ||||
|  | ||||
| 				$html[] = '<td headers="settings-th' . $group->value . '">'; | ||||
|  | ||||
| 				$html[] = '<select class="input-small" name="' . $this->name . '[' . $action->name . '][' . $group->value . ']" id="' . $this->id . '_' . $action->name | ||||
| 					. '_' . $group->value . '" title="' | ||||
| 					. JText::sprintf('JLIB_RULES_SELECT_ALLOW_DENY_GROUP', JText::_($action->title), trim($group->text)) . '">'; | ||||
|  | ||||
| 				$inheritedRule = JAccess::checkGroup($group->value, $action->name, $assetId); | ||||
|  | ||||
| 				// Get the actual setting for the action for this group. | ||||
| 				$assetRule = $assetRules->allow($action->name, $group->value); | ||||
|  | ||||
| 				// Build the dropdowns for the permissions sliders | ||||
|  | ||||
| 				// The parent group has "Not Set", all children can rightly "Inherit" from that. | ||||
| 				$html[] = '<option value=""' . ($assetRule === null ? ' selected="selected"' : '') . '>' | ||||
| 					. JText::_(empty($group->parent_id) && empty($component) ? 'JLIB_RULES_NOT_SET' : 'JLIB_RULES_INHERITED') . '</option>'; | ||||
| 				$html[] = '<option value="1"' . ($assetRule === true ? ' selected="selected"' : '') . '>' . JText::_('JLIB_RULES_ALLOWED') | ||||
| 					. '</option>'; | ||||
| 				$html[] = '<option value="0"' . ($assetRule === false ? ' selected="selected"' : '') . '>' . JText::_('JLIB_RULES_DENIED') | ||||
| 					. '</option>'; | ||||
|  | ||||
| 				$html[] = '</select>  '; | ||||
|  | ||||
| 				// If this asset's rule is allowed, but the inherited rule is deny, we have a conflict. | ||||
| 				if (($assetRule === true) && ($inheritedRule === false)) | ||||
| 				{ | ||||
| 					$html[] = JText::_('JLIB_RULES_CONFLICT'); | ||||
| 				} | ||||
|  | ||||
| 				$html[] = '</td>'; | ||||
|  | ||||
| 				// Build the Calculated Settings column. | ||||
| 				// The inherited settings column is not displayed for the root group in global configuration. | ||||
| 				if ($canCalculateSettings) | ||||
| 				{ | ||||
| 					$html[] = '<td headers="aclactionth' . $group->value . '">'; | ||||
|  | ||||
| 					// This is where we show the current effective settings considering currrent group, path and cascade. | ||||
| 					// Check whether this is a component or global. Change the text slightly. | ||||
|  | ||||
| 					if (JAccess::checkGroup($group->value, 'core.admin', $assetId) !== true) | ||||
| 					{ | ||||
| 						if ($inheritedRule === null) | ||||
| 						{ | ||||
| 							$html[] = '<span class="label label-important">' . JText::_('JLIB_RULES_NOT_ALLOWED') . '</span>'; | ||||
| 						} | ||||
| 						elseif ($inheritedRule === true) | ||||
| 						{ | ||||
| 							$html[] = '<span class="label label-success">' . JText::_('JLIB_RULES_ALLOWED') . '</span>'; | ||||
| 						} | ||||
| 						elseif ($inheritedRule === false) | ||||
| 						{ | ||||
| 							if ($assetRule === false) | ||||
| 							{ | ||||
| 								$html[] = '<span class="label label-important">' . JText::_('JLIB_RULES_NOT_ALLOWED') . '</span>'; | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								$html[] = '<span class="label"><i class="icon-lock icon-white"></i> ' . JText::_('JLIB_RULES_NOT_ALLOWED_LOCKED') | ||||
| 									. '</span>'; | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 					elseif (!empty($component)) | ||||
| 					{ | ||||
| 						$html[] = '<span class="label label-success"><i class="icon-lock icon-white"></i> ' . JText::_('JLIB_RULES_ALLOWED_ADMIN') | ||||
| 							. '</span>'; | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						// Special handling for  groups that have global admin because they can't  be denied. | ||||
| 						// The admin rights can be changed. | ||||
| 						if ($action->name === 'core.admin') | ||||
| 						{ | ||||
| 							$html[] = '<span class="label label-success">' . JText::_('JLIB_RULES_ALLOWED') . '</span>'; | ||||
| 						} | ||||
| 						elseif ($inheritedRule === false) | ||||
| 						{ | ||||
| 							// Other actions cannot be changed. | ||||
| 							$html[] = '<span class="label label-important"><i class="icon-lock icon-white"></i> ' | ||||
| 								. JText::_('JLIB_RULES_NOT_ALLOWED_ADMIN_CONFLICT') . '</span>'; | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							$html[] = '<span class="label label-success"><i class="icon-lock icon-white"></i> ' . JText::_('JLIB_RULES_ALLOWED_ADMIN') | ||||
| 								. '</span>'; | ||||
| 						} | ||||
| 					} | ||||
|  | ||||
| 					$html[] = '</td>'; | ||||
| 				} | ||||
|  | ||||
| 				$html[] = '</tr>'; | ||||
| 			} | ||||
|  | ||||
| 			$html[] = '</tbody>'; | ||||
| 			$html[] = '</table></div>'; | ||||
|  | ||||
| 		} | ||||
|  | ||||
| 		$html[] = '</div></div>'; | ||||
|  | ||||
| 		$html[] = '<div class="alert">'; | ||||
| 		if ($section == 'component' || $section == null) | ||||
| 		{ | ||||
| 			$html[] = JText::_('JLIB_RULES_SETTING_NOTES'); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			$html[] = JText::_('JLIB_RULES_SETTING_NOTES_ITEM'); | ||||
| 		} | ||||
| 		$html[] = '</div>'; | ||||
|  | ||||
| 		return implode("\n", $html); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get a list of the user groups. | ||||
| 	 * | ||||
| 	 * @return  array | ||||
| 	 * | ||||
| 	 * @since   11.1 | ||||
| 	 */ | ||||
| 	protected function getUserGroups() | ||||
| 	{ | ||||
| 		$db = JFactory::getDbo(); | ||||
| 		$query = $db->getQuery(true) | ||||
| 			->select('a.id AS value, a.title AS text, COUNT(DISTINCT b.id) AS level, a.parent_id') | ||||
| 			->from('#__usergroups AS a') | ||||
| 			->join('LEFT', $db->quoteName('#__usergroups') . ' AS b ON a.lft > b.lft AND a.rgt < b.rgt') | ||||
| 			->group('a.id, a.title, a.lft, a.rgt, a.parent_id') | ||||
| 			->order('a.lft ASC'); | ||||
| 		$db->setQuery($query); | ||||
| 		$options = $db->loadObjectList(); | ||||
|  | ||||
| 		return $options; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 alazhar
					alazhar