164 lines
4.8 KiB
PHP
164 lines
4.8 KiB
PHP
<?php
|
|
/**
|
|
* Attachments component attachments model
|
|
*
|
|
* @package Attachments
|
|
* @subpackage Attachments_Component
|
|
*
|
|
* @copyright Copyright (C) 2007-2018 Jonathan M. Cameron, All Rights Reserved
|
|
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
|
* @link http://joomlacode.org/gf/project/attachments/frs/
|
|
* @author Jonathan M. Cameron
|
|
*/
|
|
|
|
defined('JPATH_BASE') or die;
|
|
|
|
jimport('joomla.html.html');
|
|
jimport('joomla.form.formfield');
|
|
|
|
/** Load the Attachements defines */
|
|
require_once(JPATH_SITE.'/components/com_attachments/defines.php');
|
|
|
|
/**
|
|
* Form Field class list of access levels the user has access to
|
|
*
|
|
* @package Attachments
|
|
* @subpackage Attachments_Component
|
|
*/
|
|
class JFormFieldAccessLevels extends JFormField
|
|
{
|
|
/**
|
|
* The form field type.
|
|
*
|
|
* @var string
|
|
* @since 1.6
|
|
*/
|
|
public $type = 'AccessLevels';
|
|
|
|
|
|
/**
|
|
* Method to get the field input markup.
|
|
*
|
|
* TODO: Add access check.
|
|
*
|
|
* @return string The field input markup.
|
|
* @since 1.6
|
|
*/
|
|
protected function getInput()
|
|
{
|
|
$options = new JObject();
|
|
$options->element = $this->element;
|
|
$options->multiple = $this->multiple;
|
|
$options->always_public = $this->fieldname == 'show_guest_access_levels';
|
|
return $this->getAccessLevels($this->name, 'jform_'.$this->fieldname, $this->value, $options);
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the access levels HTML selector
|
|
*
|
|
* @param string $for_id the id for the select input
|
|
* @param string $fieldname the name of the field
|
|
* @param int $level_value the value of the level(s) to be initially selected
|
|
*/
|
|
public static function getAccessLevels($for_id, $fieldname, $level_value=null, $options=null)
|
|
{
|
|
$user = JFactory::getUser();
|
|
$user_access_levels = array_unique($user->getAuthorisedViewLevels());
|
|
|
|
$db = JFactory::getDbo();
|
|
$query = $db->getQuery(true);
|
|
|
|
// Get the access levels this user is permitted
|
|
$query->select('a.*');
|
|
$query->from('#__viewlevels AS a');
|
|
if ( !$user->authorise('core.admin') ) {
|
|
// Users that are not super-users can ONLY see the the view levels that they are authorized for
|
|
$query->where('a.id in ('.implode(',', $user_access_levels).')');
|
|
}
|
|
$query->order('a.ordering ASC');
|
|
$query->order($query->qn('title') . ' ASC');
|
|
$db->setQuery($query);
|
|
$levels = $db->loadObjectList();
|
|
if ( $db->getErrorNum() ) {
|
|
$errmsg = $db->stderr() . ' (ERR 116)';
|
|
JError::raiseError(500, $errmsg);
|
|
}
|
|
|
|
// Make sure there is a $level_value
|
|
if ( $level_value === null ) {
|
|
jimport('joomla.application.component.helper');
|
|
$params = JComponentHelper::getParams('com_attachments');
|
|
$level_value = $params->get('default_access_level', AttachmentsDefines::$DEFAULT_ACCESS_LEVEL_ID);
|
|
}
|
|
|
|
// Make sure the $level_value is in an array
|
|
if (!is_array($level_value)) {
|
|
$level_value = Array($level_value);
|
|
}
|
|
|
|
// Make sure the $level_value is in the user's authorised levels (except for super-user)
|
|
if ( !$user->authorise('core.admin') ) {
|
|
|
|
// Filter out any non-permitted access levels
|
|
$ok_access_levels = Array();
|
|
foreach ($level_value as $lval) {
|
|
if (in_array($lval, $user_access_levels)) {
|
|
$ok_access_levels[] = $lval;
|
|
}
|
|
}
|
|
|
|
// Make sure there is at least one access level left
|
|
if (empty($ok_access_levels)) {
|
|
// pick one arbitrarily
|
|
$sorted_access_levels = sort($user_access_levels, SORT_NUMERIC);
|
|
$level_value = Array($sorted_access_levels[0]);
|
|
}
|
|
else {
|
|
$level_value = $ok_access_levels;
|
|
}
|
|
}
|
|
|
|
// Deal with multiple vs non-multiple selections
|
|
if (isset($options->multiple) and $options->multiple) {
|
|
|
|
// Make sure Public is always selected, if desired
|
|
$public = AttachmentsDefines::$PUBLIC_ACCESS_LEVEL_ID;
|
|
if ($options->always_public) {
|
|
if ( !in_array($public, $level_value) ) {
|
|
array_unshift($level_value, $public);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (count($level_value) > 1) {
|
|
// If not multiple, only one selection is allowed, arbitrarily pick the first one
|
|
// (Not sure this will ever be necessary)
|
|
$level_value = Array($level_value[0]);
|
|
}
|
|
}
|
|
|
|
// Construct the attributes for the list
|
|
$attr = '';
|
|
if ( $options === null ) {
|
|
$attr = 'class="inputbox" size="1"';
|
|
}
|
|
else {
|
|
$attr .= $options->element['class'] ? ' class="' . (string) $options->element['class'] . '"' : '';
|
|
$attr .= ((string) $options->element['disabled'] == 'true') ? ' disabled="disabled"' : '';
|
|
$attr .= $options->element['size'] ? ' size="' . (int) $options->element['size'] . '"' : '';
|
|
$attr .= $options->multiple ? ' multiple="multiple"' : '';
|
|
}
|
|
|
|
// Construct the list
|
|
$level_options = Array();
|
|
foreach ( $levels as $level ) {
|
|
// NOTE: We do not translate the access level titles
|
|
$level_options[] = JHtml::_('select.option', $level->id, $level->title);
|
|
}
|
|
return JHtml::_('select.genericlist', $level_options, $for_id,
|
|
$attr, 'value', 'text', $level_value, $fieldname
|
|
);
|
|
}
|
|
}
|