%PDF- %PDF-
| Direktori : /home1/lightco1/www/plugins/system/jsnframework/libraries/joomlashine/form/fields/ |
| Current File : //home1/lightco1/www/plugins/system/jsnframework/libraries/joomlashine/form/fields/permissions.php |
<?php
/**
* @version $Id$
* @package JSN_Framework
* @author JoomlaShine Team <support@joomlashine.com>
* @copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved.
* @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html
*
* Websites: http://www.joomlashine.com
* Technical Support: Feedback - http://www.joomlashine.com/contact-us/get-support.html
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// Import Joomla rules form field renderer
require_once JPATH_ROOT . '/libraries/joomla/form/fields/rules.php';
/**
* Create permissions form.
*
* Below is a sample field declaration for generating permission manager form:
*
* <code><field
* name="permissions" type="permissions" class="inputbox" filter="rules" validate="rules"
* component="com_sample" section="component"
* /></code>
*
* @package JSN_Framework
* @since 1.0.0
*/
class JFormFieldPermissions extends JFormFieldRules
{
/**
* The form field type.
*
* @var string
*/
public $type = 'Permissions';
/**
* Always return null to disable label markup generation.
*
* @return string
*/
protected function getLabel()
{
return '';
}
/**
* Get the field input markup for Access Control Lists.
*
* Optionally can be associated with a specific component and section.
*
* @return string
*/
protected function getInput()
{
// 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.
try
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName('id'));
$query->from($db->quoteName('#__assets'));
$query->where($db->quoteName('name') . ' = ' . $db->quote($component));
$db->setQuery($query);
$assetId = (int) $db->loadResult();
if ($error = $db->getErrorMsg())
{
throw new Exception($error);
}
}
catch (Exception $e)
{
return $e->getMessage();
}
}
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);
}
// 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();
$html[] = '<div id="permissions-sliders" class="pane-sliders">';
$html[] = '<p class="rule-desc">' . JText::_('JLIB_RULES_SETTINGS_DESC') . '</p>';
$html[] = '<ul id="rules">';
// Generate markup for all user groups.
foreach ($groups as $group)
{
$html[] = '<h3 class="pane-toggler title"><a href="javascript:void(0);"><span>';
$html[] = str_repeat('<span class="level">|–</span> ', $curLevel = $group->level) . $group->text;
$html[] = '</span></a></h3>';
$html[] = '<div class="pane-slider content">';
$html[] = '<div class="mypanel">';
$html[] = '<table class="table table-bordered" border="0">';
$html[] = '<thead>';
$html[] = '<tr>';
$html[] = '<th class="center" id="actions-th' . $group->value . '">';
$html[] = '<span class="acl-action">' . JText::_('JLIB_RULES_ACTION') . '</span>';
$html[] = '</th>';
$html[] = '<th class="center" 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.
if ($canCalculateSettings = ($group->parent_id || !empty($component)))
{
$html[] = '<th class="center" 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 class="control-label" for="' . $this->id . '_' . $action->name . '_' . $group->value . '" original-title="'
. htmlspecialchars(JText::_($action->description), ENT_COMPAT, 'UTF-8') . '">';
$html[] = JText::_($action->title);
$html[] = '</label>';
$html[] = '</td>';
$html[] = '<td class="center" headers="settings-th' . $group->value . '">';
$html[] = '<select name="permissions[' . $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 class="center" headers="aclactionth' . $group->value . '">';
$html[] = '<label class="control-label" style="text-align: center;">';
// 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') !== true)
{
if ($inheritedRule === null)
{
$html[] = '<span class="jsn-icon16 jsn-icon-remove" style="opacity: .33;"></span> ' . JText::_('JLIB_RULES_NOT_ALLOWED');
}
elseif ($inheritedRule === true)
{
$html[] = '<span class="jsn-icon16 jsn-icon-ok"></span> ' . JText::_('JLIB_RULES_ALLOWED');
}
elseif ($inheritedRule === false)
{
if ($assetRule === false)
{
$html[] = '<span class="jsn-icon16 jsn-icon-remove"></span> ' . JText::_('JLIB_RULES_NOT_ALLOWED');
}
else
{
$html[] = '<span class="jsn-icon16 jsn-icon-remove"></span> <span class="jsn-icon16 jsn-icon-lock"></span> ' . JText::_('JLIB_RULES_NOT_ALLOWED_LOCKED');
}
}
}
elseif (!empty($component))
{
$html[] = '<span class="jsn-icon16 jsn-icon-ok"></span> <span class="jsn-icon16 jsn-icon-lock"></span> ' . JText::_('JLIB_RULES_ALLOWED_ADMIN');
}
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="jsn-icon16 jsn-icon-ok"></span> ' . JText::_('JLIB_RULES_ALLOWED');
}
elseif ($inheritedRule === false)
{
// Other actions cannot be changed.
$html[] = '<span class="jsn-icon16 jsn-icon-remove"></span> <span class="jsn-icon16 jsn-icon-lock"></span> ' . JText::_('JLIB_RULES_NOT_ALLOWED_ADMIN_CONFLICT');
}
else
{
$html[] = '<span class="jsn-icon16 jsn-icon-ok"></span> <span class="jsn-icon16 jsn-icon-lock"></span> ' . JText::_('JLIB_RULES_ALLOWED_ADMIN');
}
}
$html[] = '</label>';
$html[] = '</td>';
}
$html[] = '</tr>';
}
$html[] = '</tbody>';
$html[] = '</table>';
$html[] = '</div></div>';
}
$html[] = '</ul><div class="rule-notes">';
if ($section == 'component' || $section == null)
{
$html[] = JText::_('JLIB_RULES_SETTING_NOTES');
}
else
{
$html[] = JText::_('JLIB_RULES_SETTING_NOTES_ITEM');
}
$html[] = '</div></div>';
$html[] = '<input type="hidden" name="' . $this->name . '" value="JSN_CONFIG_SKIP_SAVING" />';
// Override default Joomla accordion style
$html[] = '<style type="text/css">';
$html[] = '#jsn-config-form #permissions-sliders ul#rules .pane-slider { border: 0; padding: 0; }';
$html[] = '#jsn-config-form .pane-sliders .title { padding: 0; }';
$html[] = '.jsn-bootstrap #jsn-config-form .form-horizontal .control-label { float: none; text-align: left; width: auto; }';
$html[] = '</style>';
return implode("\n", $html);
}
}