Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/joomla4/ |
| [Home] [System Details] [Kill Me] |
field/accesslevel.php000064400000007607147362604440010655 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('accesslevel');
/**
* Form Field class for FOF
* Joomla! access levels
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldAccesslevel extends JFormFieldAccessLevel implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
$params = $this->getOptions();
$db = FOFPlatform::getInstance()->getDbo();
$query = $db->getQuery(true);
$query->select('a.id AS value, a.title AS text');
$query->from('#__viewlevels AS a');
$query->group('a.id, a.title, a.ordering');
$query->order('a.ordering ASC');
$query->order($query->qn('title') . ' ASC');
// Get the options.
$db->setQuery($query);
$options = $db->loadObjectList();
// If params is an array, push these options to the array
if (is_array($params))
{
$options = array_merge($params, $options);
}
// If all levels is allowed, push it into the array.
elseif ($params)
{
array_unshift($options, JHtml::_('select.option',
'', JText::_('JOPTION_ACCESS_SHOW_ALL_LEVELS')));
}
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($options,
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$params = $this->getOptions();
$db = FOFPlatform::getInstance()->getDbo();
$query = $db->getQuery(true);
$query->select('a.id AS value, a.title AS text');
$query->from('#__viewlevels AS a');
$query->group('a.id, a.title, a.ordering');
$query->order('a.ordering ASC');
$query->order($query->qn('title') . ' ASC');
// Get the options.
$db->setQuery($query);
$options = $db->loadObjectList();
// If params is an array, push these options to the array
if (is_array($params))
{
$options = array_merge($params, $options);
}
// If all levels is allowed, push it into the array.
elseif ($params)
{
array_unshift($options, JHtml::_('select.option',
'', JText::_('JOPTION_ACCESS_SHOW_ALL_LEVELS')));
}
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($options,
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
field/actions.php000064400000013263147362604440010017 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
* @note This file has been modified by the Joomla! Project and no longer
reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for FOF
* Supports a generic list of options.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldActions extends JFormFieldList implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the field configuration
*
* @return array
*/
protected function getConfig()
{
// If no custom options were defined let's figure out which ones of
the
// defaults we shall use...
$config = array(
'published' => 1,
'unpublished' => 1,
'archived' => 0,
'trash' => 0,
'all' => 0,
);
$stack = array();
if (isset($this->element['show_published']))
{
$config['published'] =
FOFStringUtils::toBool($this->element['show_published']);
}
if (isset($this->element['show_unpublished']))
{
$config['unpublished'] =
FOFStringUtils::toBool($this->element['show_unpublished']);
}
if (isset($this->element['show_archived']))
{
$config['archived'] =
FOFStringUtils::toBool($this->element['show_archived']);
}
if (isset($this->element['show_trash']))
{
$config['trash'] =
FOFStringUtils::toBool($this->element['show_trash']);
}
if (isset($this->element['show_all']))
{
$config['all'] =
FOFStringUtils::toBool($this->element['show_all']);
}
return $config;
}
/**
* Method to get the field options.
*
* @since 2.0
*
* @return array The field option objects.
*/
protected function getOptions()
{
return null;
}
/**
* Method to get a
*
* @param string $enabledFieldName Name of the enabled/published field
*
* @return FOFFormFieldPublished Field
*/
protected function getPublishedField($enabledFieldName)
{
$attributes = array(
'name' => $enabledFieldName,
'type' => 'published',
);
if ($this->element['publish_up'])
{
$attributes['publish_up'] = (string)
$this->element['publish_up'];
}
if ($this->element['publish_down'])
{
$attributes['publish_down'] = (string)
$this->element['publish_down'];
}
foreach ($attributes as $name => $value)
{
if (!is_null($value))
{
$renderedAttributes[] = $name . '="' . $value .
'"';
}
}
$publishedXml = new SimpleXMLElement('<field ' .
implode(' ', $renderedAttributes) . ' />');
$publishedField = new FOFFormFieldPublished($this->form);
// Pass required objects to the field
$publishedField->item = $this->item;
$publishedField->rowid = $this->rowid;
$publishedField->setup($publishedXml,
$this->item->{$enabledFieldName});
return $publishedField;
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
throw new Exception(__CLASS__ . ' cannot be used in single item
display forms');
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
if (!($this->item instanceof FOFTable))
{
throw new Exception(__CLASS__ . ' needs a FOFTable to act
upon');
}
$config = $this->getConfig();
// Initialise
$prefix = '';
$checkbox = 'cb';
$publish_up = null;
$publish_down = null;
$enabled = true;
$html = '<div class="btn-group">';
// Render a published field
if ($publishedFieldName =
$this->item->getColumnAlias('enabled'))
{
if ($config['published'] || $config['unpublished'])
{
// Generate a FOFFormFieldPublished field
$publishedField = $this->getPublishedField($publishedFieldName);
// Render the publish button
$html .= $publishedField->getRepeatable();
}
if ($config['archived'])
{
$archived = $this->item->{$publishedFieldName} == 2 ? true :
false;
// Create dropdown items
$action = $archived ? 'unarchive' : 'archive';
JHtml::_('actionsdropdown.' . $action, 'cb' .
$this->rowid, $prefix);
}
if ($config['trash'])
{
$trashed = $this->item->{$publishedFieldName} == -2 ? true :
false;
$action = $trashed ? 'untrash' : 'trash';
JHtml::_('actionsdropdown.' . $action, 'cb' .
$this->rowid, $prefix);
}
// Render dropdown list
if ($config['archived'] || $config['trash'])
{
$html .= JHtml::_('actionsdropdown.render',
$this->item->title);
}
}
$html .= '</div>';
return $html;
}
}
field/button.php000064400000006166147362604440007676 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('text');
/**
* Form Field class for the FOF framework
* Supports a button input.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldButton extends FOFFormFieldText implements FOFFormField
{
protected $static;
protected $repeatable;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
return $this->getInput();
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
return $this->getInput();
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getInput()
{
$this->label = '';
$allowedElement = array('button', 'a');
if (in_array($this->element['htmlelement'],
$allowedElement))
$type = $this->element['htmlelement'];
else
$type = 'button';
$text = $this->element['text'];
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$icon = $this->element['icon'] ? (string)
$this->element['icon'] : '';
$onclick = $this->element['onclick'] ?
'onclick="' . (string)
$this->element['onclick'] . '"' : '';
$url = $this->element['url'] ? 'href="' .
$this->parseFieldTags((string) $this->element['url']) .
'"' : '';
$title = $this->element['title'] ?
'title="' . JText::_((string)
$this->element['title']) . '"' : '';
$this->value = JText::_($text);
if ($icon)
{
$icon = '<span class="icon ' . $icon .
'"></span>';
}
return '<' . $type . ' id="' . $this->id .
'" class="btn ' . $class . '" ' .
$onclick . $url . $title . '>' .
$icon .
htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') .
'</' . $type . '>';
}
/**
* Method to get the field title.
*
* @return string The field title.
*/
protected function getTitle()
{
return null;
}
}
field/cachehandler.php000064400000004674147362604440010766 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('cachehandler');
/**
* Form Field class for FOF
* Joomla! cache handlers
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldCachehandler extends JFormFieldCacheHandler implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
field/calendar.php000064400000012352147362604440010126 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
* @note This file has been modified by the Joomla! Project and no longer
reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('calendar');
/**
* Form Field class for the FOF framework
* Supports a calendar / date field.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldCalendar extends JFormFieldCalendar implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
// ATTENTION: Redirected getInput() to getStatic()
case 'input':
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
return $this->getCalendar('static');
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
return $this->getCalendar('repeatable');
}
/**
* Method to get the calendar input markup.
*
* @param string $display The display to render ('static' or
'repeatable')
*
* @return string The field input markup.
*
* @since 2.1.rc4
*/
protected function getCalendar($display)
{
// Initialize some field attributes.
$format = $this->element['format'] ? (string)
$this->element['format'] : '%Y-%m-%d';
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$default = $this->element['default'] ? (string)
$this->element['default'] : '';
// PHP date doesn't use percentages (%) for the format, but the
calendar Javascript
// DOES use it (@see: calendar-uncompressed.js). Therefore we have to
convert it.
$formatJS = $format;
$formatPHP = str_replace(array('%', 'H:M:S',
'B'), array('', 'H:i:s', 'F'),
$formatJS);
// Check for empty date values
if (empty($this->value) || $this->value ==
FOFPlatform::getInstance()->getDbo()->getNullDate() ||
$this->value == '0000-00-00')
{
$this->value = $default;
}
// Get some system objects.
$config = FOFPlatform::getInstance()->getConfig();
$user = JFactory::getUser();
// Format date if exists
if (!empty($this->value))
{
$date = FOFPlatform::getInstance()->getDate($this->value,
'UTC');
// If a known filter is given use it.
switch (strtoupper((string) $this->element['filter']))
{
case 'SERVER_UTC':
// Convert a date to UTC based on the server timezone.
if ((int) $this->value)
{
// Get a date object based on the correct timezone.
$date->setTimezone(new
DateTimeZone($config->get('offset')));
}
break;
case 'USER_UTC':
// Convert a date to UTC based on the user timezone.
if ((int) $this->value)
{
// Get a date object based on the correct timezone.
$date->setTimezone($user->getTimezone());
}
break;
default:
break;
}
// Transform the date string.
$this->value = $date->format($formatPHP, true, false);
}
if ($display == 'static')
{
// Build the attributes array.
$attributes = array();
if ($this->element['size'])
{
$attributes['size'] = (int)
$this->element['size'];
}
if ($this->element['maxlength'])
{
$attributes['maxlength'] = (int)
$this->element['maxlength'];
}
if ($this->element['class'])
{
$attributes['class'] = (string)
$this->element['class'];
}
if ((string) $this->element['readonly'] ==
'true')
{
$attributes['readonly'] = 'readonly';
}
if ((string) $this->element['disabled'] ==
'true')
{
$attributes['disabled'] = 'disabled';
}
if ($this->element['onchange'])
{
$attributes['onchange'] = (string)
$this->element['onchange'];
}
if ($this->required)
{
$attributes['required'] = 'required';
$attributes['aria-required'] = 'true';
}
return JHtml::_('calendar', $this->value, $this->name,
$this->id, $formatJS, $attributes);
}
else
{
return '<span class="' . $this->id . ' '
. $class . '">' .
htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
}
field/captcha.php000064400000003727147362604440007766 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('captcha');
/**
* Form Field class for the FOF framework
* Supports a captcha field.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldCaptcha extends JFormFieldCaptcha implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
return $this->getInput();
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
return $this->getInput();
}
}
field/checkbox.php000064400000007235147362604440010147 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('checkbox');
/**
* Form Field class for the FOF framework
* A single checkbox
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldCheckbox extends JFormFieldCheckbox implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
$value = $this->element['value'] ? (string)
$this->element['value'] : '1';
$disabled = ((string) $this->element['disabled'] ==
'true') ? ' disabled="disabled"' :
'';
$onclick = $this->element['onclick'] ? '
onclick="' . (string) $this->element['onclick'] .
'"' : '';
$required = $this->required ? ' required="required"
aria-required="true"' : '';
if (empty($this->value))
{
$checked = (isset($this->element['checked'])) ? '
checked="checked"' : '';
}
else
{
$checked = ' checked="checked"';
}
return '<span id="' . $this->id . '"
' . $class . '>' .
'<input type="checkbox" name="' .
$this->name . '" id="' . $this->id .
'"' . ' value="'
. htmlspecialchars($value, ENT_COMPAT, 'UTF-8') .
'"' . $class . $checked . $disabled . $onclick . $required .
' />' .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$value = $this->element['value'] ? (string)
$this->element['value'] : '1';
$disabled = ((string) $this->element['disabled'] ==
'true') ? ' disabled="disabled"' :
'';
$onclick = $this->element['onclick'] ? '
onclick="' . (string) $this->element['onclick'] .
'"' : '';
$required = $this->required ? ' required="required"
aria-required="true"' : '';
if (empty($this->value))
{
$checked = (isset($this->element['checked'])) ? '
checked="checked"' : '';
}
else
{
$checked = ' checked="checked"';
}
return '<span class="' . $this->id . ' ' .
$class . '">' .
'<input type="checkbox" name="' .
$this->name . '" class="' . $this->id . '
' . $class . '"' . ' value="'
. htmlspecialchars($value, ENT_COMPAT, 'UTF-8') .
'"' . $checked . $disabled . $onclick . $required . '
/>' .
'</span>';
}
}
field/checkboxes.php000064400000005354147362604440010477 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('checkboxes');
/**
* Form Field class for FOF
* Supports a list of checkbox.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldCheckboxes extends JFormFieldCheckboxes implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
return $this->getRepeatable();
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : $this->id;
$translate = $this->element['translate'] ? (string)
$this->element['translate'] : false;
$html = '<span class="' . $class .
'">';
foreach ($this->value as $value) {
$html .= '<span>';
if ($translate == true)
{
$html .= JText::_($value);
}
else
{
$html .= $value;
}
$html .= '</span>';
}
$html .= '</span>';
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getInput()
{
// Used for J! 2.5 compatibility
$this->value = !is_array($this->value) ? explode(',',
$this->value) : $this->value;
return parent::getInput();
}
}
field/components.php000064400000013665147362604440010552 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
* @note This file has been modified by the Joomla! Project and no longer
reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for FOF
* Components installed on the site
*
* @package FrameworkOnFramework
* @since 2.1
*/
class FOFFormFieldComponents extends JFormFieldList implements FOFFormField
{
protected $static;
protected $repeatable;
public $client_ids = null;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.1
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.1
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.1
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get a list of all installed components and also translates them.
*
* The manifest_cache is used to get the extension names, since JInstaller
is also
* translating those names in stead of the name column. Else some of the
translations
* fails.
*
* @since 2.1
*
* @return array An array of JHtml options.
*/
protected function getOptions()
{
$db = FOFPlatform::getInstance()->getDbo();
// Check for client_ids override
if ($this->client_ids !== null)
{
$client_ids = $this->client_ids;
}
else
{
$client_ids = $this->element['client_ids'];
}
$client_ids = explode(',', $client_ids);
// Calculate client_ids where clause
foreach ($client_ids as &$client_id)
{
$client_id = (int) trim($client_id);
$client_id = $db->q($client_id);
}
$query = $db->getQuery(true)
->select(
array(
$db->qn('name'),
$db->qn('element'),
$db->qn('client_id'),
$db->qn('manifest_cache'),
)
)
->from($db->qn('#__extensions'))
->where($db->qn('type') . ' = ' .
$db->q('component'))
->where($db->qn('client_id') . ' IN (' .
implode(',', $client_ids) . ')');
$db->setQuery($query);
$components = $db->loadObjectList('element');
// Convert to array of objects, so we can use sortObjects()
// Also translate component names with JText::_()
$aComponents = array();
$user = JFactory::getUser();
foreach ($components as $component)
{
// Don't show components in the list where the user doesn't
have access for
// TODO: perhaps add an option for this
if (!$user->authorise('core.manage',
$component->element))
{
continue;
}
$oData = (object) array(
'value' => $component->element,
'text' => $this->translate($component,
'component')
);
$aComponents[$component->element] = $oData;
}
// Reorder the components array, because the alphabetical
// ordering changed due to the JText::_() translation
uasort(
$aComponents,
function ($a, $b) {
return strcasecmp($a->text, $b->text);
}
);
return $aComponents;
}
/**
* Translate a list of objects with JText::_().
*
* @param array $item The array of objects
* @param string $type The extension type (e.g. component)
*
* @since 2.1
*
* @return string $text The translated name of the extension
*
* @see administrator/com_installer/models/extension.php
*/
public function translate($item, $type)
{
$platform = FOFPlatform::getInstance();
// Map the manifest cache to $item. This is needed to get the name from
the
// manifest_cache and NOT from the name column, else some JText::_()
translations fails.
$mData = json_decode($item->manifest_cache);
if ($mData)
{
foreach ($mData as $key => $value)
{
if ($key == 'type')
{
// Ignore the type field
continue;
}
$item->$key = $value;
}
}
$lang = $platform->getLanguage();
switch ($type)
{
case 'component':
$source = JPATH_ADMINISTRATOR . '/components/' .
$item->element;
$lang->load("$item->element.sys", JPATH_ADMINISTRATOR,
null, false, false)
|| $lang->load("$item->element.sys", $source, null,
false, false)
|| $lang->load("$item->element.sys",
JPATH_ADMINISTRATOR, $lang->getDefault(), false, false)
|| $lang->load("$item->element.sys", $source,
$lang->getDefault(), false, false);
break;
}
$text = JText::_($item->name);
return $text;
}
}
field/editor.php000064400000004430147362604440007641 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('editor');
/**
* Form Field class for the FOF framework
* An editarea field for content creation and formatted HTML display
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldEditor extends JFormFieldEditor implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<div id="' . $this->id . '" '
. $class . '>' . $this->value . '</div>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
return '<div class="' . $this->id . ' ' .
$class . '">' . $this->value .
'</div>';
}
}
field/email.php000064400000007145147362604440007450 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('email');
/**
* Form Field class for the FOF framework
* Supports a one line text field.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldEmail extends JFormFieldEMail implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
$dolink = $this->element['show_link'] == 'true';
$empty_replacement = '';
if ($this->element['empty_replacement'])
{
$empty_replacement = (string)
$this->element['empty_replacement'];
}
if (!empty($empty_replacement) && empty($this->value))
{
$this->value = JText::_($empty_replacement);
}
$innerHtml = htmlspecialchars($this->value, ENT_COMPAT,
'UTF-8');
if ($dolink)
{
$innerHtml = '<a href="mailto:' . $innerHtml .
'">' .
$innerHtml . '</a>';
}
return '<span id="' . $this->id . '"
' . $class . '>' .
$innerHtml .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
// Initialise
$class = '';
$show_link = false;
$link_url = '';
$empty_replacement = '';
// Get field parameters
if ($this->element['class'])
{
$class = (string) $this->element['class'];
}
if ($this->element['show_link'] == 'true')
{
$show_link = true;
}
if ($this->element['url'])
{
$link_url = $this->element['url'];
}
else
{
$link_url = 'mailto:' . htmlspecialchars($this->value,
ENT_COMPAT, 'UTF-8');
}
if ($this->element['empty_replacement'])
{
$empty_replacement = (string)
$this->element['empty_replacement'];
}
// Get the (optionally formatted) value
if (!empty($empty_replacement) && empty($this->value))
{
$this->value = JText::_($empty_replacement);
}
$value = htmlspecialchars($this->value, ENT_COMPAT,
'UTF-8');
// Create the HTML
$html = '<span class="' . $this->id . ' '
. $class . '">';
if ($show_link)
{
$html .= '<a href="' . $link_url .
'">';
}
$html .= $value;
if ($show_link)
{
$html .= '</a>';
}
$html .= '</span>';
return $html;
}
}
field/groupedbutton.php000064400000005737147362604440011267
0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for FOF
* Supports a generic list of options.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldGroupedbutton extends JFormFieldText implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
return $this->getInput();
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
return $this->getInput();
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getInput()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$html = '<div id="' . $this->id . '"
class="btn-group ' . $class . '">';
foreach ($this->element->children() as $option)
{
$renderedAttributes = array();
foreach ($option->attributes() as $name => $value)
{
if (!is_null($value))
{
$renderedAttributes[] = $name . '="' .
htmlentities($value) . '"';
}
}
$buttonXML = new SimpleXMLElement('<field ' .
implode(' ', $renderedAttributes) . ' />');
$buttonField = new FOFFormFieldButton($this->form);
// Pass required objects to the field
$buttonField->item = $this->item;
$buttonField->rowid = $this->rowid;
$buttonField->setup($buttonXML, null);
$html .= $buttonField->getRepeatable();
}
$html .= '</div>';
return $html;
}
}
field/groupedlist.php000064400000010452147362604440010715 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('groupedlist');
/**
* Form Field class for FOF
* Supports a generic list of options.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldGroupedlist extends JFormFieldGroupedList implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$selected = self::getOptionName($this->getGroups(), $this->value);
if (is_null($selected))
{
$selected = array(
'group' => '',
'item' => ''
);
}
return '<span id="' . $this->id . '-group"
class="fof-groupedlist-group ' . $class . '>' .
htmlspecialchars($selected['group'], ENT_COMPAT,
'UTF-8') .
'</span>' .
'<span id="' . $this->id . '-item"
class="fof-groupedlist-item ' . $class . '>' .
htmlspecialchars($selected['item'], ENT_COMPAT,
'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$selected = self::getOptionName($this->getGroups(), $this->value);
if (is_null($selected))
{
$selected = array(
'group' => '',
'item' => ''
);
}
return '<span class="' . $this->id . '-group
fof-groupedlist-group ' . $class . '">' .
htmlspecialchars($selected['group'], ENT_COMPAT,
'UTF-8') .
'</span>' .
'<span class="' . $this->id . '-item
fof-groupedlist-item ' . $class . '">' .
htmlspecialchars($selected['item'], ENT_COMPAT,
'UTF-8') .
'</span>';
}
/**
* Gets the active option's label given an array of JHtml options
*
* @param array $data The JHtml options to parse
* @param mixed $selected The currently selected value
* @param string $groupKey Group name
* @param string $optKey Key name
* @param string $optText Value name
*
* @return mixed The label of the currently selected option
*/
public static function getOptionName($data, $selected = null, $groupKey =
'items', $optKey = 'value', $optText =
'text')
{
$ret = null;
foreach ($data as $dataKey => $group)
{
$label = $dataKey;
$noGroup = is_int($dataKey);
if (is_array($group))
{
$subList = $group[$groupKey];
$label = $group[$optText];
$noGroup = false;
}
elseif (is_object($group))
{
// Sub-list is in a property of an object
$subList = $group->$groupKey;
$label = $group->$optText;
$noGroup = false;
}
else
{
throw new RuntimeException('Invalid group contents.', 1);
}
if ($noGroup)
{
$label = '';
}
$match = FOFFormFieldList::getOptionName($data, $selected, $optKey,
$optText);
if (!is_null($match))
{
$ret = array(
'group' => $label,
'item' => $match
);
break;
}
}
return $ret;
}
}
field/hidden.php000064400000003711147362604440007607 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('hidden');
/**
* Form Field class for the FOF framework
* A hidden field
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldHidden extends JFormFieldHidden implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
return $this->getInput();
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
return $this->getInput();
}
}
field/image.php000064400000001042147362604440007431 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Form Field class for the FOF framework
* Media selection field. This is an alias of the "media" field
type.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldImage extends FOFFormFieldMedia
{
}
field/imagelist.php000064400000006352147362604440010336 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
* @note This file has been modified by the Joomla! Project and no longer
reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('imagelist');
/**
* Form Field class for the FOF framework
* Media selection field.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldImagelist extends JFormFieldImageList implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$imgattr = array(
'id' => $this->id
);
if ($this->element['class'])
{
$imgattr['class'] = (string)
$this->element['class'];
}
if ($this->element['style'])
{
$imgattr['style'] = (string)
$this->element['style'];
}
if ($this->element['width'])
{
$imgattr['width'] = (string)
$this->element['width'];
}
if ($this->element['height'])
{
$imgattr['height'] = (string)
$this->element['height'];
}
if ($this->element['align'])
{
$imgattr['align'] = (string)
$this->element['align'];
}
if ($this->element['rel'])
{
$imgattr['rel'] = (string) $this->element['rel'];
}
if ($this->element['alt'])
{
$alt = JText::_((string) $this->element['alt']);
}
else
{
$alt = null;
}
if ($this->element['title'])
{
$imgattr['title'] = JText::_((string)
$this->element['title']);
}
$path = (string) $this->element['directory'];
$path = trim($path, '/' . DIRECTORY_SEPARATOR);
if ($this->value && file_exists(JPATH_ROOT . '/' .
$path . '/' . $this->value))
{
$src = FOFPlatform::getInstance()->URIroot() . '/' . $path
. '/' . $this->value;
}
else
{
$src = '';
}
return JHtml::_('image', $src, $alt, $imgattr);
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
return $this->getStatic();
}
}
field/integer.php000064400000004615147362604440010015 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('integer');
/**
* Form Field class for the FOF framework
* Supports a one line text field.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldInteger extends JFormFieldInteger implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
field/language.php000064400000005474147362604440010147 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('language');
/**
* Form Field class for FOF
* Available site languages
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldLanguage extends JFormFieldLanguage implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Method to get the field options.
*
* @since 2.0
*
* @return array The field option objects.
*/
protected function getOptions()
{
$options = parent::getOptions();
$noneoption = $this->element['none'] ?
$this->element['none'] : null;
if ($noneoption)
{
array_unshift($options, JHtml::_('select.option',
'*', JText::_($noneoption)));
}
return $options;
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
field/list.php000064400000023506147362604440007333 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
* @note This file has been modified by the Joomla! Project and no longer
reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for FOF
* Supports a generic list of options.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldList extends JFormFieldList implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(self::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$show_link = false;
$link_url = '';
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
if ($this->element['show_link'] == 'true')
{
$show_link = true;
}
if ($this->element['url'])
{
$link_url = $this->element['url'];
}
else
{
$show_link = false;
}
if ($show_link && ($this->item instanceof FOFTable))
{
$link_url = $this->parseFieldTags($link_url);
}
else
{
$show_link = false;
}
$html = '<span class="' . $this->id . ' '
. $class . '">';
if ($show_link)
{
$html .= '<a href="' . $link_url .
'">';
}
$html .= htmlspecialchars(self::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8');
if ($show_link)
{
$html .= '</a>';
}
$html .= '</span>';
return $html;
}
/**
* Gets the active option's label given an array of JHtml options
*
* @param array $data The JHtml options to parse
* @param mixed $selected The currently selected value
* @param string $optKey Key name
* @param string $optText Value name
*
* @return mixed The label of the currently selected option
*/
public static function getOptionName($data, $selected = null, $optKey =
'value', $optText = 'text')
{
$ret = null;
foreach ($data as $elementKey => &$element)
{
if (is_array($element))
{
$key = $optKey === null ? $elementKey : $element[$optKey];
$text = $element[$optText];
}
elseif (is_object($element))
{
$key = $optKey === null ? $elementKey : $element->$optKey;
$text = $element->$optText;
}
else
{
// This is a simple associative array
$key = $elementKey;
$text = $element;
}
if (is_null($ret))
{
$ret = $text;
}
elseif ($selected == $key)
{
$ret = $text;
}
}
return $ret;
}
/**
* Method to get the field options.
*
* Ordering is disabled by default. You can enable ordering by setting the
* 'order' element in your form field. The other order values
are optional.
*
* - order What to order. Possible values: 'name' or
'value' (default = false)
* - order_dir Order direction. Possible values: 'asc' =
Ascending or 'desc' = Descending (default = 'asc')
* - order_case_sensitive Order case sensitive. Possible values:
'true' or 'false' (default = false)
*
* @return array The field option objects.
*
* @since Ordering is available since FOF 2.1.b2.
*/
protected function getOptions()
{
// Ordering is disabled by default for backward compatibility
$order = false;
// Set default order direction
$order_dir = 'asc';
// Set default value for case sensitive sorting
$order_case_sensitive = false;
if ($this->element['order'] &&
$this->element['order'] !== 'false')
{
$order = $this->element['order'];
}
if ($this->element['order_dir'])
{
$order_dir = $this->element['order_dir'];
}
if ($this->element['order_case_sensitive'])
{
// Override default setting when the form element value is
'true'
if ($this->element['order_case_sensitive'] ==
'true')
{
$order_case_sensitive = true;
}
}
// Create a $sortOptions array in order to apply sorting
$i = 0;
$sortOptions = array();
foreach ($this->element->children() as $option)
{
$name = JText::alt(trim((string) $option),
preg_replace('/[^a-zA-Z0-9_\-]/', '_',
$this->fieldname));
$sortOptions[$i] = new stdClass;
$sortOptions[$i]->option = $option;
$sortOptions[$i]->value = $option['value'];
$sortOptions[$i]->name = $name;
$i++;
}
// Only order if it's set
if ($order)
{
jimport('joomla.utilities.arrayhelper');
FOFUtilsArray::sortObjects($sortOptions, $order, $order_dir ==
'asc' ? 1 : -1, $order_case_sensitive, false);
}
// Initialise the options
$options = array();
// Get the field $options
foreach ($sortOptions as $sortOption)
{
$option = $sortOption->option;
$name = $sortOption->name;
// Only add <option /> elements.
if ($option->getName() != 'option')
{
continue;
}
$tmp = JHtml::_('select.option', (string)
$option['value'], $name, 'value', 'text',
((string) $option['disabled'] == 'true'));
// Set some option attributes.
$tmp->class = (string) $option['class'];
// Set some JavaScript option attributes.
$tmp->onclick = (string) $option['onclick'];
// Add the option object to the result set.
$options[] = $tmp;
}
// Do we have a class and method source for our options?
$source_file = empty($this->element['source_file']) ?
'' : (string) $this->element['source_file'];
$source_class = empty($this->element['source_class']) ?
'' : (string) $this->element['source_class'];
$source_method = empty($this->element['source_method']) ?
'' : (string) $this->element['source_method'];
$source_key = empty($this->element['source_key']) ?
'*' : (string) $this->element['source_key'];
$source_value = empty($this->element['source_value']) ?
'*' : (string) $this->element['source_value'];
$source_translate =
empty($this->element['source_translate']) ? 'true' :
(string) $this->element['source_translate'];
$source_translate = in_array(strtolower($source_translate),
array('true','yes','1','on')) ?
true : false;
$source_format = empty($this->element['source_format']) ?
'' : (string) $this->element['source_format'];
if ($source_class && $source_method)
{
// Maybe we have to load a file?
if (!empty($source_file))
{
$source_file = FOFTemplateUtils::parsePath($source_file, true);
if
(FOFPlatform::getInstance()->getIntegrationObject('filesystem')->fileExists($source_file))
{
include_once $source_file;
}
}
// Make sure the class exists
if (class_exists($source_class, true))
{
// ...and so does the option
if (in_array($source_method, get_class_methods($source_class)))
{
// Get the data from the class
if ($source_format == 'optionsobject')
{
$options = array_merge($options, $source_class::$source_method());
}
else
{
// Get the data from the class
$source_data = $source_class::$source_method();
// Loop through the data and prime the $options array
foreach ($source_data as $k => $v)
{
$key = (empty($source_key) || ($source_key == '*')) ? $k :
$v[$source_key];
$value = (empty($source_value) || ($source_value == '*'))
? $v : $v[$source_value];
if ($source_translate)
{
$value = JText::_($value);
}
$options[] = JHtml::_('select.option', $key, $value,
'value', 'text');
}
}
}
}
}
reset($options);
return $options;
}
/**
* Replace string with tags that reference fields
*
* @param string $text Text to process
*
* @return string Text with tags replace
*/
protected function parseFieldTags($text)
{
$ret = $text;
// Replace [ITEM:ID] in the URL with the item's key value (usually:
// the auto-incrementing numeric ID)
$keyfield = $this->item->getKeyName();
$replace = $this->item->$keyfield;
$ret = str_replace('[ITEM:ID]', $replace, $ret);
// Replace the [ITEMID] in the URL with the current Itemid parameter
$ret = str_replace('[ITEMID]',
JFactory::getApplication()->input->getInt('Itemid', 0),
$ret);
// Replace other field variables in the URL
$fields = $this->item->getTableFields();
foreach ($fields as $fielddata)
{
$fieldname = $fielddata->Field;
if (empty($fieldname))
{
$fieldname = $fielddata->column_name;
}
$search = '[ITEM:' . strtoupper($fieldname) .
']';
$replace = $this->item->$fieldname;
$ret = str_replace($search, $replace, $ret);
}
return $ret;
}
}
field/media.php000064400000006131147362604440007432 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
* @note This file has been modified by the Joomla! Project and no longer
reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('media');
/**
* Form Field class for the FOF framework
* Media selection field.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldMedia extends JFormFieldMedia implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$imgattr = array(
'id' => $this->id
);
if ($this->element['class'])
{
$imgattr['class'] = (string)
$this->element['class'];
}
if ($this->element['style'])
{
$imgattr['style'] = (string)
$this->element['style'];
}
if ($this->element['width'])
{
$imgattr['width'] = (string)
$this->element['width'];
}
if ($this->element['height'])
{
$imgattr['height'] = (string)
$this->element['height'];
}
if ($this->element['align'])
{
$imgattr['align'] = (string)
$this->element['align'];
}
if ($this->element['rel'])
{
$imgattr['rel'] = (string) $this->element['rel'];
}
if ($this->element['alt'])
{
$alt = JText::_((string) $this->element['alt']);
}
else
{
$alt = null;
}
if ($this->element['title'])
{
$imgattr['title'] = JText::_((string)
$this->element['title']);
}
if ($this->value && file_exists(JPATH_ROOT . '/' .
$this->value))
{
$src = FOFPlatform::getInstance()->URIroot() . $this->value;
}
else
{
$src = '';
}
return JHtml::_('image', $src, $alt, $imgattr);
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
return $this->getStatic();
}
}
field/model.php000064400000015026147362604440007456 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for FOF
* Generic list from a model's results
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldModel extends FOFFormFieldList implements FOFFormField
{
protected $static;
protected $repeatable;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->id;
$format_string = '';
$show_link = false;
$link_url = '';
$empty_replacement = '';
// Get field parameters
if ($this->element['class'])
{
$class = (string) $this->element['class'];
}
if ($this->element['format'])
{
$format_string = (string) $this->element['format'];
}
if ($this->element['show_link'] == 'true')
{
$show_link = true;
}
if ($this->element['url'])
{
$link_url = $this->element['url'];
}
else
{
$show_link = false;
}
if ($show_link && ($this->item instanceof FOFTable))
{
$link_url = $this->parseFieldTags($link_url);
}
else
{
$show_link = false;
}
if ($this->element['empty_replacement'])
{
$empty_replacement = (string)
$this->element['empty_replacement'];
}
$value = FOFFormFieldList::getOptionName($this->getOptions(),
$this->value);
// Get the (optionally formatted) value
if (!empty($empty_replacement) && empty($value))
{
$value = JText::_($empty_replacement);
}
if (empty($format_string))
{
$value = htmlspecialchars($value, ENT_COMPAT, 'UTF-8');
}
else
{
$value = sprintf($format_string, $value);
}
// Create the HTML
$html = '<span class="' . $class .
'">';
if ($show_link)
{
$html .= '<a href="' . $link_url .
'">';
}
$html .= $value;
if ($show_link)
{
$html .= '</a>';
}
$html .= '</span>';
return $html;
}
/**
* Method to get the field options.
*
* @return array The field option objects.
*/
protected function getOptions()
{
$options = array();
// Initialize some field attributes.
$key = $this->element['key_field'] ? (string)
$this->element['key_field'] : 'value';
$value = $this->element['value_field'] ? (string)
$this->element['value_field'] : (string)
$this->element['name'];
$translate = $this->element['translate'] ? (string)
$this->element['translate'] : false;
$applyAccess = $this->element['apply_access'] ? (string)
$this->element['apply_access'] : 'false';
$modelName = (string) $this->element['model'];
$nonePlaceholder = (string) $this->element['none'];
if (!empty($nonePlaceholder))
{
$options[] = JHtml::_('select.option', null,
JText::_($nonePlaceholder));
}
// Process field atrtibutes
$applyAccess = strtolower($applyAccess);
$applyAccess = in_array($applyAccess, array('yes',
'on', 'true', '1'));
// Explode model name into model name and prefix
$parts = FOFInflector::explode($modelName);
$mName = ucfirst(array_pop($parts));
$mPrefix = FOFInflector::implode($parts);
// Get the model object
$config = array('savestate' => 0);
$model = FOFModel::getTmpInstance($mName, $mPrefix, $config);
if ($applyAccess)
{
$model->applyAccessFiltering();
}
// Process state variables
foreach ($this->element->children() as $stateoption)
{
// Only add <option /> elements.
if ($stateoption->getName() != 'state')
{
continue;
}
$stateKey = (string) $stateoption['key'];
$stateValue = (string) $stateoption;
$model->setState($stateKey, $stateValue);
}
// Set the query and get the result list.
$items = $model->getItemList(true);
// Build the field options.
if (!empty($items))
{
foreach ($items as $item)
{
if ($translate == true)
{
$options[] = JHtml::_('select.option', $item->$key,
JText::_($item->$value));
}
else
{
$options[] = JHtml::_('select.option', $item->$key,
$item->$value);
}
}
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
/**
* Replace string with tags that reference fields
*
* @param string $text Text to process
*
* @return string Text with tags replace
*/
protected function parseFieldTags($text)
{
$ret = $text;
// Replace [ITEM:ID] in the URL with the item's key value (usually:
// the auto-incrementing numeric ID)
$keyfield = $this->item->getKeyName();
$replace = $this->item->$keyfield;
$ret = str_replace('[ITEM:ID]', $replace, $ret);
// Replace the [ITEMID] in the URL with the current Itemid parameter
$ret = str_replace('[ITEMID]',
JFactory::getApplication()->input->getInt('Itemid', 0),
$ret);
// Replace other field variables in the URL
$fields = $this->item->getTableFields();
foreach ($fields as $fielddata)
{
$fieldname = $fielddata->Field;
if (empty($fieldname))
{
$fieldname = $fielddata->column_name;
}
$search = '[ITEM:' . strtoupper($fieldname) .
']';
$replace = $this->item->$fieldname;
$ret = str_replace($search, $replace, $ret);
}
return $ret;
}
}
field/ordering.php000064400000013324147362604440010166 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Form Field class for FOF
* Renders the row ordering interface checkbox in browse views
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldOrdering extends JFormField implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Method to get the field input markup for this field type.
*
* @since 2.0
*
* @return string The field input markup.
*/
protected function getInput()
{
$html = array();
$attr = '';
// Initialize some field attributes.
$attr .= !empty($this->class) ? ' class="' .
$this->class . '"' : '';
$attr .= $this->disabled ? ' disabled' : '';
$attr .= !empty($this->size) ? ' size="' .
$this->size . '"' : '';
// Initialize JavaScript field attributes.
$attr .= !empty($this->onchange) ? ' onchange="' .
$this->onchange . '"' : '';
$this->item = $this->form->getModel()->getItem();
$keyfield = $this->item->getKeyName();
$itemId = $this->item->$keyfield;
$query = $this->getQuery();
// Create a read-only list (no name) with a hidden input to store the
value.
if ($this->readonly)
{
$html[] = JHtml::_('list.ordering', '', $query,
trim($attr), $this->value, $itemId ? 0 : 1);
$html[] = '<input type="hidden" name="' .
$this->name . '" value="' . $this->value .
'"/>';
}
else
{
// Create a regular list.
$html[] = JHtml::_('list.ordering', $this->name, $query,
trim($attr), $this->value, $itemId ? 0 : 1);
}
return implode($html);
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
throw new Exception(__CLASS__ . ' cannot be used in single item
display forms');
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
if (!($this->item instanceof FOFTable))
{
throw new Exception(__CLASS__ . ' needs a FOFTable to act
upon');
}
$class = isset($this->element['class']) ?
$this->element['class'] : 'input-mini';
$icon = isset($this->element['icon']) ?
$this->element['icon'] : 'icon-menu';
$html = '';
$view = $this->form->getView();
$ordering = $view->getLists()->order == 'ordering';
if (!$view->hasAjaxOrderingSupport())
{
// Ye olde Joomla! 2.5 method
$disabled = $ordering ? '' :
'disabled="disabled"';
$html .= '<span>';
$html .= $view->pagination->orderUpIcon($this->rowid, true,
'orderup', 'Move Up', $ordering);
$html .= '</span><span>';
$html .= $view->pagination->orderDownIcon($this->rowid,
$view->pagination->total, true, 'orderdown', 'Move
Down', $ordering);
$html .= '</span>';
$html .= '<input type="text" name="order[]"
size="5" value="' . $this->value . '"
' . $disabled;
$html .= 'class="text-area-order" style="text-align:
center" />';
}
else
{
// The modern drag'n'drop method
if ($view->getPerms()->editstate)
{
$disableClassName = '';
$disabledLabel = '';
$hasAjaxOrderingSupport = $view->hasAjaxOrderingSupport();
if (!$hasAjaxOrderingSupport['saveOrder'])
{
$disabledLabel = JText::_('JORDERINGDISABLED');
$disableClassName = 'inactive tip-top';
}
$orderClass = $ordering ? 'order-enabled' :
'order-disabled';
$html .= '<div class="' . $orderClass .
'">';
$html .= '<span class="sortable-handler ' .
$disableClassName . '" title="' . $disabledLabel .
'" rel="tooltip">';
$html .= '<i class="' . $icon .
'"></i>';
$html .= '</span>';
if ($ordering)
{
$html .= '<input type="text"
name="order[]" size="5" class="' . $class .
' text-area-order" value="' . $this->value .
'" />';
}
$html .= '</div>';
}
else
{
$html .= '<span class="sortable-handler inactive"
>';
$html .= '<i class="' . $icon .
'"></i>';
$html .= '</span>';
}
}
return $html;
}
/**
* Builds the query for the ordering list.
*
* @since 2.3.2
*
* @return FOFDatabaseQuery The query for the ordering form field
*/
protected function getQuery()
{
$ordering = $this->name;
$title = $this->element['ordertitle'] ? (string)
$this->element['ordertitle'] :
$this->item->getColumnAlias('title');
$db = FOFPlatform::getInstance()->getDbo();
$query = $db->getQuery(true);
$query->select(array($db->quoteName($ordering, 'value'),
$db->quoteName($title, 'text')))
->from($db->quoteName($this->item->getTableName()))
->order($ordering);
return $query;
}
}
field/password.php000064400000004620147362604440010216 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('password');
/**
* Form Field class for the FOF framework
* Supports a one line text field.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldPassword extends JFormFieldPassword implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
field/plugins.php000064400000004663147362604440010044 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('plugins');
/**
* Form Field class for FOF
* Plugins installed on the site
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldPlugins extends JFormFieldPlugins implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
field/published.php000064400000011366147362604440010340 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
* @note This file has been modified by the Joomla! Project and no longer
reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for FOF
* Supports a generic list of options.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldPublished extends JFormFieldList implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Method to get the field options.
*
* @since 2.0
*
* @return array The field option objects.
*/
protected function getOptions()
{
$options = parent::getOptions();
if (!empty($options))
{
return $options;
}
// If no custom options were defined let's figure out which ones of
the
// defaults we shall use...
$config = array(
'published' => 1,
'unpublished' => 1,
'archived' => 0,
'trash' => 0,
'all' => 0,
);
$configMap = array(
'show_published' => array('published', 1),
'show_unpublished' => array('unpublished', 1),
'show_archived' => array('archived', 0),
'show_trash' => array('trash', 0),
'show_all' => array('all', 0),
);
foreach ($configMap as $attribute => $preferences)
{
list($configKey, $default) = $preferences;
switch (strtolower($this->element[$attribute]))
{
case 'true':
case '1':
case 'yes':
$config[$configKey] = true;
case 'false':
case '0':
case 'no':
$config[$configKey] = false;
default:
$config[$configKey] = $default;
}
}
if ($config['published'])
{
$stack[] = JHtml::_('select.option', '1',
JText::_('JPUBLISHED'));
}
if ($config['unpublished'])
{
$stack[] = JHtml::_('select.option', '0',
JText::_('JUNPUBLISHED'));
}
if ($config['archived'])
{
$stack[] = JHtml::_('select.option', '2',
JText::_('JARCHIVED'));
}
if ($config['trash'])
{
$stack[] = JHtml::_('select.option', '-2',
JText::_('JTRASHED'));
}
if ($config['all'])
{
$stack[] = JHtml::_('select.option', '*',
JText::_('JALL'));
}
return $stack;
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
if (!($this->item instanceof FOFTable))
{
throw new Exception(__CLASS__ . ' needs a FOFTable to act
upon');
}
// Initialise
$prefix = '';
$checkbox = 'cb';
$publish_up = null;
$publish_down = null;
$enabled = true;
// Get options
if ($this->element['prefix'])
{
$prefix = (string) $this->element['prefix'];
}
if ($this->element['checkbox'])
{
$checkbox = (string) $this->element['checkbox'];
}
if ($this->element['publish_up'])
{
$publish_up = (string) $this->element['publish_up'];
}
if ($this->element['publish_down'])
{
$publish_down = (string) $this->element['publish_down'];
}
// @todo Enforce ACL checks to determine if the field should be enabled
or not
// Get the HTML
return JHTML::_('jgrid.published', $this->value,
$this->rowid, $prefix, $enabled, $checkbox, $publish_up, $publish_down);
}
}
field/radio.php000064400000004644147362604440007460 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('radio');
/**
* Form Field class for FOF
* Radio selection list
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldRadio extends JFormFieldRadio implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
field/relation.php000064400000011564147362604440010176 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Form Field class for FOF
* Relation list
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldRelation extends FOFFormFieldList
{
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic() {
return $this->getRepeatable();
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : $this->id;
$relationclass = $this->element['relationclass'] ? (string)
$this->element['relationclass'] : '';
$value_field = $this->element['value_field'] ? (string)
$this->element['value_field'] : 'title';
$translate = $this->element['translate'] ? (string)
$this->element['translate'] : false;
$link_url = $this->element['url'] ? (string)
$this->element['url'] : false;
if (!($link_url && $this->item instanceof FOFTable))
{
$link_url = false;
}
if ($this->element['empty_replacement'])
{
$empty_replacement = (string)
$this->element['empty_replacement'];
}
$relationName = FOFInflector::pluralize($this->name);
$relations =
$this->item->getRelations()->getMultiple($relationName);
foreach ($relations as $relation) {
$html = '<span class="' . $relationclass .
'">';
if ($link_url)
{
$keyfield = $relation->getKeyName();
$this->_relationId = $relation->$keyfield;
$url = $this->parseFieldTags($link_url);
$html .= '<a href="' . $url . '">';
}
$value = $relation->get($relation->getColumnAlias($value_field));
// Get the (optionally formatted) value
if (!empty($empty_replacement) && empty($value))
{
$value = JText::_($empty_replacement);
}
if ($translate == true)
{
$html .= JText::_($value);
}
else
{
$html .= $value;
}
if ($link_url)
{
$html .= '</a>';
}
$html .= '</span>';
$rels[] = $html;
}
$html = '<span class="' . $class .
'">';
$html .= implode(', ', $rels);
$html .= '</span>';
return $html;
}
/**
* Method to get the field options.
*
* @return array The field option objects.
*/
protected function getOptions()
{
$options = array();
$this->value = array();
$value_field = $this->element['value_field'] ? (string)
$this->element['value_field'] : 'title';
$input = new FOFInput;
$component = ucfirst(str_replace('com_', '',
$input->getString('option')));
$view = ucfirst($input->getString('view'));
$relation = FOFInflector::pluralize((string)
$this->element['name']);
$model = FOFModel::getTmpInstance(ucfirst($relation), $component .
'Model');
$table = $model->getTable();
$key = $table->getKeyName();
$value = $table->getColumnAlias($value_field);
foreach ($model->getItemList(true) as $option)
{
$options[] = JHtml::_('select.option', $option->$key,
$option->$value);
}
if ($id = FOFModel::getAnInstance($view)->getId())
{
$table = FOFTable::getInstance($view, $component . 'Table');
$table->load($id);
$relations = $table->getRelations()->getMultiple($relation);
foreach ($relations as $item)
{
$this->value[] = $item->getId();
}
}
return $options;
}
/**
* Replace string with tags that reference fields
*
* @param string $text Text to process
*
* @return string Text with tags replace
*/
protected function parseFieldTags($text)
{
$ret = $text;
// Replace [ITEM:ID] in the URL with the item's key value (usually:
// the auto-incrementing numeric ID)
$keyfield = $this->item->getKeyName();
$replace = $this->item->$keyfield;
$ret = str_replace('[ITEM:ID]', $replace, $ret);
// Replace the [ITEMID] in the URL with the current Itemid parameter
$ret = str_replace('[ITEMID]',
JFactory::getApplication()->input->getInt('Itemid', 0),
$ret);
// Replace the [RELATION:ID] in the URL with the relation's key
value
$ret = str_replace('[RELATION:ID]', $this->_relationId,
$ret);
// Replace other field variables in the URL
$fields = $this->item->getTableFields();
foreach ($fields as $fielddata)
{
$fieldname = $fielddata->Field;
if (empty($fieldname))
{
$fieldname = $fielddata->column_name;
}
$search = '[ITEM:' . strtoupper($fieldname) .
']';
$replace = $this->item->$fieldname;
$ret = str_replace($search, $replace, $ret);
}
return $ret;
}
}
field/rules.php000064400000062321147362604440007510 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('rules');
/**
* Form Field class for FOF
* Joomla! ACL Rules
*
* @package FrameworkOnFramework
* @since 2.1
*/
class FOFFormFieldRules extends JFormFieldRules implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
// This field cannot provide a static display
case 'static':
return '';
break;
// This field cannot provide a repeateable display
case 'repeatable':
return '';
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
return '';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.1
*
* @return string The field HTML
*/
public function getRepeatable()
{
return '';
}
/**
* At the timing of this writing (2013-12-03), the Joomla
"rules" field is buggy. When you are
* dealing with a new record it gets the default permissions from the root
asset node, which
* is fine for the default permissions of Joomla articles, but unsuitable
for third party software.
* We had to copy & paste the whole code, since we can't
"inject" the correct asset id if one is
* not found. Our fixes are surrounded by `FOF Library fix` remarks.
*
* @return string The input field's HTML for this field type
*/
public function getInput()
{
if (version_compare(JVERSION, '3.0', 'ge'))
{
return $this->getInput3x();
}
else
{
return $this->getInput25();
}
}
protected function getInput25()
{
JHtml::_('behavior.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 = FOFPlatform::getInstance()->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())
{
JError::raiseNotice(500, $error);
}
}
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);
// ==== FOF Library fix - Start ====
// If there is no assetId (let's say we are dealing with a
new record), let's ask the table
// to give it to us. Here you should implement your logic (ie
getting default permissions from
// the component or from the category)
if(!$assetId)
{
$table = $this->form->getModel()->getTable();
$assetId = $table->getAssetParentId();
}
// ==== FOF Library fix - End ====
}
// Use the compact form for the content rules (deprecated).
//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();
// Build the form control.
$curLevel = 0;
// 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">';
// Start a row for each user group.
foreach ($groups as $group)
{
$difLevel = $group->level - $curLevel;
if ($difLevel > 0)
{
$html[] = '<li><ul>';
}
elseif ($difLevel < 0)
{
$html[] = str_repeat('</ul></li>',
-$difLevel);
}
$html[] = '<li>';
$html[] = '<div class="panel">';
$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
pane-hide">';
$html[] = '<div class="mypanel">';
$html[] = '<table
class="group-rules">';
$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 class="hasTip"
for="' . $this->id . '_' . $action->name .
'_' . $group->value . '" 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 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="icon-16-unset">' .
JText::_('JLIB_RULES_NOT_ALLOWED') . '</span>';
}
elseif ($inheritedRule === true)
{
$html[] = '<span
class="icon-16-allowed">' .
JText::_('JLIB_RULES_ALLOWED') . '</span>';
}
elseif ($inheritedRule === false)
{
if ($assetRule === false)
{
$html[] = '<span
class="icon-16-denied">' .
JText::_('JLIB_RULES_NOT_ALLOWED') . '</span>';
}
else
{
$html[] = '<span
class="icon-16-denied"><span
class="icon-16-locked">' .
JText::_('JLIB_RULES_NOT_ALLOWED_LOCKED')
.
'</span></span>';
}
}
}
elseif (!empty($component))
{
$html[] = '<span
class="icon-16-allowed"><span
class="icon-16-locked">' .
JText::_('JLIB_RULES_ALLOWED_ADMIN')
. '</span></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="icon-16-allowed">' .
JText::_('JLIB_RULES_ALLOWED') . '</span>';
}
elseif ($inheritedRule === false)
{
// Other actions cannot be changed.
$html[] = '<span
class="icon-16-denied"><span
class="icon-16-locked">'
.
JText::_('JLIB_RULES_NOT_ALLOWED_ADMIN_CONFLICT') .
'</span></span>';
}
else
{
$html[] = '<span
class="icon-16-allowed"><span
class="icon-16-locked">' .
JText::_('JLIB_RULES_ALLOWED_ADMIN')
. '</span></span>';
}
}
$html[] = '</td>';
}
$html[] = '</tr>';
}
$html[] = '</tbody>';
$html[] = '</table></div>';
$html[] = '</div></div>';
$html[] = '</li>';
}
$html[] = str_repeat('</ul></li>',
$curLevel);
$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>';
$js = "window.addEvent('domready', function(){ new
Fx.Accordion($$('div#permissions-sliders.pane-sliders .panel
h3.pane-toggler'),"
. "$$('div#permissions-sliders.pane-sliders .panel
div.pane-slider'), {onActive: function(toggler, i)
{toggler.addClass('pane-toggler-down');"
.
"toggler.removeClass('pane-toggler');i.addClass('pane-down');i.removeClass('pane-hide');Cookie.write('jpanesliders_permissions-sliders"
. $component
. "',$$('div#permissions-sliders.pane-sliders
.panel h3').indexOf(toggler));},"
. "onBackground: function(toggler, i)
{toggler.addClass('pane-toggler');toggler.removeClass('pane-toggler-down');i.addClass('pane-hide');"
. "i.removeClass('pane-down');}, duration: 300,
display: "
. JRequest::getInt('jpanesliders_permissions-sliders'
. $component, 0, 'cookie') . ", show: "
. JRequest::getInt('jpanesliders_permissions-sliders'
. $component, 0, 'cookie') . ", alwaysHide:true, opacity:
false}); });";
JFactory::getDocument()->addScriptDeclaration($js);
return implode("\n", $html);
}
protected function getInput3x()
{
JHtml::_('bootstrap.tooltip');
// Initialise some field attributes.
$section = $this->section;
$component = $this->component;
$assetField = $this->assetField;
// 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 = FOFPlatform::getInstance()->getDbo();
$query = $db->getQuery(true)
->select($db->quoteName('id'))
->from($db->quoteName('#__assets'))
->where($db->quoteName('name') .
' = ' . $db->quote($component));
$assetId = (int) $db->setQuery($query)->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);
// ==== FOF Library fix - Start ====
// If there is no assetId (let's say we are dealing with a
new record), let's ask the table
// to give it to us. Here you should implement your logic (ie
getting default permissions from
// the component or from the category)
if(!$assetId)
{
$table = $this->form->getModel()->getTable();
$assetId = $table->getAssetParentId();
}
// ==== FOF Library fix - End ====
}
// 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);
}
}
field/selectrow.php000064400000005575147362604440010375 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Form Field class for FOF
* Renders the checkbox in browse views which allows you to select rows
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldSelectrow extends JFormField implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Method to get the field input markup for this field type.
*
* @since 2.0
*
* @return string The field input markup.
*/
protected function getInput()
{
throw new Exception(__CLASS__ . ' cannot be used in input
forms');
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
throw new Exception(__CLASS__ . ' cannot be used in single item
display forms');
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
if (!($this->item instanceof FOFTable))
{
throw new Exception(__CLASS__ . ' needs a FOFTable to act
upon');
}
// Is this record checked out?
$checked_out = false;
$locked_by_field =
$this->item->getColumnAlias('locked_by');
$myId = JFactory::getUser()->get('id', 0);
if (property_exists($this->item, $locked_by_field))
{
$locked_by = $this->item->$locked_by_field;
$checked_out = ($locked_by != 0 && $locked_by != $myId);
}
// Get the key id for this record
$key_field = $this->item->getKeyName();
$key_id = $this->item->$key_field;
// Get the HTML
return JHTML::_('grid.id', $this->rowid, $key_id,
$checked_out);
}
}
field/sessionhandler.php000064400000004703147362604440011377
0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('sessionhandler');
/**
* Form Field class for FOF
* Joomla! session handlers
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldSessionhandler extends JFormFieldSessionHandler
implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
field/spacer.php000064400000003734147362604440007636 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('spacer');
/**
* Form Field class for the FOF framework
* Spacer used between form elements
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldSpacer extends JFormFieldSpacer implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
return $this->getInput();
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
return $this->getInput();
}
}
field/sql.php000064400000004700147362604440007152 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('sql');
/**
* Form Field class for FOF
* Radio selection listGeneric list from an SQL statement
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldSql extends JFormFieldSql implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(),
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
field/tag.php000064400000011633147362604440007131 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('tag');
/**
* Form Field class for FOF
* Tag Fields
*
* @package FrameworkOnFramework
* @since 2.1
*/
class FOFFormFieldTag extends JFormFieldTag implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Method to get a list of tags
*
* @return array The field option objects.
*
* @since 3.1
*/
protected function getOptions()
{
$options = array();
$published = $this->element['published']?
$this->element['published'] : array(0,1);
$db = FOFPlatform::getInstance()->getDbo();
$query = $db->getQuery(true)
->select('DISTINCT a.id AS value, a.path, a.title AS text,
a.level, a.published, a.lft')
->from('#__tags AS a')
->join('LEFT', $db->quoteName('#__tags') .
' AS b ON a.lft > b.lft AND a.rgt < b.rgt');
if ($this->item instanceof FOFTable)
{
$item = $this->item;
}
else
{
$item = $this->form->getModel()->getItem();
}
if ($item instanceof FOFTable)
{
// Fake value for selected tags
$keyfield = $item->getKeyName();
$content_id = $item->$keyfield;
$type = $item->getContentType();
$selected_query = $db->getQuery(true);
$selected_query
->select('tag_id')
->from('#__contentitem_tag_map')
->where('content_item_id = ' . (int) $content_id)
->where('type_alias = ' . $db->quote($type));
$db->setQuery($selected_query);
$this->value = $db->loadColumn();
}
// Filter language
if (!empty($this->element['language']))
{
$query->where('a.language = ' .
$db->quote($this->element['language']));
}
$query->where($db->qn('a.lft') . ' > 0');
// Filter to only load active items
// Filter on the published state
if (is_numeric($published))
{
$query->where('a.published = ' . (int) $published);
}
elseif (is_array($published))
{
FOFUtilsArray::toInteger($published);
$query->where('a.published IN (' . implode(',',
$published) . ')');
}
$query->order('a.lft ASC');
// Get the options.
$db->setQuery($query);
try
{
$options = $db->loadObjectList();
}
catch (RuntimeException $e)
{
return false;
}
// Prepare nested data
if ($this->isNested())
{
$this->prepareOptionsNested($options);
}
else
{
$options = JHelperTags::convertPathsToNames($options);
}
return $options;
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$translate = $this->element['translate'] ? (string)
$this->element['translate'] : false;
$options = $this->getOptions();
$html = '';
foreach ($options as $option) {
$html .= '<span>';
if ($translate == true)
{
$html .= JText::_($option->text);
}
else
{
$html .= $option->text;
}
$html .= '</span>';
}
return '<span id="' . $this->id . '"
class="' . $class . '">' .
$html .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.1
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$translate = $this->element['translate'] ? (string)
$this->element['translate'] : false;
$options = $this->getOptions();
$html = '';
foreach ($options as $option) {
$html .= '<span>';
if ($translate == true)
{
$html .= JText::_($option->text);
}
else
{
$html .= $option->text;
}
$html .= '</span>';
}
return '<span class="' . $this->id . ' ' .
$class . '">' .
$html .
'</span>';
}
}
field/tel.php000064400000006767147362604440007156 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('tel');
/**
* Form Field class for the FOF framework
* Supports a URL text field.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldTel extends JFormFieldTel implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? '
class="' . (string) $this->element['class'] .
'"' : '';
$dolink = $this->element['show_link'] == 'true';
$empty_replacement = '';
if ($this->element['empty_replacement'])
{
$empty_replacement = (string)
$this->element['empty_replacement'];
}
if (!empty($empty_replacement) && empty($this->value))
{
$this->value = JText::_($empty_replacement);
}
$innerHtml = htmlspecialchars($this->value, ENT_COMPAT,
'UTF-8');
if ($dolink)
{
$innerHtml = '<a href="tel:' . $innerHtml .
'">' .
$innerHtml . '</a>';
}
return '<span id="' . $this->id . '"
' . $class . '>' .
$innerHtml .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
// Initialise
$class = $this->id;
$show_link = false;
$empty_replacement = '';
$link_url = 'tel:' . htmlspecialchars($this->value,
ENT_COMPAT, 'UTF-8');
// Get field parameters
if ($this->element['class'])
{
$class = ' ' . (string) $this->element['class'];
}
if ($this->element['show_link'] == 'true')
{
$show_link = true;
}
if ($this->element['empty_replacement'])
{
$empty_replacement = (string)
$this->element['empty_replacement'];
}
// Get the (optionally formatted) value
if (!empty($empty_replacement) && empty($this->value))
{
$this->value = JText::_($empty_replacement);
}
$value = htmlspecialchars($this->value, ENT_COMPAT,
'UTF-8');
// Create the HTML
$html = '<span class="' . $class .
'">';
if ($show_link)
{
$html .= '<a href="' . $link_url .
'">';
}
$html .= $value;
if ($show_link)
{
$html .= '</a>';
}
$html .= '</span>';
return $html;
}
}
field/text.php000064400000012303147362604440007335 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('text');
/**
* Form Field class for the FOF framework
* Supports a one line text field.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldText extends JFormFieldText implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
$empty_replacement = '';
if ($this->element['empty_replacement'])
{
$empty_replacement = (string)
$this->element['empty_replacement'];
}
if (!empty($empty_replacement) && empty($this->value))
{
$this->value = JText::_($empty_replacement);
}
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
// Initialise
$class = $this->id;
$format_string = '';
$format_if_not_empty = false;
$parse_value = false;
$show_link = false;
$link_url = '';
$empty_replacement = '';
// Get field parameters
if ($this->element['class'])
{
$class = (string) $this->element['class'];
}
if ($this->element['format'])
{
$format_string = (string) $this->element['format'];
}
if ($this->element['show_link'] == 'true')
{
$show_link = true;
}
if ($this->element['format_if_not_empty'] ==
'true')
{
$format_if_not_empty = true;
}
if ($this->element['parse_value'] == 'true')
{
$parse_value = true;
}
if ($this->element['url'])
{
$link_url = $this->element['url'];
}
else
{
$show_link = false;
}
if ($show_link && ($this->item instanceof FOFTable))
{
$link_url = $this->parseFieldTags($link_url);
}
else
{
$show_link = false;
}
if ($this->element['empty_replacement'])
{
$empty_replacement = (string)
$this->element['empty_replacement'];
}
// Get the (optionally formatted) value
$value = $this->value;
if (!empty($empty_replacement) && empty($this->value))
{
$value = JText::_($empty_replacement);
}
if ($parse_value)
{
$value = $this->parseFieldTags($value);
}
if (!empty($format_string) && (!$format_if_not_empty ||
($format_if_not_empty && !empty($this->value))))
{
$format_string = $this->parseFieldTags($format_string);
$value = sprintf($format_string, $value);
}
else
{
$value = htmlspecialchars($value, ENT_COMPAT, 'UTF-8');
}
// Create the HTML
$html = '<span class="' . $class .
'">';
if ($show_link)
{
$html .= '<a href="' . $link_url .
'">';
}
$html .= $value;
if ($show_link)
{
$html .= '</a>';
}
$html .= '</span>';
return $html;
}
/**
* Replace string with tags that reference fields
*
* @param string $text Text to process
*
* @return string Text with tags replace
*/
protected function parseFieldTags($text)
{
$ret = $text;
// Replace [ITEM:ID] in the URL with the item's key value (usually:
// the auto-incrementing numeric ID)
$keyfield = $this->item->getKeyName();
$replace = $this->item->$keyfield;
$ret = str_replace('[ITEM:ID]', $replace, $ret);
// Replace the [ITEMID] in the URL with the current Itemid parameter
$ret = str_replace('[ITEMID]',
JFactory::getApplication()->input->getInt('Itemid', 0),
$ret);
// Replace other field variables in the URL
$fields = $this->item->getTableFields();
foreach ($fields as $fielddata)
{
$fieldname = $fielddata->Field;
if (empty($fieldname))
{
$fieldname = $fielddata->column_name;
}
$search = '[ITEM:' . strtoupper($fieldname) .
']';
$replace = $this->item->$fieldname;
$ret = str_replace($search, $replace, $ret);
}
return $ret;
}
}
field/textarea.php000064400000004240147362604440010167 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('textarea');
/**
* Form Field class for the FOF framework
* Supports a text area
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldTextarea extends JFormFieldTextarea implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
return '<div id="' . $this->id . '" '
. $class . '>' .
htmlspecialchars(nl2br($this->value), ENT_COMPAT, 'UTF-8')
.
'</div>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
return $this->getStatic();
}
}
field/timezone.php000064400000005023147362604440010204 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('timezone');
/**
* Form Field class for FOF
* Supports a generic list of options.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldTimezone extends JFormFieldTimezone implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$selected =
FOFFormFieldGroupedlist::getOptionName($this->getOptions(),
$this->value);
if (is_null($selected))
{
$selected = array(
'group' => '',
'item' => ''
);
}
return '<span id="' . $this->id . '-group"
class="fof-groupedlist-group ' . $class . '>' .
htmlspecialchars($selected['group'], ENT_COMPAT,
'UTF-8') .
'</span>' .
'<span id="' . $this->id . '-item"
class="fof-groupedlist-item ' . $class . '>' .
htmlspecialchars($selected['item'], ENT_COMPAT,
'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
return $this->getStatic();
}
}
field/title.php000064400000003040147362604440007470 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('text');
/**
* Form Field class for the FOF framework
* Supports a title field with an optional slug display below it.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldTitle extends FOFFormFieldText implements FOFFormField
{
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
// Initialise
$slug_format = '(%s)';
$slug_class = 'small';
// Get field parameters
if ($this->element['slug_field'])
{
$slug_field = (string) $this->element['slug_field'];
}
else
{
$slug_field = $this->item->getColumnAlias('slug');
}
if ($this->element['slug_format'])
{
$slug_format = (string) $this->element['slug_format'];
}
if ($this->element['slug_class'])
{
$slug_class = (string) $this->element['slug_class'];
}
// Get the regular display
$html = parent::getRepeatable();
$slug = $this->item->$slug_field;
$html .= '<br />' . '<span class="' .
$slug_class . '">';
$html .= JText::sprintf($slug_format, $slug);
$html .= '</span>';
return $html;
}
}
field/url.php000064400000006753147362604440007167 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('url');
/**
* Form Field class for the FOF framework
* Supports a URL text field.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldUrl extends JFormFieldUrl implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? '
class="' . (string) $this->element['class'] .
'"' : '';
$dolink = $this->element['show_link'] == 'true';
$empty_replacement = '';
if ($this->element['empty_replacement'])
{
$empty_replacement = (string)
$this->element['empty_replacement'];
}
if (!empty($empty_replacement) && empty($this->value))
{
$this->value = JText::_($empty_replacement);
}
$innerHtml = htmlspecialchars($this->value, ENT_COMPAT,
'UTF-8');
if ($dolink)
{
$innerHtml = '<a href="' . $innerHtml .
'">' .
$innerHtml . '</a>';
}
return '<span id="' . $this->id . '"
' . $class . '>' .
$innerHtml .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
// Initialise
$class = $this->id;
$show_link = false;
$empty_replacement = '';
$link_url = htmlspecialchars($this->value, ENT_COMPAT,
'UTF-8');
// Get field parameters
if ($this->element['class'])
{
$class .= ' ' . (string) $this->element['class'];
}
if ($this->element['show_link'] == 'true')
{
$show_link = true;
}
if ($this->element['empty_replacement'])
{
$empty_replacement = (string)
$this->element['empty_replacement'];
}
// Get the (optionally formatted) value
if (!empty($empty_replacement) && empty($this->value))
{
$this->value = JText::_($empty_replacement);
}
$value = htmlspecialchars($this->value, ENT_COMPAT,
'UTF-8');
// Create the HTML
$html = '<span class="' . $class .
'">';
if ($show_link)
{
$html .= '<a href="' . $link_url .
'">';
}
$html .= $value;
if ($show_link)
{
$html .= '</a>';
}
$html .= '</span>';
return $html;
}
}
field/user.php000064400000015557147362604440007345 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JFormHelper::loadFieldClass('user');
/**
* Form Field class for the FOF framework
* A user selection box / display field
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldUser extends JFormFieldUser implements FOFFormField
{
protected $static;
protected $repeatable;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
// Initialise
$show_username = true;
$show_email = false;
$show_name = false;
$show_id = false;
$class = '';
// Get the field parameters
if ($this->element['class'])
{
$class = ' class="' . (string)
$this->element['class'] . '"';
}
if ($this->element['show_username'] == 'false')
{
$show_username = false;
}
if ($this->element['show_email'] == 'true')
{
$show_email = true;
}
if ($this->element['show_name'] == 'true')
{
$show_name = true;
}
if ($this->element['show_id'] == 'true')
{
$show_id = true;
}
// Get the user record
$user = JFactory::getUser($this->value);
// Render the HTML
$html = '<div id="' . $this->id . '"
' . $class . '>';
if ($show_username)
{
$html .= '<span
class="fof-userfield-username">' . $user->username .
'</span>';
}
if ($show_id)
{
$html .= '<span class="fof-userfield-id">' .
$user->id . '</span>';
}
if ($show_name)
{
$html .= '<span class="fof-userfield-name">' .
$user->name . '</span>';
}
if ($show_email)
{
$html .= '<span class="fof-userfield-email">'
. $user->email . '</span>';
}
$html .= '</div>';
return $html;
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
// Initialise
$show_username = true;
$show_email = true;
$show_name = true;
$show_id = true;
$show_avatar = true;
$show_link = false;
$link_url = null;
$avatar_method = 'gravatar';
$avatar_size = 64;
$class = '';
// Get the user record
$user = JFactory::getUser($this->value);
// Get the field parameters
if ($this->element['class'])
{
$class = ' class="' . (string)
$this->element['class'] . '"';
}
if ($this->element['show_username'] == 'false')
{
$show_username = false;
}
if ($this->element['show_email'] == 'false')
{
$show_email = false;
}
if ($this->element['show_name'] == 'false')
{
$show_name = false;
}
if ($this->element['show_id'] == 'false')
{
$show_id = false;
}
if ($this->element['show_avatar'] == 'false')
{
$show_avatar = false;
}
if ($this->element['avatar_method'])
{
$avatar_method =
strtolower($this->element['avatar_method']);
}
if ($this->element['avatar_size'])
{
$avatar_size = $this->element['avatar_size'];
}
if ($this->element['show_link'] == 'true')
{
$show_link = true;
}
if ($this->element['link_url'])
{
$link_url = $this->element['link_url'];
}
else
{
if (FOFPlatform::getInstance()->isBackend())
{
// If no link is defined in the back-end, assume the user edit
// link in the User Manager component
$link_url =
'index.php?option=com_users&task=user.edit&id=[USER:ID]';
}
else
{
// If no link is defined in the front-end, we can't create a
// default link. Therefore, show no link.
$show_link = false;
}
}
// Post-process the link URL
if ($show_link)
{
$replacements = array(
'[USER:ID]' => $user->id,
'[USER:USERNAME]' => $user->username,
'[USER:EMAIL]' => $user->email,
'[USER:NAME]' => $user->name,
);
foreach ($replacements as $key => $value)
{
$link_url = str_replace($key, $value, $link_url);
}
}
// Get the avatar image, if necessary
if ($show_avatar)
{
$avatar_url = '';
if ($avatar_method == 'plugin')
{
// Use the user plugins to get an avatar
FOFPlatform::getInstance()->importPlugin('user');
$jResponse =
FOFPlatform::getInstance()->runPlugins('onUserAvatar',
array($user, $avatar_size));
if (!empty($jResponse))
{
foreach ($jResponse as $response)
{
if ($response)
{
$avatar_url = $response;
}
}
}
if (empty($avatar_url))
{
$show_avatar = false;
}
}
else
{
// Fall back to the Gravatar method
$md5 = md5($user->email);
if (FOFPlatform::getInstance()->isCli())
{
$scheme = 'http';
}
else
{
$scheme = JURI::getInstance()->getScheme();
}
if ($scheme == 'http')
{
$avatar_url = 'http://www.gravatar.com/avatar/' . $md5 .
'.jpg?s='
. $avatar_size . '&d=mm';
}
else
{
$avatar_url = 'https://secure.gravatar.com/avatar/' . $md5 .
'.jpg?s='
. $avatar_size . '&d=mm';
}
}
}
// Generate the HTML
$html = '<div id="' . $this->id . '"
' . $class . '>';
if ($show_avatar)
{
$html .= '<img src="' . $avatar_url . '"
align="left" class="fof-usersfield-avatar" />';
}
if ($show_link)
{
$html .= '<a href="' . $link_url .
'">';
}
if ($show_username)
{
$html .= '<span
class="fof-usersfield-username">' . $user->username
. '</span>';
}
if ($show_id)
{
$html .= '<span class="fof-usersfield-id">' .
$user->id
. '</span>';
}
if ($show_name)
{
$html .= '<span class="fof-usersfield-name">'
. $user->name
. '</span>';
}
if ($show_email)
{
$html .= '<span class="fof-usersfield-email">'
. $user->email
. '</span>';
}
if ($show_link)
{
$html .= '</a>';
}
$html .= '</div>';
return $html;
}
}
field/usergroup.php000064400000006750147362604440010415 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('_JEXEC') or die;
JFormHelper::loadFieldClass('usergroup');
/**
* Form Field class for FOF
* Joomla! user groups
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormFieldUsergroup extends JFormFieldUsergroup implements
FOFFormField
{
protected $static;
protected $repeatable;
/** @var int A monotonically increasing number, denoting the row number in
a repeatable view */
public $rowid;
/** @var FOFTable The item being rendered in a repeatable form field */
public $item;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'static':
if (empty($this->static))
{
$this->static = $this->getStatic();
}
return $this->static;
break;
case 'repeatable':
if (empty($this->repeatable))
{
$this->repeatable = $this->getRepeatable();
}
return $this->repeatable;
break;
default:
return parent::__get($name);
}
}
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @since 2.0
*
* @return string The field HTML
*/
public function getStatic()
{
$class = $this->element['class'] ? ' class="'
. (string) $this->element['class'] . '"' :
'';
$params = $this->getOptions();
$db = FOFPlatform::getInstance()->getDbo();
$query = $db->getQuery(true);
$query->select('a.id AS value, a.title AS text');
$query->from('#__usergroups AS a');
$query->group('a.id, a.title');
$query->order('a.id ASC');
$query->order($query->qn('title') . ' ASC');
// Get the options.
$db->setQuery($query);
$options = $db->loadObjectList();
// If params is an array, push these options to the array
if (is_array($params))
{
$options = array_merge($params, $options);
}
// If all levels is allowed, push it into the array.
elseif ($params)
{
array_unshift($options, JHtml::_('select.option',
'', JText::_('JOPTION_ACCESS_SHOW_ALL_LEVELS')));
}
return '<span id="' . $this->id . '"
' . $class . '>' .
htmlspecialchars(FOFFormFieldList::getOptionName($options,
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @since 2.0
*
* @return string The field HTML
*/
public function getRepeatable()
{
$class = $this->element['class'] ? (string)
$this->element['class'] : '';
$db = FOFPlatform::getInstance()->getDbo();
$query = $db->getQuery(true);
$query->select('a.id AS value, a.title AS text');
$query->from('#__usergroups AS a');
$query->group('a.id, a.title');
$query->order('a.id ASC');
$query->order($query->qn('title') . ' ASC');
// Get the options.
$db->setQuery($query);
$options = $db->loadObjectList();
return '<span class="' . $this->id . ' ' .
$class . '">' .
htmlspecialchars(FOFFormFieldList::getOptionName($options,
$this->value), ENT_COMPAT, 'UTF-8') .
'</span>';
}
}
field.php000064400000001647147362604440006362 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic interface that a FOF form field class must implement
*
* @package FrameworkOnFramework
* @since 2.0
*/
interface FOFFormField
{
/**
* Get the rendering of this field type for static display, e.g. in a
single
* item view (typically a "read" task).
*
* @return string The field HTML
*
* @since 2.0
*/
public function getStatic();
/**
* Get the rendering of this field type for a repeatable (grid) display,
* e.g. in a view listing many item (typically a "browse" task)
*
* @return string The field HTML
*
* @since 2.0
*/
public function getRepeatable();
}
form.php000064400000037543147362604440006246 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
if (version_compare(JVERSION, '2.5.0', 'lt'))
{
jimport('joomla.form.form');
jimport('joomla.form.formfield');
jimport('joomla.form.formrule');
}
/**
* FOFForm is an extension to JForm which support not only edit views but
also
* browse (record list) and read (single record display) views based on XML
* forms.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFForm extends JForm
{
/**
* The model attached to this view
*
* @var FOFModel
*/
protected $model;
/**
* The view used to render this form
*
* @var FOFView
*/
protected $view;
/**
* Method to get an instance of a form.
*
* @param string $name The name of the form.
* @param string $data The name of an XML file or string to load as
the form definition.
* @param array $options An array of form options.
* @param bool $replace Flag to toggle whether form fields should be
replaced if a field
* already exists with the same group/name.
* @param bool|string $xpath An optional xpath to search for the
fields.
*
* @return object FOFForm instance.
*
* @since 2.0
* @throws InvalidArgumentException if no data provided.
* @throws RuntimeException if the form could not be loaded.
*/
public static function getInstance($name, $data = null, $options =
array(), $replace = true, $xpath = false)
{
// Reference to array with form instances
$forms = &self::$forms;
// Only instantiate the form if it does not already exist.
if (!isset($forms[$name]))
{
$data = trim($data);
if (empty($data))
{
throw new
InvalidArgumentException(sprintf('FOFForm::getInstance(name,
*%s*)', gettype($data)));
}
// Instantiate the form.
$forms[$name] = new FOFForm($name, $options);
// Load the data.
if (substr(trim($data), 0, 1) == '<')
{
if ($forms[$name]->load($data, $replace, $xpath) == false)
{
throw new RuntimeException('FOFForm::getInstance could not load
form');
}
}
else
{
if ($forms[$name]->loadFile($data, $replace, $xpath) == false)
{
throw new RuntimeException('FOFForm::getInstance could not load
file ' . $data . '.xml');
}
}
}
return $forms[$name];
}
/**
* Returns the value of an attribute of the form itself
*
* @param string $attribute The name of the attribute
* @param mixed $default Optional default value to return
*
* @return mixed
*
* @since 2.0
*/
public function getAttribute($attribute, $default = null)
{
$value = $this->xml->attributes()->$attribute;
if (is_null($value))
{
return $default;
}
else
{
return (string) $value;
}
}
/**
* Loads the CSS files defined in the form, based on its cssfiles
attribute
*
* @return void
*
* @since 2.0
*/
public function loadCSSFiles()
{
// Support for CSS files
$cssfiles = $this->getAttribute('cssfiles');
if (!empty($cssfiles))
{
$cssfiles = explode(',', $cssfiles);
foreach ($cssfiles as $cssfile)
{
FOFTemplateUtils::addCSS(trim($cssfile));
}
}
// Support for LESS files
$lessfiles = $this->getAttribute('lessfiles');
if (!empty($lessfiles))
{
$lessfiles = explode(',', $lessfiles);
foreach ($lessfiles as $def)
{
$parts = explode('||', $def, 2);
$lessfile = $parts[0];
$alt = (count($parts) > 1) ? trim($parts[1]) : null;
FOFTemplateUtils::addLESS(trim($lessfile), $alt);
}
}
}
/**
* Loads the Javascript files defined in the form, based on its jsfiles
attribute
*
* @return void
*
* @since 2.0
*/
public function loadJSFiles()
{
$jsfiles = $this->getAttribute('jsfiles');
if (empty($jsfiles))
{
return;
}
$jsfiles = explode(',', $jsfiles);
foreach ($jsfiles as $jsfile)
{
FOFTemplateUtils::addJS(trim($jsfile));
}
}
/**
* Returns a reference to the protected $data object, allowing direct
* access to and manipulation of the form's data.
*
* @return JRegistry The form's data registry
*
* @since 2.0
*/
public function getData()
{
return $this->data;
}
/**
* Attaches a FOFModel to this form
*
* @param FOFModel &$model The model to attach to the form
*
* @return void
*/
public function setModel(FOFModel &$model)
{
$this->model = $model;
}
/**
* Returns the FOFModel attached to this form
*
* @return FOFModel
*/
public function &getModel()
{
return $this->model;
}
/**
* Attaches a FOFView to this form
*
* @param FOFView &$view The view to attach to the form
*
* @return void
*/
public function setView(FOFView &$view)
{
$this->view = $view;
}
/**
* Returns the FOFView attached to this form
*
* @return FOFView
*/
public function &getView()
{
return $this->view;
}
/**
* Method to get an array of FOFFormHeader objects in the headerset.
*
* @return array The array of FOFFormHeader objects in the headerset.
*
* @since 2.0
*/
public function getHeaderset()
{
$fields = array();
$elements = $this->findHeadersByGroup();
// If no field elements were found return empty.
if (empty($elements))
{
return $fields;
}
// Build the result array from the found field elements.
foreach ($elements as $element)
{
// Get the field groups for the element.
$attrs = $element->xpath('ancestor::headers[@name]/@name');
$groups = array_map('strval', $attrs ? $attrs : array());
$group = implode('.', $groups);
// If the field is successfully loaded add it to the result array.
if ($field = $this->loadHeader($element, $group))
{
$fields[$field->id] = $field;
}
}
return $fields;
}
/**
* Method to get an array of <header /> elements from the form XML
document which are
* in a control group by name.
*
* @param mixed $group The optional dot-separated form group path
on which to find the fields.
* Null will return all fields. False will
return fields not in a group.
* @param boolean $nested True to also include fields in nested groups
that are inside of the
* group for which to find fields.
*
* @return mixed Boolean false on error or array of SimpleXMLElement
objects.
*
* @since 2.0
*/
protected function &findHeadersByGroup($group = null, $nested = false)
{
$false = false;
$fields = array();
// Make sure there is a valid JForm XML document.
if (!($this->xml instanceof SimpleXMLElement))
{
return $false;
}
// Get only fields in a specific group?
if ($group)
{
// Get the fields elements for a given group.
$elements = &$this->findHeader($group);
// Get all of the field elements for the fields elements.
foreach ($elements as $element)
{
// If there are field elements add them to the return result.
if ($tmp = $element->xpath('descendant::header'))
{
// If we also want fields in nested groups then just merge the arrays.
if ($nested)
{
$fields = array_merge($fields, $tmp);
}
// If we want to exclude nested groups then we need to check each
field.
else
{
$groupNames = explode('.', $group);
foreach ($tmp as $field)
{
// Get the names of the groups that the field is in.
$attrs =
$field->xpath('ancestor::headers[@name]/@name');
$names = array_map('strval', $attrs ? $attrs : array());
// If the field is in the specific group then add it to the return
list.
if ($names == (array) $groupNames)
{
$fields = array_merge($fields, array($field));
}
}
}
}
}
}
elseif ($group === false)
{
// Get only field elements not in a group.
$fields =
$this->xml->xpath('descendant::headers[not(@name)]/header |
descendant::headers[not(@name)]/headerset/header ');
}
else
{
// Get an array of all the <header /> elements.
$fields = $this->xml->xpath('//header');
}
return $fields;
}
/**
* Method to get a header field represented as a FOFFormHeader object.
*
* @param string $name The name of the header field.
* @param string $group The optional dot-separated form group path on
which to find the field.
* @param mixed $value The optional value to use as the default for
the field.
*
* @return mixed The FOFFormHeader object for the field or boolean false
on error.
*
* @since 2.0
*/
public function getHeader($name, $group = null, $value = null)
{
// Make sure there is a valid FOFForm XML document.
if (!($this->xml instanceof SimpleXMLElement))
{
return false;
}
// Attempt to find the field by name and group.
$element = $this->findHeader($name, $group);
// If the field element was not found return false.
if (!$element)
{
return false;
}
return $this->loadHeader($element, $group, $value);
}
/**
* Method to get a header field represented as an XML element object.
*
* @param string $name The name of the form field.
* @param string $group The optional dot-separated form group path on
which to find the field.
*
* @return mixed The XML element object for the field or boolean false
on error.
*
* @since 2.0
*/
protected function findHeader($name, $group = null)
{
$element = false;
$fields = array();
// Make sure there is a valid JForm XML document.
if (!($this->xml instanceof SimpleXMLElement))
{
return false;
}
// Let's get the appropriate field element based on the method
arguments.
if ($group)
{
// Get the fields elements for a given group.
$elements = &$this->findGroup($group);
// Get all of the field elements with the correct name for the fields
elements.
foreach ($elements as $element)
{
// If there are matching field elements add them to the fields array.
if ($tmp =
$element->xpath('descendant::header[@name="' . $name .
'"]'))
{
$fields = array_merge($fields, $tmp);
}
}
// Make sure something was found.
if (!$fields)
{
return false;
}
// Use the first correct match in the given group.
$groupNames = explode('.', $group);
foreach ($fields as &$field)
{
// Get the group names as strings for ancestor fields elements.
$attrs =
$field->xpath('ancestor::headerfields[@name]/@name');
$names = array_map('strval', $attrs ? $attrs : array());
// If the field is in the exact group use it and break out of the loop.
if ($names == (array) $groupNames)
{
$element = &$field;
break;
}
}
}
else
{
// Get an array of fields with the correct name.
$fields = $this->xml->xpath('//header[@name="' .
$name . '"]');
// Make sure something was found.
if (!$fields)
{
return false;
}
// Search through the fields for the right one.
foreach ($fields as &$field)
{
// If we find an ancestor fields element with a group name then it
isn't what we want.
if ($field->xpath('ancestor::headerfields[@name]'))
{
continue;
}
// Found it!
else
{
$element = &$field;
break;
}
}
}
return $element;
}
/**
* Method to load, setup and return a FOFFormHeader object based on field
data.
*
* @param string $element The XML element object representation of the
form field.
* @param string $group The optional dot-separated form group path
on which to find the field.
* @param mixed $value The optional value to use as the default for
the field.
*
* @return mixed The FOFFormHeader object for the field or boolean false
on error.
*
* @since 2.0
*/
protected function loadHeader($element, $group = null, $value = null)
{
// Make sure there is a valid SimpleXMLElement.
if (!($element instanceof SimpleXMLElement))
{
return false;
}
// Get the field type.
$type = $element['type'] ? (string) $element['type']
: 'field';
// Load the JFormField object for the field.
$field = $this->loadHeaderType($type);
// If the object could not be loaded, get a text field object.
if ($field === false)
{
$field = $this->loadHeaderType('field');
}
// Setup the FOFFormHeader object.
$field->setForm($this);
if ($field->setup($element, $value, $group))
{
return $field;
}
else
{
return false;
}
}
/**
* Method to remove a header from the form definition.
*
* @param string $name The name of the form field for which remove.
* @param string $group The optional dot-separated form group path on
which to find the field.
*
* @return boolean True on success, false otherwise.
*
* @throws UnexpectedValueException
*/
public function removeHeader($name, $group = null)
{
// Make sure there is a valid JForm XML document.
if (!($this->xml instanceof SimpleXMLElement))
{
throw new UnexpectedValueException(sprintf('%s::getFieldAttribute
`xml` is not an instance of SimpleXMLElement', get_class($this)));
}
// Find the form field element from the definition.
$element = $this->findHeader($name, $group);
// If the element exists remove it from the form definition.
if ($element instanceof SimpleXMLElement)
{
$dom = dom_import_simplexml($element);
$dom->parentNode->removeChild($dom);
return true;
}
return false;
}
/**
* Proxy for {@link FOFFormHelper::loadFieldType()}.
*
* @param string $type The field type.
* @param boolean $new Flag to toggle whether we should get a new
instance of the object.
*
* @return mixed FOFFormField object on success, false otherwise.
*
* @since 2.0
*/
protected function loadFieldType($type, $new = true)
{
return FOFFormHelper::loadFieldType($type, $new);
}
/**
* Proxy for {@link FOFFormHelper::loadHeaderType()}.
*
* @param string $type The field type.
* @param boolean $new Flag to toggle whether we should get a new
instance of the object.
*
* @return mixed FOFFormHeader object on success, false otherwise.
*
* @since 2.0
*/
protected function loadHeaderType($type, $new = true)
{
return FOFFormHelper::loadHeaderType($type, $new);
}
/**
* Proxy for {@link FOFFormHelper::loadRuleType()}.
*
* @param string $type The rule type.
* @param boolean $new Flag to toggle whether we should get a new
instance of the object.
*
* @return mixed JFormRule object on success, false otherwise.
*
* @see FOFFormHelper::loadRuleType()
* @since 2.0
*/
protected function loadRuleType($type, $new = true)
{
return FOFFormHelper::loadRuleType($type, $new);
}
/**
* Proxy for {@link FOFFormHelper::addFieldPath()}.
*
* @param mixed $new A path or array of paths to add.
*
* @return array The list of paths that have been added.
*
* @since 2.0
*/
public static function addFieldPath($new = null)
{
return FOFFormHelper::addFieldPath($new);
}
/**
* Proxy for {@link FOFFormHelper::addHeaderPath()}.
*
* @param mixed $new A path or array of paths to add.
*
* @return array The list of paths that have been added.
*
* @since 2.0
*/
public static function addHeaderPath($new = null)
{
return FOFFormHelper::addHeaderPath($new);
}
/**
* Proxy for FOFFormHelper::addFormPath().
*
* @param mixed $new A path or array of paths to add.
*
* @return array The list of paths that have been added.
*
* @see FOFFormHelper::addFormPath()
* @since 2.0
*/
public static function addFormPath($new = null)
{
return FOFFormHelper::addFormPath($new);
}
/**
* Proxy for FOFFormHelper::addRulePath().
*
* @param mixed $new A path or array of paths to add.
*
* @return array The list of paths that have been added.
*
* @see FOFFormHelper::addRulePath()
* @since 2.0
*/
public static function addRulePath($new = null)
{
return FOFFormHelper::addRulePath($new);
}
}
header/accesslevel.php000064400000002027147362604440011011 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Access level field header
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderAccesslevel extends FOFFormHeaderFieldselectable
{
/**
* Method to get the list of access levels
*
* @return array A list of access levels.
*
* @since 2.0
*/
protected function getOptions()
{
$db = FOFPlatform::getInstance()->getDbo();
$query = $db->getQuery(true);
$query->select('a.id AS value, a.title AS text');
$query->from('#__viewlevels AS a');
$query->group('a.id, a.title, a.ordering');
$query->order('a.ordering ASC');
$query->order($query->qn('title') . ' ASC');
// Get the options.
$db->setQuery($query);
$options = $db->loadObjectList();
return $options;
}
}
header/field.php000064400000001640147362604440007603 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic field header, without any filters
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderField extends FOFFormHeader
{
/**
* Get the header
*
* @return string The header HTML
*/
protected function getHeader()
{
$sortable = ($this->element['sortable'] !=
'false');
$label = $this->getLabel();
if ($sortable)
{
$view = $this->form->getView();
return JHTML::_('grid.sort', $label, $this->name,
$view->getLists()->order_Dir, $view->getLists()->order,
$this->form->getModel()->task
);
}
else
{
return JText::_($label);
}
}
}
header/fielddate.php000064400000006317147362604440010447 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
* @note This file has been modified by the Joomla! Project and no longer
reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic field header, with text input (search) filter
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderFielddate extends FOFFormHeaderField
{
/**
* Get the filter field
*
* @return string The HTML
*/
protected function getFilter()
{
// Initialize some field attributes.
$format = $this->element['format'] ? (string)
$this->element['format'] : '%Y-%m-%d';
$attributes = array();
if ($this->element['size'])
{
$attributes['size'] = (int)
$this->element['size'];
}
if ($this->element['maxlength'])
{
$attributes['maxlength'] = (int)
$this->element['maxlength'];
}
if ($this->element['filterclass'])
{
$attributes['class'] = (string)
$this->element['filterclass'];
}
if ((string) $this->element['readonly'] == 'true')
{
$attributes['readonly'] = 'readonly';
}
if ((string) $this->element['disabled'] == 'true')
{
$attributes['disabled'] = 'disabled';
}
if ($this->element['onchange'])
{
$attributes['onchange'] = (string)
$this->element['onchange'];
}
else
{
$onchange = 'document.adminForm.submit()';
}
if ((string) $this->element['placeholder'])
{
$attributes['placeholder'] = JText::_((string)
$this->element['placeholder']);
}
$name = $this->element['searchfieldname'] ?
$this->element['searchfieldname'] : $this->name;
if ($this->element['searchfieldname'])
{
$model = $this->form->getModel();
$searchvalue = $model->getState((string)
$this->element['searchfieldname']);
}
else
{
$searchvalue = $this->value;
}
// Get some system objects.
$config = FOFPlatform::getInstance()->getConfig();
$user = JFactory::getUser();
// If a known filter is given use it.
switch (strtoupper((string) $this->element['filter']))
{
case 'SERVER_UTC':
// Convert a date to UTC based on the server timezone.
if ((int) $this->value)
{
// Get a date object based on the correct timezone.
$date = FOFPlatform::getInstance()->getDate($searchvalue,
'UTC');
$date->setTimezone(new
DateTimeZone($config->get('offset')));
// Transform the date string.
$searchvalue = $date->format('Y-m-d H:i:s', true, false);
}
break;
case 'USER_UTC':
// Convert a date to UTC based on the user timezone.
if ((int) $searchvalue)
{
// Get a date object based on the correct timezone.
$date = FOFPlatform::getInstance()->getDate($this->value,
'UTC');
$date->setTimezone($user->getTimezone());
// Transform the date string.
$searchvalue = $date->format('Y-m-d H:i:s', true, false);
}
break;
}
return JHtml::_('calendar', $searchvalue, $name, $name,
$format, $attributes);
}
/**
* Get the buttons HTML code
*
* @return string The HTML
*/
protected function getButtons()
{
return '';
}
}
header/fieldfilterable.php000064400000005367147362604440011647
0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic field header, with text input (search) filter
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderFieldfilterable extends FOFFormHeaderFieldsearchable
{
/**
* Get the filter field
*
* @return string The HTML
*/
protected function getFilter()
{
$valide = array('yes', 'true', '1');
// Initialize some field(s) attributes.
$size = $this->element['size'] ? '
size="' . (int) $this->element['size'] .
'"' : '';
$maxLength = $this->element['maxlength'] ? '
maxlength="' . (int) $this->element['maxlength'] .
'"' : '';
$filterclass = $this->element['filterclass'] ? '
class="' . (string) $this->element['filterclass'] .
'"' : '';
$placeholder = $this->element['placeholder'] ?
$this->element['placeholder'] : $this->getLabel();
$name = $this->element['searchfieldname'] ?
$this->element['searchfieldname'] : $this->name;
$placeholder = ' placeholder="' . JText::_($placeholder) .
'"';
$single = in_array($this->element['single'], $valide) ?
true : false;
$showMethod = in_array($this->element['showmethod'],
$valide) ? true : false;
$method = $this->element['method'] ?
$this->element['method'] : 'between';
$fromName = $this->element['fromname'] ?
$this->element['fromname'] : 'from';
$toName = $this->element['toname'] ?
$this->element['toname'] : 'to';
$values = $this->form->getModel()->getState($name);
$fromValue = $values[$fromName];
$toValue = $values[$toName];
// Initialize JavaScript field attributes.
if ($this->element['onchange'])
{
$onchange = ' onchange="' . (string)
$this->element['onchange'] . '"';
}
else
{
$onchange = '
onchange="document.adminForm.submit();"';
}
if ($showMethod)
{
$html = '<input type="text" name="' . $name
. '[method]" value="'. $method . '"
/>';
} else
{
$html = '<input type="hidden" name="' .
$name . '[method]" value="'. $method . '"
/>';
}
$html .= '<input type="text" name="' . $name
. '[from]" id="' . $this->id . '_' .
$fromName . '"' . ' value="'
. htmlspecialchars($fromValue, ENT_COMPAT, 'UTF-8') .
'"' . $filterclass . $size . $placeholder . $onchange .
$maxLength . '/>';
if (!$single)
{
$html .= '<input type="text" name="' . $name
. '[to]" id="' . $this->id . '_' . $toName
. '"' . ' value="'
. htmlspecialchars($toValue, ENT_COMPAT, 'UTF-8') .
'"' . $filterclass . $size . $placeholder . $onchange .
$maxLength . '/>';
}
return $html;
}
}header/fieldsearchable.php000064400000005366147362604440011626
0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic field header, with text input (search) filter
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderFieldsearchable extends FOFFormHeaderField
{
/**
* Get the filter field
*
* @return string The HTML
*/
protected function getFilter()
{
// Initialize some field attributes.
$size = $this->element['size'] ? '
size="' . (int) $this->element['size'] .
'"' : '';
$maxLength = $this->element['maxlength'] ? '
maxlength="' . (int) $this->element['maxlength'] .
'"' : '';
$filterclass = $this->element['filterclass'] ? '
class="' . (string) $this->element['filterclass'] .
'"' : '';
$placeholder = $this->element['placeholder'] ?
$this->element['placeholder'] : $this->getLabel();
$name = $this->element['searchfieldname'] ?
$this->element['searchfieldname'] : $this->name;
$placeholder = ' placeholder="' . JText::_($placeholder) .
'"';
if ($this->element['searchfieldname'])
{
$model = $this->form->getModel();
$searchvalue = $model->getState((string)
$this->element['searchfieldname']);
}
else
{
$searchvalue = $this->value;
}
// Initialize JavaScript field attributes.
if ($this->element['onchange'])
{
$onchange = ' onchange="' . (string)
$this->element['onchange'] . '"';
}
else
{
$onchange = '
onchange="document.adminForm.submit();"';
}
return '<input type="text" name="' . $name .
'" id="' . $this->id . '"' . '
value="'
. htmlspecialchars($searchvalue, ENT_COMPAT, 'UTF-8') .
'"' . $filterclass . $size . $placeholder . $onchange .
$maxLength . '/>';
}
/**
* Get the buttons HTML code
*
* @return string The HTML
*/
protected function getButtons()
{
$buttonclass = $this->element['buttonclass'] ? (string)
$this->element['buttonclass'] : 'btn hasTip
hasTooltip';
$buttonsState = strtolower($this->element['buttons']);
$show_buttons = !in_array($buttonsState, array('no',
'false', '0'));
if (!$show_buttons)
{
return '';
}
$html = '';
$html .= '<button class="' . $buttonclass .
'" onclick="this.form.submit();" title="' .
JText::_('JSEARCH_FILTER') . '" >' .
"\n";
$html .= '<i class="icon-search"></i>';
$html .= '</button>' . "\n";
$html .= '<button class="' . $buttonclass .
'" onclick="document.adminForm.' . $this->id .
'.value=\'\';this.form.submit();" title="' .
JText::_('JSEARCH_RESET') . '">' .
"\n";
$html .= '<i class="icon-remove"></i>';
$html .= '</button>' . "\n";
return $html;
}
}
header/fieldselectable.php000064400000006425147362604440011635
0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic field header, with drop down filters
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderFieldselectable extends FOFFormHeaderField
{
/**
* Create objects for the options
*
* @return array The array of option objects
*/
protected function getOptions()
{
$options = array();
// Get the field $options
foreach ($this->element->children() as $option)
{
// Only add <option /> elements.
if ($option->getName() != 'option')
{
continue;
}
// Create a new option object based on the <option /> element.
$options[] = JHtml::_(
'select.option',
(string) $option['value'],
JText::alt(
trim((string) $option),
preg_replace('/[^a-zA-Z0-9_\-]/', '_',
$this->fieldname)
),
'value', 'text', ((string)
$option['disabled'] == 'true')
);
}
// Do we have a class and method source for our options?
$source_file = empty($this->element['source_file']) ?
'' : (string) $this->element['source_file'];
$source_class = empty($this->element['source_class']) ?
'' : (string) $this->element['source_class'];
$source_method = empty($this->element['source_method']) ?
'' : (string) $this->element['source_method'];
$source_key = empty($this->element['source_key']) ?
'*' : (string) $this->element['source_key'];
$source_value = empty($this->element['source_value']) ?
'*' : (string) $this->element['source_value'];
$source_translate =
empty($this->element['source_translate']) ? 'true' :
(string) $this->element['source_translate'];
$source_translate = in_array(strtolower($source_translate),
array('true','yes','1','on')) ?
true : false;
$source_format = empty($this->element['source_format']) ?
'' : (string) $this->element['source_format'];
if ($source_class && $source_method)
{
// Maybe we have to load a file?
if (!empty($source_file))
{
$source_file = FOFTemplateUtils::parsePath($source_file, true);
if
(FOFPlatform::getInstance()->getIntegrationObject('filesystem')->fileExists($source_file))
{
include_once $source_file;
}
}
// Make sure the class exists
if (class_exists($source_class, true))
{
// ...and so does the option
if (in_array($source_method, get_class_methods($source_class)))
{
// Get the data from the class
if ($source_format == 'optionsobject')
{
$options = array_merge($options, $source_class::$source_method());
}
else
{
$source_data = $source_class::$source_method();
// Loop through the data and prime the $options array
foreach ($source_data as $k => $v)
{
$key = (empty($source_key) || ($source_key == '*')) ? $k :
$v[$source_key];
$value = (empty($source_value) || ($source_value == '*'))
? $v : $v[$source_value];
if ($source_translate)
{
$value = JText::_($value);
}
$options[] = JHtml::_('select.option', $key, $value,
'value', 'text');
}
}
}
}
}
reset($options);
return $options;
}
}
header/fieldsql.php000064400000003250147362604440010322 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic field header, with drop down filters based on a SQL query
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderFieldsql extends FOFFormHeaderFieldselectable
{
/**
* Create objects for the options
*
* @return array The array of option objects
*/
protected function getOptions()
{
$options = array();
// Initialize some field attributes.
$key = $this->element['key_field'] ? (string)
$this->element['key_field'] : 'value';
$value = $this->element['value_field'] ? (string)
$this->element['value_field'] : (string)
$this->element['name'];
$translate = $this->element['translate'] ? (string)
$this->element['translate'] : false;
$query = (string) $this->element['query'];
// Get the database object.
$db = FOFPlatform::getInstance()->getDbo();
// Set the query and get the result list.
$db->setQuery($query);
$items = $db->loadObjectlist();
// Build the field options.
if (!empty($items))
{
foreach ($items as $item)
{
if ($translate == true)
{
$options[] = JHtml::_('select.option', $item->$key,
JText::_($item->$value));
}
else
{
$options[] = JHtml::_('select.option', $item->$key,
$item->$value);
}
}
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
header/filterdate.php000064400000001157147362604440010646 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic filter, text box entry with calendar button
*
* @package FrameworkOnFramework
* @since 2.3.3
*/
class FOFFormHeaderFilterdate extends FOFFormHeaderFielddate
{
/**
* Get the header
*
* @return string The header HTML
*/
protected function getHeader()
{
return '';
}
}
header/filterfilterable.php000064400000001172147362604440012037
0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic filter, text box entry with optional buttons
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderFilterfilterable extends FOFFormHeaderFieldfilterable
{
/**
* Get the header
*
* @return string The header HTML
*/
protected function getHeader()
{
return '';
}
}
header/filtersearchable.php000064400000001172147362604440012017
0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic filter, text box entry with optional buttons
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderFiltersearchable extends FOFFormHeaderFieldsearchable
{
/**
* Get the header
*
* @return string The header HTML
*/
protected function getHeader()
{
return '';
}
}
header/filterselectable.php000064400000001166147362604440012034
0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic filter, drop-down based on fixed options
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderFilterselectable extends FOFFormHeaderFieldselectable
{
/**
* Get the header
*
* @return string The header HTML
*/
protected function getHeader()
{
return '';
}
}
header/filtersql.php000064400000001144147362604440010524 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Generic filter, drop-down based on SQL query
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderFiltersql extends FOFFormHeaderFieldsql
{
/**
* Get the header
*
* @return string The header HTML
*/
protected function getHeader()
{
return '';
}
}
header/language.php000064400000002022147362604440010276 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Language field header
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderLanguage extends FOFFormHeaderFieldselectable
{
/**
* Method to get the filter options.
*
* @return array The filter option objects.
*
* @since 2.0
*/
protected function getOptions()
{
// Initialize some field attributes.
$client = (string) $this->element['client'];
if ($client != 'site' && $client !=
'administrator')
{
$client = 'site';
}
// Merge any additional options in the XML definition.
$options = array_merge(
parent::getOptions(),
JLanguageHelper::createLanguageList($this->value,
constant('JPATH_' . strtoupper($client)), true, true)
);
return $options;
}
}
header/model.php000064400000005741147362604440007626 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
* @note This file has been modified by the Joomla! Project and no
longer reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
if (!class_exists('JFormFieldSql'))
{
require_once JPATH_LIBRARIES . '/joomla/form/fields/sql.php';
}
/**
* Form Field class for FOF
* Generic list from a model's results
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderModel extends FOFFormHeaderFieldselectable
{
/**
* Method to get the field options.
*
* @return array The field option objects.
*/
protected function getOptions()
{
$options = array();
// Initialize some field attributes.
$key = $this->element['key_field'] ? (string)
$this->element['key_field'] : 'value';
$value = $this->element['value_field'] ? (string)
$this->element['value_field'] : (string)
$this->element['name'];
$applyAccess = $this->element['apply_access'] ? (string)
$this->element['apply_access'] : 'false';
$modelName = (string) $this->element['model'];
$nonePlaceholder = (string) $this->element['none'];
$translate = empty($this->element['translate']) ?
'true' : (string) $this->element['translate'];
$translate = in_array(strtolower($translate),
array('true','yes','1','on')) ?
true : false;
if (!empty($nonePlaceholder))
{
$options[] = JHtml::_('select.option', null,
JText::_($nonePlaceholder));
}
// Process field attributes
$applyAccess = strtolower($applyAccess);
$applyAccess = in_array($applyAccess, array('yes',
'on', 'true', '1'));
// Explode model name into model name and prefix
$parts = FOFInflector::explode($modelName);
$mName = ucfirst(array_pop($parts));
$mPrefix = FOFInflector::implode($parts);
// Get the model object
$config = array('savestate' => 0);
$model = FOFModel::getTmpInstance($mName, $mPrefix, $config);
if ($applyAccess)
{
$model->applyAccessFiltering();
}
// Process state variables
foreach ($this->element->children() as $stateoption)
{
// Only add <option /> elements.
if ($stateoption->getName() != 'state')
{
continue;
}
$stateKey = (string) $stateoption['key'];
$stateValue = (string) $stateoption;
$model->setState($stateKey, $stateValue);
}
// Set the query and get the result list.
$items = $model->getItemList(true);
// Build the field options.
if (!empty($items))
{
foreach ($items as $item)
{
if ($translate == true)
{
$options[] = JHtml::_('select.option', $item->$key,
JText::_($item->$value));
}
else
{
$options[] = JHtml::_('select.option', $item->$key,
$item->$value);
}
}
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
header/ordering.php000064400000003467147362604440010342 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Ordering field header
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderOrdering extends FOFFormHeader
{
/**
* Get the header
*
* @return string The header HTML
*/
protected function getHeader()
{
$sortable = ($this->element['sortable'] !=
'false');
$view = $this->form->getView();
$model = $this->form->getModel();
$hasAjaxOrderingSupport = $view->hasAjaxOrderingSupport();
if (!$sortable)
{
// Non sortable?! I'm not sure why you'd want that, but if you
insist...
return JText::_('JGRID_HEADING_ORDERING');
}
if (!$hasAjaxOrderingSupport)
{
// Ye olde Joomla! 2.5 method
$html = JHTML::_('grid.sort',
'JFIELD_ORDERING_LABEL', 'ordering',
$view->getLists()->order_Dir, $view->getLists()->order,
'browse');
$html .= JHTML::_('grid.order', $model->getList());
return $html;
}
else
{
// The new, drag'n'drop ordering support WITH a save order
button
$html = JHtml::_(
'grid.sort',
'<i class="icon-menu-2"></i>',
'ordering',
$view->getLists()->order_Dir,
$view->getLists()->order,
null,
'asc',
'JGRID_HEADING_ORDERING'
);
$ordering = $view->getLists()->order == 'ordering';
if ($ordering)
{
$html .= '<a href="javascript:saveorder(' .
(count($model->getList()) - 1) . ', \'saveorder\')"
' .
'rel="tooltip" class="save-order btn btn-micro
pull-right" title="' .
JText::_('JLIB_HTML_SAVE_ORDER') . '">'
. '<span
class="icon-ok"></span></a>';
}
return $html;
}
}
}
header/published.php000064400000002435147362604440010502 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Field header for Published (enabled) columns
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderPublished extends FOFFormHeaderFieldselectable
{
/**
* Create objects for the options
*
* @return array The array of option objects
*/
protected function getOptions()
{
$config = array(
'published' => 1,
'unpublished' => 1,
'archived' => 0,
'trash' => 0,
'all' => 0,
);
$stack = array();
if ($this->element['show_published'] == 'false')
{
$config['published'] = 0;
}
if ($this->element['show_unpublished'] == 'false')
{
$config['unpublished'] = 0;
}
if ($this->element['show_archived'] == 'true')
{
$config['archived'] = 1;
}
if ($this->element['show_trash'] == 'true')
{
$config['trash'] = 1;
}
if ($this->element['show_all'] == 'true')
{
$config['all'] = 1;
}
$options = JHtml::_('jgrid.publishedOptions', $config);
reset($options);
return $options;
}
}
header/rowselect.php000064400000001323147362604440010525 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* Row selection checkbox
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHeaderRowselect extends FOFFormHeader
{
/**
* Get the header
*
* @return string The header HTML
*/
protected function getHeader()
{
return '<input type="checkbox"
name="checkall-toggle" value="" title="'
. JText::_('JGLOBAL_CHECK_ALL')
. '" onclick="Joomla.checkAll(this)" />';
}
}
header.php000064400000026476147362604440006536 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
* @note This file has been modified by the Joomla! Project and no longer
reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* An interface for FOFFormHeader fields, used to define the filters and
the
* elements of the header row in repeatable (browse) views
*
* @package FrameworkOnFramework
* @since 2.0
*/
abstract class FOFFormHeader
{
/**
* The description text for the form field. Usually used in tooltips.
*
* @var string
* @since 2.0
*/
protected $description;
/**
* The SimpleXMLElement object of the <field /> XML element that
describes the header field.
*
* @var SimpleXMLElement
* @since 2.0
*/
protected $element;
/**
* The FOFForm object of the form attached to the header field.
*
* @var FOFForm
* @since 2.0
*/
protected $form;
/**
* The label for the header field.
*
* @var string
* @since 2.0
*/
protected $label;
/**
* The header HTML.
*
* @var string|null
* @since 2.0
*/
protected $header;
/**
* The filter HTML.
*
* @var string|null
* @since 2.0
*/
protected $filter;
/**
* The buttons HTML.
*
* @var string|null
* @since 2.0
*/
protected $buttons;
/**
* The options for a drop-down filter.
*
* @var array|null
* @since 2.0
*/
protected $options;
/**
* The name of the form field.
*
* @var string
* @since 2.0
*/
protected $name;
/**
* The name of the field.
*
* @var string
* @since 2.0
*/
protected $fieldname;
/**
* The group of the field.
*
* @var string
* @since 2.0
*/
protected $group;
/**
* The form field type.
*
* @var string
* @since 2.0
*/
protected $type;
/**
* The value of the filter.
*
* @var mixed
* @since 2.0
*/
protected $value;
/**
* The intended table data width (in pixels or percent).
*
* @var mixed
* @since 2.0
*/
protected $tdwidth;
/**
* The key of the filter value in the model state.
*
* @var mixed
* @since 2.0
*/
protected $filterSource;
/**
* Is this a sortable column?
*
* @var bool
* @since 2.0
*/
protected $sortable = false;
/**
* Method to instantiate the form field object.
*
* @param FOFForm $form The form to attach to the form field object.
*
* @since 2.0
*/
public function __construct(FOFForm $form = null)
{
// If there is a form passed into the constructor set the form and form
control properties.
if ($form instanceof FOFForm)
{
$this->form = $form;
}
}
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @since 2.0
*/
public function __get($name)
{
switch ($name)
{
case 'description':
case 'name':
case 'type':
case 'fieldname':
case 'group':
case 'tdwidth':
return $this->$name;
break;
case 'label':
if (empty($this->label))
{
$this->label = $this->getLabel();
}
return $this->label;
case 'value':
if (empty($this->value))
{
$this->value = $this->getValue();
}
return $this->value;
break;
case 'header':
if (empty($this->header))
{
$this->header = $this->getHeader();
}
return $this->header;
break;
case 'filter':
if (empty($this->filter))
{
$this->filter = $this->getFilter();
}
return $this->filter;
break;
case 'buttons':
if (empty($this->buttons))
{
$this->buttons = $this->getButtons();
}
return $this->buttons;
break;
case 'options':
if (empty($this->options))
{
$this->options = $this->getOptions();
}
return $this->options;
break;
case 'sortable':
if (empty($this->sortable))
{
$this->sortable = $this->getSortable();
}
return $this->sortable;
break;
}
return null;
}
/**
* Method to attach a JForm object to the field.
*
* @param FOFForm $form The JForm object to attach to the form field.
*
* @return FOFFormHeader The form field object so that the method can be
used in a chain.
*
* @since 2.0
*/
public function setForm(FOFForm $form)
{
$this->form = $form;
return $this;
}
/**
* Method to attach a FOFForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the <field /> tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @since 2.0
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
// Make sure there is a valid JFormField XML element.
if ((string) $element->getName() != 'header')
{
return false;
}
// Reset the internal fields
$this->label = null;
$this->header = null;
$this->filter = null;
$this->buttons = null;
$this->options = null;
$this->value = null;
$this->filterSource = null;
// Set the XML element object.
$this->element = $element;
// Get some important attributes from the form field element.
$class = (string) $element['class'];
$id = (string) $element['id'];
$name = (string) $element['name'];
$filterSource = (string) $element['filter_source'];
$tdwidth = (string) $element['tdwidth'];
// Set the field description text.
$this->description = (string) $element['description'];
// Set the group of the field.
$this->group = $group;
// Set the td width of the field.
$this->tdwidth = $tdwidth;
// Set the field name and id.
$this->fieldname = $this->getFieldName($name);
$this->name = $this->getName($this->fieldname);
$this->id = $this->getId($id, $this->fieldname);
$this->filterSource = $this->getFilterSource($filterSource);
// Set the field default value.
$this->value = $this->getValue();
return true;
}
/**
* Method to get the id used for the field input tag.
*
* @param string $fieldId The field element id.
* @param string $fieldName The field element name.
*
* @return string The id to be used for the field input tag.
*
* @since 2.0
*/
protected function getId($fieldId, $fieldName)
{
$id = '';
// If the field is in a group add the group control to the field id.
if ($this->group)
{
// If we already have an id segment add the group control as another
level.
if ($id)
{
$id .= '_' . str_replace('.', '_',
$this->group);
}
else
{
$id .= str_replace('.', '_', $this->group);
}
}
// If we already have an id segment add the field id/name as another
level.
if ($id)
{
$id .= '_' . ($fieldId ? $fieldId : $fieldName);
}
else
{
$id .= ($fieldId ? $fieldId : $fieldName);
}
// Clean up any invalid characters.
$id = preg_replace('#\W#', '_', $id);
return $id;
}
/**
* Method to get the name used for the field input tag.
*
* @param string $fieldName The field element name.
*
* @return string The name to be used for the field input tag.
*
* @since 2.0
*/
protected function getName($fieldName)
{
$name = '';
// If the field is in a group add the group control to the field name.
if ($this->group)
{
// If we already have a name segment add the group control as another
level.
$groups = explode('.', $this->group);
if ($name)
{
foreach ($groups as $group)
{
$name .= '[' . $group . ']';
}
}
else
{
$name .= array_shift($groups);
foreach ($groups as $group)
{
$name .= '[' . $group . ']';
}
}
}
// If we already have a name segment add the field name as another level.
if ($name)
{
$name .= '[' . $fieldName . ']';
}
else
{
$name .= $fieldName;
}
return $name;
}
/**
* Method to get the field name used.
*
* @param string $fieldName The field element name.
*
* @return string The field name
*
* @since 2.0
*/
protected function getFieldName($fieldName)
{
return $fieldName;
}
/**
* Method to get the field label.
*
* @return string The field label.
*
* @since 2.0
*/
protected function getLabel()
{
// Get the label text from the XML element, defaulting to the element
name.
$title = $this->element['label'] ? (string)
$this->element['label'] : '';
if (empty($title))
{
$view = $this->form->getView();
$params = $view->getViewOptionAndName();
$title = $params['option'] . '_' .
FOFInflector::pluralize($params['view']) .
'_FIELD_' .
(string) $this->element['name'];
$title = strtoupper($title);
$result = JText::_($title);
if ($result === $title)
{
$title = ucfirst((string) $this->element['name']);
}
}
return $title;
}
/**
* Get the filter value for this header field
*
* @return mixed The filter value
*/
protected function getValue()
{
$model = $this->form->getModel();
return $model->getState($this->filterSource);
}
/**
* Return the key of the filter value in the model state or, if it's
not set,
* the name of the field.
*
* @param string $filterSource The filter source value to return
*
* @return string
*/
protected function getFilterSource($filterSource)
{
if ($filterSource)
{
return $filterSource;
}
else
{
return $this->name;
}
}
/**
* Is this a sortable field?
*
* @return boolean True if it's sortable
*/
protected function getSortable()
{
$sortable = ($this->element['sortable'] !=
'false');
if ($sortable)
{
if (empty($this->header))
{
$this->header = $this->getHeader();
}
$sortable = !empty($this->header);
}
return $sortable;
}
/**
* Returns the HTML for the header row, or null if this element should
* render no header element
*
* @return string|null HTML code or null if nothing is to be rendered
*
* @since 2.0
*/
protected function getHeader()
{
return null;
}
/**
* Returns the HTML for a text filter to be rendered in the filter row,
* or null if this element should render no text input filter.
*
* @return string|null HTML code or null if nothing is to be rendered
*
* @since 2.0
*/
protected function getFilter()
{
return null;
}
/**
* Returns the HTML for the buttons to be rendered in the filter row,
* next to the text input filter, or null if this element should render no
* text input filter buttons.
*
* @return string|null HTML code or null if nothing is to be rendered
*
* @since 2.0
*/
protected function getButtons()
{
return null;
}
/**
* Returns the JHtml options for a drop-down filter. Do not include an
* empty option, it is added automatically.
*
* @return array The JHtml options for a drop-down filter
*
* @since 2.0
*/
protected function getOptions()
{
return array();
}
}
helper.php000064400000013536147362604440006556 0ustar00<?php
/**
* @package FrameworkOnFramework
* @subpackage form
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba
Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
JLoader::import('joomla.form.helper');
/**
* FOFForm's helper class.
* Provides a storage for filesystem's paths where FOFForm's
entities reside and
* methods for creating those entities. Also stores objects with
entities'
* prototypes for further reusing.
*
* @package FrameworkOnFramework
* @since 2.0
*/
class FOFFormHelper extends JFormHelper
{
/**
* Method to load a form field object given a type.
*
* @param string $type The field type.
* @param boolean $new Flag to toggle whether we should get a new
instance of the object.
*
* @return mixed JFormField object on success, false otherwise.
*
* @since 11.1
*/
public static function loadFieldType($type, $new = true)
{
return self::loadType('field', $type, $new);
}
/**
* Method to load a form field object given a type.
*
* @param string $type The field type.
* @param boolean $new Flag to toggle whether we should get a new
instance of the object.
*
* @return mixed JFormField object on success, false otherwise.
*
* @since 11.1
*/
public static function loadHeaderType($type, $new = true)
{
return self::loadType('header', $type, $new);
}
/**
* Method to load a form entity object given a type.
* Each type is loaded only once and then used as a prototype for other
objects of same type.
* Please, use this method only with those entities which support types
(forms don't support them).
*
* @param string $entity The entity.
* @param string $type The entity type.
* @param boolean $new Flag to toggle whether we should get a new
instance of the object.
*
* @return mixed Entity object on success, false otherwise.
*
* @since 11.1
*/
protected static function loadType($entity, $type, $new = true)
{
// Reference to an array with current entity's type instances
$types = &self::$entities[$entity];
$key = md5($type);
// Return an entity object if it already exists and we don't need a
new one.
if (isset($types[$key]) && $new === false)
{
return $types[$key];
}
$class = self::loadClass($entity, $type);
if ($class !== false)
{
// Instantiate a new type object.
$types[$key] = new $class;
return $types[$key];
}
else
{
return false;
}
}
/**
* Attempt to import the JFormField class file if it isn't already
imported.
* You can use this method outside of JForm for loading a field for
inheritance or composition.
*
* @param string $type Type of a field whose class should be loaded.
*
* @return mixed Class name on success or false otherwise.
*
* @since 11.1
*/
public static function loadFieldClass($type)
{
return self::loadClass('field', $type);
}
/**
* Attempt to import the FOFFormHeader class file if it isn't already
imported.
* You can use this method outside of JForm for loading a field for
inheritance or composition.
*
* @param string $type Type of a field whose class should be loaded.
*
* @return mixed Class name on success or false otherwise.
*
* @since 11.1
*/
public static function loadHeaderClass($type)
{
return self::loadClass('header', $type);
}
/**
* Load a class for one of the form's entities of a particular type.
* Currently, it makes sense to use this method for the "field"
and "rule" entities
* (but you can support more entities in your subclass).
*
* @param string $entity One of the form entities (field or rule).
* @param string $type Type of an entity.
*
* @return mixed Class name on success or false otherwise.
*
* @since 2.0
*/
public static function loadClass($entity, $type)
{
if (strpos($type, '.'))
{
list($prefix, $type) = explode('.', $type);
$altPrefix = $prefix;
}
else
{
$prefix = 'FOF';
$altPrefix = 'J';
}
$class = JString::ucfirst($prefix, '_') . 'Form' .
JString::ucfirst($entity, '_') . JString::ucfirst($type,
'_');
$altClass = JString::ucfirst($altPrefix, '_') .
'Form' . JString::ucfirst($entity, '_') .
JString::ucfirst($type, '_');
if (class_exists($class))
{
return $class;
}
elseif (class_exists($altClass))
{
return $altClass;
}
// Get the field search path array.
$paths = self::addPath($entity);
// If the type is complex, add the base type to the paths.
if ($pos = strpos($type, '_'))
{
// Add the complex type prefix to the paths.
for ($i = 0, $n = count($paths); $i < $n; $i++)
{
// Derive the new path.
$path = $paths[$i] . '/' . strtolower(substr($type, 0,
$pos));
// If the path does not exist, add it.
if (!in_array($path, $paths))
{
$paths[] = $path;
}
}
// Break off the end of the complex type.
$type = substr($type, $pos + 1);
}
// Try to find the class file.
$type = strtolower($type) . '.php';
$filesystem =
FOFPlatform::getInstance()->getIntegrationObject('filesystem');
foreach ($paths as $path)
{
if ($file = $filesystem->pathFind($path, $type))
{
require_once $file;
if (class_exists($class))
{
break;
}
elseif (class_exists($altClass))
{
break;
}
}
}
// Check for all if the class exists.
if (class_exists($class))
{
return $class;
}
elseif (class_exists($altClass))
{
return $altClass;
}
else
{
return false;
}
}
/**
* Method to add a path to the list of header include paths.
*
* @param mixed $new A path or array of paths to add.
*
* @return array The list of paths that have been added.
*/
public static function addHeaderPath($new = null)
{
return self::addPath('header', $new);
}
}
field/category.php000064400000005510151156520440010161 0ustar00<?php
/**
* @package Joomla.Legacy
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Platform.
* Supports an HTML select list of categories
*
* @since 1.6
*/
class JFormFieldCategory extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.6
*/
public $type = 'Category';
/**
* Method to get the field options for category
* Use the extension attribute in a form to specify the.specific extension
for
* which categories should be displayed.
* Use the show_root attribute to specify whether to show the global
category root in the list.
*
* @return array The field option objects.
*
* @since 1.6
*/
protected function getOptions()
{
$options = array();
$extension = $this->element['extension'] ? (string)
$this->element['extension'] : (string)
$this->element['scope'];
$published = (string) $this->element['published'];
$language = (string) $this->element['language'];
// Load the category options for a given extension.
if (!empty($extension))
{
// Filter over published state or not depending upon if it is present.
$filters = array();
if ($published)
{
$filters['filter.published'] = explode(',',
$published);
}
// Filter over language depending upon if it is present.
if ($language)
{
$filters['filter.language'] = explode(',',
$language);
}
if ($filters === array())
{
$options = JHtml::_('category.options', $extension);
}
else
{
$options = JHtml::_('category.options', $extension,
$filters);
}
// Verify permissions. If the action attribute is set, then we scan the
options.
if ((string) $this->element['action'])
{
// Get the current user object.
$user = JFactory::getUser();
foreach ($options as $i => $option)
{
/*
* To take save or create in a category you need to have create rights
for that category
* unless the item is already in that category.
* Unset the option if the user isn't authorised for it. In this
field assets are always categories.
*/
if ($user->authorise('core.create', $extension .
'.category.' . $option->value) === false)
{
unset($options[$i]);
}
}
}
if (isset($this->element['show_root']))
{
array_unshift($options, JHtml::_('select.option',
'0', JText::_('JGLOBAL_ROOT')));
}
}
else
{
JLog::add(JText::_('JLIB_FORM_ERROR_FIELDS_CATEGORY_ERROR_EXTENSION_EMPTY'),
JLog::WARNING, 'jerror');
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
field/componentlayout.php000064400000015436151156520450011615
0ustar00<?php
/**
* @package Joomla.Legacy
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('JPATH_PLATFORM') or die;
jimport('joomla.filesystem.folder');
/**
* Form Field to display a list of the layouts for a component view from
* the extension or template overrides.
*
* @since 1.6
*/
class JFormFieldComponentlayout extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.6
*/
protected $type = 'ComponentLayout';
/**
* Method to get the field input for a component layout field.
*
* @return string The field input.
*
* @since 1.6
*/
protected function getInput()
{
// Get the client id.
$clientId = $this->element['client_id'];
if ($clientId === null && $this->form instanceof JForm)
{
$clientId = $this->form->getValue('client_id');
}
$clientId = (int) $clientId;
$client = JApplicationHelper::getClientInfo($clientId);
// Get the extension.
$extension = (string) $this->element['extension'];
if (empty($extension) && ($this->form instanceof JForm))
{
$extension = $this->form->getValue('extension');
}
$extension = preg_replace('#\W#', '', $extension);
$template = (string) $this->element['template'];
$template = preg_replace('#\W#', '', $template);
$template_style_id = '';
if ($this->form instanceof JForm)
{
$template_style_id =
$this->form->getValue('template_style_id');
$template_style_id = preg_replace('#\W#', '',
$template_style_id);
}
$view = (string) $this->element['view'];
$view = preg_replace('#\W#', '', $view);
// If a template, extension and view are present build the options.
if ($extension && $view && $client)
{
// Load language file
$lang = JFactory::getLanguage();
$lang->load($extension . '.sys', JPATH_ADMINISTRATOR, null,
false, true)
|| $lang->load($extension . '.sys', JPATH_ADMINISTRATOR .
'/components/' . $extension, null, false, true);
// Get the database object and a new query object.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Build the query.
$query->select('e.element, e.name')
->from('#__extensions as e')
->where('e.client_id = ' . (int) $clientId)
->where('e.type = ' . $db->quote('template'))
->where('e.enabled = 1');
if ($template)
{
$query->where('e.element = ' . $db->quote($template));
}
if ($template_style_id)
{
$query->join('LEFT', '#__template_styles as s on
s.template=e.element')
->where('s.id=' . (int) $template_style_id);
}
// Set the query and load the templates.
$db->setQuery($query);
$templates = $db->loadObjectList('element');
// Build the search paths for component layouts.
$component_path = JPath::clean($client->path .
'/components/' . $extension . '/views/' . $view .
'/tmpl');
// Prepare array of component layouts
$component_layouts = array();
// Prepare the grouped list
$groups = array();
// Add a Use Global option if useglobal="true" in XML file
if ((string) $this->element['useglobal'] ===
'true')
{
$groups[JText::_('JOPTION_FROM_STANDARD')]['items'][]
= JHtml::_('select.option', '',
JText::_('JGLOBAL_USE_GLOBAL'));
}
// Add the layout options from the component path.
if (is_dir($component_path) && ($component_layouts =
JFolder::files($component_path, '^[^_]*\.xml$', false, true)))
{
// Create the group for the component
$groups['_'] = array();
$groups['_']['id'] = $this->id . '__';
$groups['_']['text'] =
JText::sprintf('JOPTION_FROM_COMPONENT');
$groups['_']['items'] = array();
foreach ($component_layouts as $i => $file)
{
// Attempt to load the XML file.
if (!$xml = simplexml_load_file($file))
{
unset($component_layouts[$i]);
continue;
}
// Get the help data from the XML file if present.
if (!$menu = $xml->xpath('layout[1]'))
{
unset($component_layouts[$i]);
continue;
}
$menu = $menu[0];
// Add an option to the component group
$value = basename($file, '.xml');
$component_layouts[$i] = $value;
$text = isset($menu['option']) ?
JText::_($menu['option']) : (isset($menu['title']) ?
JText::_($menu['title']) : $value);
$groups['_']['items'][] =
JHtml::_('select.option', '_:' . $value, $text);
}
}
// Loop on all templates
if ($templates)
{
foreach ($templates as $template)
{
// Load language file
$lang->load('tpl_' . $template->element .
'.sys', $client->path, null, false, true)
|| $lang->load('tpl_' . $template->element .
'.sys', $client->path . '/templates/' .
$template->element, null, false, true);
$template_path = JPath::clean(
$client->path
. '/templates/'
. $template->element
. '/html/'
. $extension
. '/'
. $view
);
// Add the layout options from the template path.
if (is_dir($template_path) && ($files =
JFolder::files($template_path, '^[^_]*\.php$', false, true)))
{
foreach ($files as $i => $file)
{
// Remove layout files that exist in the component folder
if (in_array(basename($file, '.php'), $component_layouts))
{
unset($files[$i]);
}
}
if (count($files))
{
// Create the group for the template
$groups[$template->name] = array();
$groups[$template->name]['id'] = $this->id .
'_' . $template->element;
$groups[$template->name]['text'] =
JText::sprintf('JOPTION_FROM_TEMPLATE', $template->name);
$groups[$template->name]['items'] = array();
foreach ($files as $file)
{
// Add an option to the template group
$value = basename($file, '.php');
$text = $lang
->hasKey(
$key = strtoupper(
'TPL_'
. $template->name
. '_'
. $extension
. '_'
. $view
. '_LAYOUT_'
. $value
)
)
? JText::_($key) : $value;
$groups[$template->name]['items'][] =
JHtml::_('select.option', $template->element . ':' .
$value, $text);
}
}
}
}
}
// Compute attributes for the grouped list
$attr = $this->element['size'] ? ' size="' .
(int) $this->element['size'] . '"' :
'';
$attr .= $this->element['class'] ? '
class="' . (string) $this->element['class'] .
'"' : '';
// Prepare HTML code
$html = array();
// Compute the current selected values
$selected = array($this->value);
// Add a grouped list
$html[] = JHtml::_(
'select.groupedlist', $groups, $this->name,
array('id' => $this->id, 'group.id' =>
'id', 'list.attr' => $attr, 'list.select'
=> $selected)
);
return implode($html);
}
else
{
return '';
}
}
}
field/modulelayout.php000064400000013306151156520450011072 0ustar00<?php
/**
* @package Joomla.Legacy
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('JPATH_PLATFORM') or die;
jimport('joomla.filesystem.folder');
/**
* Form Field to display a list of the layouts for module display from the
module or template overrides.
*
* @since 1.6
*/
class JFormFieldModulelayout extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.6
*/
protected $type = 'ModuleLayout';
/**
* Method to get the field input for module layouts.
*
* @return string The field input.
*
* @since 1.6
*/
protected function getInput()
{
// Get the client id.
$clientId = $this->element['client_id'];
if ($clientId === null && $this->form instanceof JForm)
{
$clientId = $this->form->getValue('client_id');
}
$clientId = (int) $clientId;
$client = JApplicationHelper::getClientInfo($clientId);
// Get the module.
$module = (string) $this->element['module'];
if (empty($module) && ($this->form instanceof JForm))
{
$module = $this->form->getValue('module');
}
$module = preg_replace('#\W#', '', $module);
// Get the template.
$template = (string) $this->element['template'];
$template = preg_replace('#\W#', '', $template);
// Get the style.
$template_style_id = '';
if ($this->form instanceof JForm)
{
$template_style_id =
$this->form->getValue('template_style_id');
$template_style_id = preg_replace('#\W#', '',
$template_style_id);
}
// If an extension and view are present build the options.
if ($module && $client)
{
// Load language file
$lang = JFactory::getLanguage();
$lang->load($module . '.sys', $client->path, null,
false, true)
|| $lang->load($module . '.sys', $client->path .
'/modules/' . $module, null, false, true);
// Get the database object and a new query object.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Build the query.
$query->select('element, name')
->from('#__extensions as e')
->where('e.client_id = ' . (int) $clientId)
->where('e.type = ' . $db->quote('template'))
->where('e.enabled = 1');
if ($template)
{
$query->where('e.element = ' . $db->quote($template));
}
if ($template_style_id)
{
$query->join('LEFT', '#__template_styles as s on
s.template=e.element')
->where('s.id=' . (int) $template_style_id);
}
// Set the query and load the templates.
$db->setQuery($query);
$templates = $db->loadObjectList('element');
// Build the search paths for module layouts.
$module_path = JPath::clean($client->path . '/modules/' .
$module . '/tmpl');
// Prepare array of component layouts
$module_layouts = array();
// Prepare the grouped list
$groups = array();
// Add the layout options from the module path.
if (is_dir($module_path) && ($module_layouts =
JFolder::files($module_path, '^[^_]*\.php$')))
{
// Create the group for the module
$groups['_'] = array();
$groups['_']['id'] = $this->id . '__';
$groups['_']['text'] =
JText::sprintf('JOPTION_FROM_MODULE');
$groups['_']['items'] = array();
foreach ($module_layouts as $file)
{
// Add an option to the module group
$value = basename($file, '.php');
$text = $lang->hasKey($key = strtoupper($module .
'_LAYOUT_' . $value)) ? JText::_($key) : $value;
$groups['_']['items'][] =
JHtml::_('select.option', '_:' . $value, $text);
}
}
// Loop on all templates
if ($templates)
{
foreach ($templates as $template)
{
// Load language file
$lang->load('tpl_' . $template->element .
'.sys', $client->path, null, false, true)
|| $lang->load('tpl_' . $template->element .
'.sys', $client->path . '/templates/' .
$template->element, null, false, true);
$template_path = JPath::clean($client->path .
'/templates/' . $template->element . '/html/' .
$module);
// Add the layout options from the template path.
if (is_dir($template_path) && ($files =
JFolder::files($template_path, '^[^_]*\.php$')))
{
foreach ($files as $i => $file)
{
// Remove layout that already exist in component ones
if (in_array($file, $module_layouts))
{
unset($files[$i]);
}
}
if (count($files))
{
// Create the group for the template
$groups[$template->element] = array();
$groups[$template->element]['id'] = $this->id .
'_' . $template->element;
$groups[$template->element]['text'] =
JText::sprintf('JOPTION_FROM_TEMPLATE', $template->name);
$groups[$template->element]['items'] = array();
foreach ($files as $file)
{
// Add an option to the template group
$value = basename($file, '.php');
$text = $lang->hasKey($key = strtoupper('TPL_' .
$template->element . '_' . $module . '_LAYOUT_' .
$value))
? JText::_($key) : $value;
$groups[$template->element]['items'][] =
JHtml::_('select.option', $template->element . ':' .
$value, $text);
}
}
}
}
}
// Compute attributes for the grouped list
$attr = $this->element['size'] ? ' size="' .
(int) $this->element['size'] . '"' :
'';
$attr .= $this->element['class'] ? '
class="' . (string) $this->element['class'] .
'"' : '';
// Prepare HTML code
$html = array();
// Compute the current selected values
$selected = array($this->value);
// Add a grouped list
$html[] = JHtml::_(
'select.groupedlist', $groups, $this->name,
array('id' => $this->id, 'group.id' =>
'id', 'list.attr' => $attr, 'list.select'
=> $selected)
);
return implode($html);
}
else
{
return '';
}
}
}
fields/accesslevel.php000064400000002743151161006600011016 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Platform.
* Provides a list of access levels. Access levels control what users in
specific
* groups can see.
*
* @see JAccess
* @since 1.7.0
*/
class JFormFieldAccessLevel extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'AccessLevel';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
$attr = '';
// Initialize some field attributes.
$attr .= !empty($this->class) ? ' class="' .
$this->class . '"' : '';
$attr .= $this->disabled ? ' disabled' : '';
$attr .= !empty($this->size) ? ' size="' .
$this->size . '"' : '';
$attr .= $this->multiple ? ' multiple' : '';
$attr .= $this->required ? ' required
aria-required="true"' : '';
$attr .= $this->autofocus ? ' autofocus' : '';
// Initialize JavaScript field attributes.
$attr .= $this->onchange ? ' onchange="' .
$this->onchange . '"' : '';
// Get the field options.
$options = $this->getOptions();
return JHtml::_('access.level', $this->name,
$this->value, $attr, $options, $this->id);
}
}
fields/aliastag.php000064400000003217151161006600010307 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Framework.
*
* @since 2.5.0
*/
class JFormFieldAliastag extends JFormFieldList
{
/**
* The field type.
*
* @var string
* @since 3.6
*/
protected $type = 'Aliastag';
/**
* Method to get a list of options for a list input.
*
* @return array An array of JHtml options.
*
* @since 3.6
*/
protected function getOptions()
{
// Get list of tag type alias
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('Distinct type_alias AS value, type_alias AS
text')
->from('#__contentitem_tag_map');
$db->setQuery($query);
$options = $db->loadObjectList();
$lang = JFactory::getLanguage();
foreach ($options as $i => $item)
{
$parts = explode('.', $item->value);
$extension = $parts[0];
$lang->load($extension . '.sys', JPATH_ADMINISTRATOR,
null, false, true)
|| $lang->load($extension, JPath::clean(JPATH_ADMINISTRATOR .
'/components/' . $extension), null, false, true);
$options[$i]->text = JText::_(strtoupper($extension) .
'_TAGS_' . strtoupper($parts[1]));
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
// Sort by language value
usort(
$options,
function($a, $b)
{
return strcmp($a->text, $b->text);
}
);
return $options;
}
}
fields/cachehandler.php000064400000002062151161006600011120
0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Platform.
* Provides a list of available cache handlers
*
* @see JCache
* @since 1.7.0
*/
class JFormFieldCacheHandler extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'CacheHandler';
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 1.7.0
*/
protected function getOptions()
{
$options = array();
// Convert to name => name array.
foreach (JCache::getStores() as $store)
{
$options[] = JHtml::_('select.option', $store,
JText::_('JLIB_FORM_VALUE_CACHE_' . $store), 'value',
'text');
}
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
fields/calendar.php000064400000022150151161006600010270 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
*
* Provides a pop up date picker linked to a button.
* Optionally may be filtered to use user's or server's time
zone.
*
* @since 1.7.0
*/
class JFormFieldCalendar extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Calendar';
/**
* The allowable maxlength of calendar field.
*
* @var integer
* @since 3.2
*/
protected $maxlength;
/**
* The format of date and time.
*
* @var integer
* @since 3.2
*/
protected $format;
/**
* The filter.
*
* @var integer
* @since 3.2
*/
protected $filter;
/**
* The minimum year number to subtract/add from the current year
*
* @var integer
* @since 3.7.0
*/
protected $minyear;
/**
* The maximum year number to subtract/add from the current year
*
* @var integer
* @since 3.7.0
*/
protected $maxyear;
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7.0
*/
protected $layout = 'joomla.form.field.calendar';
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'maxlength':
case 'format':
case 'filter':
case 'timeformat':
case 'todaybutton':
case 'singleheader':
case 'weeknumbers':
case 'showtime':
case 'filltable':
case 'minyear':
case 'maxyear':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'maxlength':
case 'timeformat':
$this->$name = (int) $value;
break;
case 'todaybutton':
case 'singleheader':
case 'weeknumbers':
case 'showtime':
case 'filltable':
case 'format':
case 'filter':
case 'minyear':
case 'maxyear':
$this->$name = (string) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->maxlength = (int) $this->element['maxlength']
? (int) $this->element['maxlength'] : 45;
$this->format = (string) $this->element['format']
? (string) $this->element['format'] : '%Y-%m-%d';
$this->filter = (string) $this->element['filter']
? (string) $this->element['filter'] : 'USER_UTC';
$this->todaybutton = (string)
$this->element['todaybutton'] ? (string)
$this->element['todaybutton'] : 'true';
$this->weeknumbers = (string)
$this->element['weeknumbers'] ? (string)
$this->element['weeknumbers'] : 'true';
$this->showtime = (string)
$this->element['showtime'] ? (string)
$this->element['showtime'] : 'false';
$this->filltable = (string)
$this->element['filltable'] ? (string)
$this->element['filltable'] : 'true';
$this->timeformat = (int) $this->element['timeformat']
? (int) $this->element['timeformat'] : 24;
$this->singleheader = (string)
$this->element['singleheader'] ? (string)
$this->element['singleheader'] : 'false';
$this->minyear = strlen((string)
$this->element['minyear']) ? (string)
$this->element['minyear'] : null;
$this->maxyear = strlen((string)
$this->element['maxyear']) ? (string)
$this->element['maxyear'] : null;
if ($this->maxyear < 0 || $this->minyear > 0)
{
$this->todaybutton = 'false';
}
}
return $return;
}
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
$config = JFactory::getConfig();
$user = JFactory::getUser();
// Translate the format if requested
$translateFormat = (string)
$this->element['translateformat'];
if ($translateFormat && $translateFormat != 'false')
{
$showTime = (string) $this->element['showtime'];
$lang = \JFactory::getLanguage();
$debug = $lang->setDebug(false);
if ($showTime && $showTime != 'false')
{
$this->format = JText::_('DATE_FORMAT_CALENDAR_DATETIME');
}
else
{
$this->format = JText::_('DATE_FORMAT_CALENDAR_DATE');
}
$lang->setDebug($debug);
}
// If a known filter is given use it.
switch (strtoupper($this->filter))
{
case 'SERVER_UTC':
// Convert a date to UTC based on the server timezone.
if ($this->value && $this->value !=
JFactory::getDbo()->getNullDate())
{
// Get a date object based on the correct timezone.
$date = JFactory::getDate($this->value, 'UTC');
$date->setTimezone(new
DateTimeZone($config->get('offset')));
// Transform the date string.
$this->value = $date->format('Y-m-d H:i:s', true,
false);
}
break;
case 'USER_UTC':
// Convert a date to UTC based on the user timezone.
if ($this->value && $this->value !=
JFactory::getDbo()->getNullDate())
{
// Get a date object based on the correct timezone.
$date = JFactory::getDate($this->value, 'UTC');
$date->setTimezone($user->getTimezone());
// Transform the date string.
$this->value = $date->format('Y-m-d H:i:s', true,
false);
}
break;
}
// Format value when not nulldate ('0000-00-00 00:00:00'),
otherwise blank it as it would result in 1970-01-01.
if ($this->value && $this->value !=
JFactory::getDbo()->getNullDate() && strtotime($this->value)
!== false)
{
$tz = date_default_timezone_get();
date_default_timezone_set('UTC');
$this->value = strftime($this->format,
strtotime($this->value));
date_default_timezone_set($tz);
}
else
{
$this->value = '';
}
return
$this->getRenderer($this->layout)->render($this->getLayoutData());
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.7.0
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
$tag = JFactory::getLanguage()->getTag();
$calendar = JFactory::getLanguage()->getCalendar();
$direction = strtolower(JFactory::getDocument()->getDirection());
// Get the appropriate file for the current language date helper
$helperPath =
'system/fields/calendar-locales/date/gregorian/date-helper.min.js';
if (!empty($calendar) && is_dir(JPATH_ROOT .
'/media/system/js/fields/calendar-locales/date/' .
strtolower($calendar)))
{
$helperPath = 'system/fields/calendar-locales/date/' .
strtolower($calendar) . '/date-helper.min.js';
}
// Get the appropriate locale file for the current language
$localesPath = 'system/fields/calendar-locales/en.js';
if (is_file(JPATH_ROOT .
'/media/system/js/fields/calendar-locales/' . strtolower($tag) .
'.js'))
{
$localesPath = 'system/fields/calendar-locales/' .
strtolower($tag) . '.js';
}
elseif (is_file(JPATH_ROOT .
'/media/system/js/fields/calendar-locales/' . $tag .
'.js'))
{
$localesPath = 'system/fields/calendar-locales/' . $tag .
'.js';
}
elseif (is_file(JPATH_ROOT .
'/media/system/js/fields/calendar-locales/' .
strtolower(substr($tag, 0, -3)) . '.js'))
{
$localesPath = 'system/fields/calendar-locales/' .
strtolower(substr($tag, 0, -3)) . '.js';
}
$extraData = array(
'value' => $this->value,
'maxLength' => $this->maxlength,
'format' => $this->format,
'filter' => $this->filter,
'todaybutton' => ($this->todaybutton ===
'true') ? 1 : 0,
'weeknumbers' => ($this->weeknumbers ===
'true') ? 1 : 0,
'showtime' => ($this->showtime === 'true')
? 1 : 0,
'filltable' => ($this->filltable ===
'true') ? 1 : 0,
'timeformat' => $this->timeformat,
'singleheader' => ($this->singleheader ===
'true') ? 1 : 0,
'helperPath' => $helperPath,
'localesPath' => $localesPath,
'minYear' => $this->minyear,
'maxYear' => $this->maxyear,
'direction' => $direction,
);
return array_merge($data, $extraData);
}
}
fields/checkbox.php000064400000010433151161006600010306 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Single checkbox field.
* This is a boolean field with null for false and the specified option for
true
*
* @link
http://www.w3.org/TR/html-markup/input.checkbox.html#input.checkbox
* @see JFormFieldCheckboxes
* @since 1.7.0
*/
class JFormFieldCheckbox extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Checkbox';
/**
* The checked state of checkbox field.
*
* @var boolean
* @since 3.2
*/
protected $checked = false;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'checked':
return $this->checked;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'checked':
$value = (string) $value;
$this->checked = ($value == 'true' || $value == $name ||
$value == '1');
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
// Handle the default attribute
$default = (string) $element['default'];
if ($default)
{
$test = $this->form->getValue((string) $element['name'],
$group);
$value = ($test == $default) ? $default : null;
}
$return = parent::setup($element, $value, $group);
if ($return)
{
$checked = (string) $this->element['checked'];
$this->checked = ($checked == 'true' || $checked ==
'checked' || $checked == '1');
empty($this->value) || $this->checked ? null : $this->checked =
true;
}
return $return;
}
/**
* Method to get the field input markup.
* The checked element sets the field to selected.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
// Initialize some field attributes.
$class = !empty($this->class) ? ' class="' .
$this->class . '"' : '';
$disabled = $this->disabled ? ' disabled' : '';
$value = !empty($this->default) ? $this->default :
'1';
$required = $this->required ? ' required
aria-required="true"' : '';
$autofocus = $this->autofocus ? ' autofocus' : '';
$checked = $this->checked || !empty($this->value) ? '
checked' : '';
// Initialize JavaScript field attributes.
$onclick = !empty($this->onclick) ? ' onclick="' .
$this->onclick . '"' : '';
$onchange = !empty($this->onchange) ? ' onchange="' .
$this->onchange . '"' : '';
// Including fallback code for HTML5 non supported browsers.
JHtml::_('jquery.framework');
JHtml::_('script', 'system/html5fallback.js',
array('version' => 'auto', 'relative'
=> true, 'conditional' => 'lt IE 9'));
return '<input type="checkbox" name="' .
$this->name . '" id="' . $this->id . '"
value="'
. htmlspecialchars($value, ENT_COMPAT, 'UTF-8') .
'"' . $class . $checked . $disabled . $onclick . $onchange
. $required . $autofocus . ' />';
}
}
fields/checkboxes.php000064400000007757151161006600010655 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Platform.
* Displays options as a list of checkboxes.
* Multiselect may be forced to be true.
*
* @see JFormFieldCheckbox
* @since 1.7.0
*/
class JFormFieldCheckboxes extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Checkboxes';
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.5
*/
protected $layout = 'joomla.form.field.checkboxes';
/**
* Flag to tell the field to always be in multiple values mode.
*
* @var boolean
* @since 1.7.0
*/
protected $forceMultiple = true;
/**
* The comma separated list of checked checkboxes value.
*
* @var mixed
* @since 3.2
*/
public $checkedOptions;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'forceMultiple':
case 'checkedOptions':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'checkedOptions':
$this->checkedOptions = (string) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to get the radio button field input markup.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
if (empty($this->layout))
{
throw new UnexpectedValueException(sprintf('%s has no layout
assigned.', $this->name));
}
return
$this->getRenderer($this->layout)->render($this->getLayoutData());
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->checkedOptions = (string)
$this->element['checked'];
}
return $return;
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.5
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// True if the field has 'value' set. In other words, it has
been stored, don't use the default values.
$hasValue = (isset($this->value) && !empty($this->value));
// If a value has been stored, use it. Otherwise, use the defaults.
$checkedOptions = $hasValue ? $this->value : $this->checkedOptions;
$extraData = array(
'checkedOptions' => is_array($checkedOptions) ?
$checkedOptions : explode(',', (string) $checkedOptions),
'hasValue' => $hasValue,
'options' => $this->getOptions(),
);
return array_merge($data, $extraData);
}
}
fields/color.php000064400000015042151161006600007637 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
/**
* Color Form Field class for the Joomla Platform.
* This implementation is designed to be compatible with HTML5's
`<input type="color">`
*
* @link http://www.w3.org/TR/html-markup/input.color.html
* @since 1.7.3
*/
class JFormFieldColor extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.3
*/
protected $type = 'Color';
/**
* The control.
*
* @var mixed
* @since 3.2
*/
protected $control = 'hue';
/**
* The format.
*
* @var string
* @since 3.6.0
*/
protected $format = 'hex';
/**
* The keywords (transparent,initial,inherit).
*
* @var string
* @since 3.6.0
*/
protected $keywords = '';
/**
* The position.
*
* @var mixed
* @since 3.2
*/
protected $position = 'default';
/**
* The colors.
*
* @var mixed
* @since 3.2
*/
protected $colors;
/**
* The split.
*
* @var integer
* @since 3.2
*/
protected $split = 3;
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.5
*/
protected $layout = 'joomla.form.field.color';
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'control':
case 'format':
case 'keywords':
case 'exclude':
case 'colors':
case 'split':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'split':
$value = (int) $value;
case 'control':
case 'format':
$this->$name = (string) $value;
break;
case 'keywords':
$this->$name = (string) $value;
break;
case 'exclude':
case 'colors':
$this->$name = (string) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->control = isset($this->element['control']) ?
(string) $this->element['control'] : 'hue';
$this->format = isset($this->element['format']) ?
(string) $this->element['format'] : 'hex';
$this->keywords = isset($this->element['keywords']) ?
(string) $this->element['keywords'] : '';
$this->position = isset($this->element['position']) ?
(string) $this->element['position'] : 'default';
$this->colors = (string) $this->element['colors'];
$this->split = isset($this->element['split']) ? (int)
$this->element['split'] : 3;
}
return $return;
}
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.7.3
*/
protected function getInput()
{
// Switch the layouts
$this->layout = $this->control === 'simple' ?
$this->layout . '.simple' : $this->layout .
'.advanced';
// Trim the trailing line in the layout file
return
rtrim($this->getRenderer($this->layout)->render($this->getLayoutData()),
PHP_EOL);
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.5
*/
protected function getLayoutData()
{
$lang = JFactory::getLanguage();
$data = parent::getLayoutData();
$color = strtolower($this->value);
$color = ! $color ? '' : $color;
// Position of the panel can be: right (default), left, top or bottom
(default RTL is left)
$position = ' data-position="' . (($lang->isRTL()
&& $this->position == 'default') ? 'left' :
$this->position) . '"';
if (!$color || in_array($color, array('none',
'transparent')))
{
$color = 'none';
}
elseif ($color['0'] != '#' &&
$this->format == 'hex')
{
$color = '#' . $color;
}
// Assign data for simple/advanced mode
$controlModeData = $this->control === 'simple' ?
$this->getSimpleModeLayoutData() :
$this->getAdvancedModeLayoutData($lang);
$extraData = array(
'color' => $color,
'format' => $this->format,
'keywords' => $this->keywords,
'position' => $position,
'validate' => $this->validate
);
return array_merge($data, $extraData, $controlModeData);
}
/**
* Method to get the data for the simple mode to be passed to the layout
for rendering.
*
* @return array
*
* @since 3.5
*/
protected function getSimpleModeLayoutData()
{
$colors = strtolower($this->colors);
if (empty($colors))
{
$colors = array(
'none',
'#049cdb',
'#46a546',
'#9d261d',
'#ffc40d',
'#f89406',
'#c3325f',
'#7a43b6',
'#ffffff',
'#999999',
'#555555',
'#000000',
);
}
else
{
$colors = explode(',', $colors);
}
if (!$this->split)
{
$count = count($colors);
if ($count % 5 == 0)
{
$split = 5;
}
else
{
if ($count % 4 == 0)
{
$split = 4;
}
}
}
$split = $this->split ? $this->split : 3;
return array(
'colors' => $colors,
'split' => $split,
);
}
/**
* Method to get the data for the advanced mode to be passed to the layout
for rendering.
*
* @param object $lang The language object
*
* @return array
*
* @since 3.5
*/
protected function getAdvancedModeLayoutData($lang)
{
return array(
'colors' => $this->colors,
'control' => $this->control,
'lang' => $lang,
);
}
}
fields/combo.php000064400000002677151161006600007632 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Platform.
* Implements a combo box field.
*
* @since 1.7.0
*/
class JFormFieldCombo extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Combo';
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.8.0
*/
protected $layout = 'joomla.form.field.combo';
/**
* Method to get the field input markup for a combo box field.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
if (empty($this->layout))
{
throw new UnexpectedValueException(sprintf('%s has no layout
assigned.', $this->name));
}
return
$this->getRenderer($this->layout)->render($this->getLayoutData());
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.8.0
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// Get the field options.
$options = $this->getOptions();
$extraData = array(
'options' => $options,
);
return array_merge($data, $extraData);
}
}
fields/components.php000064400000003201151161006600010700 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
use Joomla\Utilities\ArrayHelper;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Framework.
*
* @since 3.7.0
*/
class JFormFieldComponents extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 3.7.0
*/
protected $type = 'Components';
/**
* Method to get a list of options for a list input.
*
* @return array An array of JHtml options.
*
* @since 2.5.0
*/
protected function getOptions()
{
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('name AS text, element AS value')
->from('#__extensions')
->where('enabled >= 1')
->where('type =' . $db->quote('component'));
$items = $db->setQuery($query)->loadObjectList();
if ($items)
{
$lang = JFactory::getLanguage();
foreach ($items as &$item)
{
// Load language
$extension = $item->value;
$lang->load("$extension.sys", JPATH_ADMINISTRATOR, null,
false, true)
|| $lang->load("$extension.sys", JPATH_ADMINISTRATOR .
'/components/' . $extension, null, false, true);
// Translate component name
$item->text = JText::_($item->text);
}
// Sort by component name
$items = ArrayHelper::sortObjects($items, 'text', 1, true,
true);
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $items);
return $options;
}
}
fields/databaseconnection.php000064400000004011151161006600012337
0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Platform.
* Provides a list of available database connections, optionally limiting
to
* a given list.
*
* @see JDatabaseDriver
* @since 1.7.3
*/
class JFormFieldDatabaseConnection extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.3
*/
protected $type = 'DatabaseConnection';
/**
* Method to get the list of database options.
*
* This method produces a drop down list of available databases supported
* by JDatabaseDriver classes that are also supported by the application.
*
* @return array The field option objects.
*
* @since 1.7.3
* @see JDatabaseDriver::getConnectors()
*/
protected function getOptions()
{
// This gets the connectors available in the platform and supported by
the server.
$available = JDatabaseDriver::getConnectors();
/**
* This gets the list of database types supported by the application.
* This should be entered in the form definition as a comma separated
list.
* If no supported databases are listed, it is assumed all available
databases
* are supported.
*/
$supported = $this->element['supported'];
if (!empty($supported))
{
$supported = explode(',', $supported);
foreach ($supported as $support)
{
if (in_array($support, $available))
{
$options[$support] = JText::_(ucfirst($support));
}
}
}
else
{
foreach ($available as $support)
{
$options[$support] = JText::_(ucfirst($support));
}
}
// This will come into play if an application is installed that requires
// a database that is not available on the server.
if (empty($options))
{
$options[''] = JText::_('JNONE');
}
return $options;
}
}
fields/email.php000064400000002727151161006600007616 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('text');
/**
* Form Field class for the Joomla Platform.
* Provides and input field for email addresses
*
* @link http://www.w3.org/TR/html-markup/input.email.html#input.email
* @see JFormRuleEmail
* @since 1.7.0
*/
class JFormFieldEMail extends JFormFieldText
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Email';
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7
*/
protected $layout = 'joomla.form.field.email';
/**
* Method to get the field input markup for email addresses.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
// Trim the trailing line in the layout file
return
rtrim($this->getRenderer($this->layout)->render($this->getLayoutData()),
PHP_EOL);
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.5
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
$extraData = array(
'maxLength' => $this->maxLength,
'multiple' => $this->multiple,
);
return array_merge($data, $extraData);
}
}
fields/file.php000064400000006534151161006600007446 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Provides an input field for files
*
* @link http://www.w3.org/TR/html-markup/input.file.html#input.file
* @since 1.7.0
*/
class JFormFieldFile extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'File';
/**
* The accepted file type list.
*
* @var mixed
* @since 3.2
*/
protected $accept;
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.6
*/
protected $layout = 'joomla.form.field.file';
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'accept':
return $this->accept;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'accept':
$this->accept = (string) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->accept = (string) $this->element['accept'];
}
return $return;
}
/**
* Method to get the field input markup for the file field.
* Field attributes allow specification of a maximum file size and a
string
* of accepted file extensions.
*
* @return string The field input markup.
*
* @note The field does not include an upload mechanism.
* @see JFormFieldMedia
* @since 1.7.0
*/
protected function getInput()
{
return
$this->getRenderer($this->layout)->render($this->getLayoutData());
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.6
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
$extraData = array(
'accept' => $this->accept,
'multiple' => $this->multiple,
);
return array_merge($data, $extraData);
}
}
fields/filelist.php000064400000013054151161006600010335 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.filesystem.folder');
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.path');
JFormHelper::loadFieldClass('list');
/**
* Supports an HTML select list of files
*
* @since 1.7.0
*/
class JFormFieldFileList extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'FileList';
/**
* The filter.
*
* @var string
* @since 3.2
*/
protected $filter;
/**
* The exclude.
*
* @var string
* @since 3.2
*/
protected $exclude;
/**
* The hideNone.
*
* @var boolean
* @since 3.2
*/
protected $hideNone = false;
/**
* The hideDefault.
*
* @var boolean
* @since 3.2
*/
protected $hideDefault = false;
/**
* The stripExt.
*
* @var boolean
* @since 3.2
*/
protected $stripExt = false;
/**
* The directory.
*
* @var string
* @since 3.2
*/
protected $directory;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'filter':
case 'exclude':
case 'hideNone':
case 'hideDefault':
case 'stripExt':
case 'directory':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'filter':
case 'directory':
case 'exclude':
$this->$name = (string) $value;
break;
case 'hideNone':
case 'hideDefault':
case 'stripExt':
$value = (string) $value;
$this->$name = ($value === 'true' || $value === $name ||
$value === '1');
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->filter = (string) $this->element['filter'];
$this->exclude = (string) $this->element['exclude'];
$hideNone = (string) $this->element['hide_none'];
$this->hideNone = ($hideNone == 'true' || $hideNone ==
'hideNone' || $hideNone == '1');
$hideDefault = (string)
$this->element['hide_default'];
$this->hideDefault = ($hideDefault == 'true' ||
$hideDefault == 'hideDefault' || $hideDefault == '1');
$stripExt = (string) $this->element['stripext'];
$this->stripExt = ($stripExt == 'true' || $stripExt ==
'stripExt' || $stripExt == '1');
// Get the path in which to search for file options.
$this->directory = (string) $this->element['directory'];
}
return $return;
}
/**
* Method to get the list of files for the field options.
* Specify the target directory with a directory attribute
* Attributes allow an exclude mask and stripping of extensions from file
name.
* Default attribute may optionally be set to null (no file) or -1 (use a
default).
*
* @return array The field option objects.
*
* @since 1.7.0
*/
protected function getOptions()
{
$options = array();
$path = $this->directory;
if (!is_dir($path))
{
$path = JPATH_ROOT . '/' . $path;
}
$path = JPath::clean($path);
// Prepend some default options based on field attributes.
if (!$this->hideNone)
{
$options[] = JHtml::_('select.option', '-1',
JText::alt('JOPTION_DO_NOT_USE',
preg_replace('/[^a-zA-Z0-9_\-]/', '_',
$this->fieldname)));
}
if (!$this->hideDefault)
{
$options[] = JHtml::_('select.option', '',
JText::alt('JOPTION_USE_DEFAULT',
preg_replace('/[^a-zA-Z0-9_\-]/', '_',
$this->fieldname)));
}
// Get a list of files in the search path with the given filter.
$files = JFolder::files($path, $this->filter);
// Build the options list from the list of files.
if (is_array($files))
{
foreach ($files as $file)
{
// Check to see if the file is in the exclude mask.
if ($this->exclude)
{
if (preg_match(chr(1) . $this->exclude . chr(1), $file))
{
continue;
}
}
// If the extension is to be stripped, do it.
if ($this->stripExt)
{
$file = JFile::stripExt($file);
}
$options[] = JHtml::_('select.option', $file, $file);
}
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
fields/folderlist.php000064400000012601151161006600010666 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.filesystem.folder');
jimport('joomla.filesystem.path');
JFormHelper::loadFieldClass('list');
/**
* Supports an HTML select list of folder
*
* @since 1.7.0
*/
class JFormFieldFolderList extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'FolderList';
/**
* The filter.
*
* @var string
* @since 3.2
*/
protected $filter;
/**
* The exclude.
*
* @var string
* @since 3.2
*/
protected $exclude;
/**
* The recursive.
*
* @var string
* @since 3.6
*/
protected $recursive;
/**
* The hideNone.
*
* @var boolean
* @since 3.2
*/
protected $hideNone = false;
/**
* The hideDefault.
*
* @var boolean
* @since 3.2
*/
protected $hideDefault = false;
/**
* The directory.
*
* @var string
* @since 3.2
*/
protected $directory;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'filter':
case 'exclude':
case 'recursive':
case 'hideNone':
case 'hideDefault':
case 'directory':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'filter':
case 'directory':
case 'exclude':
case 'recursive':
$this->$name = (string) $value;
break;
case 'hideNone':
case 'hideDefault':
$value = (string) $value;
$this->$name = ($value === 'true' || $value === $name ||
$value === '1');
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->filter = (string) $this->element['filter'];
$this->exclude = (string) $this->element['exclude'];
$recursive = (string) $this->element['recursive'];
$this->recursive = ($recursive == 'true' || $recursive ==
'recursive' || $recursive == '1');
$hideNone = (string) $this->element['hide_none'];
$this->hideNone = ($hideNone == 'true' || $hideNone ==
'hideNone' || $hideNone == '1');
$hideDefault = (string)
$this->element['hide_default'];
$this->hideDefault = ($hideDefault == 'true' ||
$hideDefault == 'hideDefault' || $hideDefault == '1');
// Get the path in which to search for file options.
$this->directory = (string) $this->element['directory'];
}
return $return;
}
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 1.7.0
*/
protected function getOptions()
{
$options = array();
$path = $this->directory;
if (!is_dir($path))
{
if (is_dir(JPATH_ROOT . '/' . $path))
{
$path = JPATH_ROOT . '/' . $path;
}
else
{
return;
}
}
$path = JPath::clean($path);
// Prepend some default options based on field attributes.
if (!$this->hideNone)
{
$options[] = JHtml::_('select.option', '-1',
JText::alt('JOPTION_DO_NOT_USE',
preg_replace('/[^a-zA-Z0-9_\-]/', '_',
$this->fieldname)));
}
if (!$this->hideDefault)
{
$options[] = JHtml::_('select.option', '',
JText::alt('JOPTION_USE_DEFAULT',
preg_replace('/[^a-zA-Z0-9_\-]/', '_',
$this->fieldname)));
}
// Get a list of folders in the search path with the given filter.
$folders = JFolder::folders($path, $this->filter, $this->recursive,
true);
// Build the options list from the list of folders.
if (is_array($folders))
{
foreach ($folders as $folder)
{
// Remove the root part and the leading /
$folder = trim(str_replace($path, '', $folder),
'/');
// Check to see if the file is in the exclude mask.
if ($this->exclude)
{
if (preg_match(chr(1) . $this->exclude . chr(1), $folder))
{
continue;
}
}
$options[] = JHtml::_('select.option', $folder, $folder);
}
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
fields/groupedlist.php000064400000012577151161006600011074 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Provides a grouped list select field.
*
* @since 1.7.0
*/
class JFormFieldGroupedList extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'GroupedList';
/**
* Method to get the field option groups.
*
* @return array The field option objects as a nested array in groups.
*
* @since 1.7.0
* @throws UnexpectedValueException
*/
protected function getGroups()
{
$groups = array();
$label = 0;
foreach ($this->element->children() as $element)
{
switch ($element->getName())
{
// The element is an <option />
case 'option':
// Initialize the group if necessary.
if (!isset($groups[$label]))
{
$groups[$label] = array();
}
$disabled = (string) $element['disabled'];
$disabled = ($disabled == 'true' || $disabled ==
'disabled' || $disabled == '1');
// Create a new option object based on the <option /> element.
$tmp = JHtml::_(
'select.option', ($element['value']) ? (string)
$element['value'] : trim((string) $element),
JText::alt(trim((string) $element),
preg_replace('/[^a-zA-Z0-9_\-]/', '_',
$this->fieldname)), 'value', 'text',
$disabled
);
// Set some option attributes.
$tmp->class = (string) $element['class'];
// Set some JavaScript option attributes.
$tmp->onclick = (string) $element['onclick'];
// Add the option.
$groups[$label][] = $tmp;
break;
// The element is a <group />
case 'group':
// Get the group label.
if ($groupLabel = (string) $element['label'])
{
$label = JText::_($groupLabel);
}
// Initialize the group if necessary.
if (!isset($groups[$label]))
{
$groups[$label] = array();
}
// Iterate through the children and build an array of options.
foreach ($element->children() as $option)
{
// Only add <option /> elements.
if ($option->getName() != 'option')
{
continue;
}
$disabled = (string) $option['disabled'];
$disabled = ($disabled == 'true' || $disabled ==
'disabled' || $disabled == '1');
// Create a new option object based on the <option /> element.
$tmp = JHtml::_(
'select.option', ($option['value']) ? (string)
$option['value'] : JText::_(trim((string) $option)),
JText::_(trim((string) $option)), 'value',
'text', $disabled
);
// Set some option attributes.
$tmp->class = (string) $option['class'];
// Set some JavaScript option attributes.
$tmp->onclick = (string) $option['onclick'];
// Add the option.
$groups[$label][] = $tmp;
}
if ($groupLabel)
{
$label = count($groups);
}
break;
// Unknown element type.
default:
throw new UnexpectedValueException(sprintf('Unsupported element
%s in JFormFieldGroupedList', $element->getName()), 500);
}
}
reset($groups);
return $groups;
}
/**
* Method to get the field input markup fora grouped list.
* Multiselect is enabled by using the multiple attribute.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
$html = array();
$attr = '';
// Initialize some field attributes.
$attr .= !empty($this->class) ? ' class="' .
$this->class . '"' : '';
$attr .= !empty($this->size) ? ' size="' .
$this->size . '"' : '';
$attr .= $this->multiple ? ' multiple' : '';
$attr .= $this->required ? ' required
aria-required="true"' : '';
$attr .= $this->autofocus ? ' autofocus' : '';
// To avoid user's confusion, readonly="true" should imply
disabled="true".
if ($this->readonly || $this->disabled)
{
$attr .= ' disabled="disabled"';
}
// Initialize JavaScript field attributes.
$attr .= !empty($this->onchange) ? ' onchange="' .
$this->onchange . '"' : '';
// Get the field groups.
$groups = (array) $this->getGroups();
// Create a read-only list (no name) with a hidden input to store the
value.
if ($this->readonly)
{
$html[] = JHtml::_(
'select.groupedlist', $groups, null,
array(
'list.attr' => $attr, 'id' => $this->id,
'list.select' => $this->value, 'group.items'
=> null, 'option.key.toHtml' => false,
'option.text.toHtml' => false,
)
);
// E.g. form field type tag sends $this->value as array
if ($this->multiple && is_array($this->value))
{
if (!count($this->value))
{
$this->value[] = '';
}
foreach ($this->value as $value)
{
$html[] = '<input type="hidden" name="' .
$this->name . '" value="' . htmlspecialchars($value,
ENT_COMPAT, 'UTF-8') . '"/>';
}
}
else
{
$html[] = '<input type="hidden" name="' .
$this->name . '" value="' .
htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') .
'"/>';
}
}
// Create a regular list.
else
{
$html[] = JHtml::_(
'select.groupedlist', $groups, $this->name,
array(
'list.attr' => $attr, 'id' => $this->id,
'list.select' => $this->value, 'group.items'
=> null, 'option.key.toHtml' => false,
'option.text.toHtml' => false,
)
);
}
return implode($html);
}
}
fields/hidden.php000064400000002340151161006600007751 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Provides a hidden field
*
* @link http://www.w3.org/TR/html-markup/input.hidden.html#input.hidden
* @since 1.7.0
*/
class JFormFieldHidden extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Hidden';
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7
*/
protected $layout = 'joomla.form.field.hidden';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
// Trim the trailing line in the layout file
return
rtrim($this->getRenderer($this->layout)->render($this->getLayoutData()),
PHP_EOL);
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.7
*/
protected function getLayoutData()
{
return parent::getLayoutData();
}
}
fields/imagelist.php000064400000001706151161006600010501 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('filelist');
/**
* Supports an HTML select list of image
*
* @since 1.7.0
*/
class JFormFieldImageList extends JFormFieldFileList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'ImageList';
/**
* Method to get the list of images field options.
* Use the filter attribute to specify allowable file extensions.
*
* @return array The field option objects.
*
* @since 1.7.0
*/
protected function getOptions()
{
// Define the image file type filter.
$this->filter =
'\.png$|\.gif$|\.jpg$|\.bmp$|\.ico$|\.jpeg$|\.psd$|\.eps$';
// Get the field options.
return parent::getOptions();
}
}
fields/integer.php000064400000003370151161006600010157 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Platform.
* Provides a select list of integers with specified first, last and step
values.
*
* @since 1.7.0
*/
class JFormFieldInteger extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Integer';
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 1.7.0
*/
protected function getOptions()
{
$options = array();
// Initialize some field attributes.
$first = (int) $this->element['first'];
$last = (int) $this->element['last'];
$step = (int) $this->element['step'];
// Sanity checks.
if ($step == 0)
{
// Step of 0 will create an endless loop.
return $options;
}
elseif ($first < $last && $step < 0)
{
// A negative step will never reach the last number.
return $options;
}
elseif ($first > $last && $step > 0)
{
// A position step will never reach the last number.
return $options;
}
elseif ($step < 0)
{
// Build the options array backwards.
for ($i = $first; $i >= $last; $i += $step)
{
$options[] = JHtml::_('select.option', $i);
}
}
else
{
// Build the options array.
for ($i = $first; $i <= $last; $i += $step)
{
$options[] = JHtml::_('select.option', $i);
}
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
fields/language.php000064400000004043151161006600010303 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Platform.
* Supports a list of installed application languages
*
* @see JFormFieldContentLanguage for a select list of content
languages.
* @since 1.7.0
*/
class JFormFieldLanguage extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Language';
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 1.7.0
*/
protected function getOptions()
{
// Initialize some field attributes.
$client = (string) $this->element['client'];
if ($client != 'site' && $client !=
'administrator')
{
$client = 'site';
}
// Make sure the languages are sorted base on locale instead of random
sorting
$languages = JLanguageHelper::createLanguageList($this->value,
constant('JPATH_' . strtoupper($client)), true, true);
if (count($languages) > 1)
{
usort(
$languages,
function ($a, $b)
{
return strcmp($a['value'], $b['value']);
}
);
}
// Merge any additional options in the XML definition.
$options = array_merge(
parent::getOptions(),
$languages
);
// Set the default value active language
if ($langParams = JComponentHelper::getParams('com_languages'))
{
switch ((string) $this->value)
{
case 'site':
case 'frontend':
case '0':
$this->value = $langParams->get('site',
'en-GB');
break;
case 'admin':
case 'administrator':
case 'backend':
case '1':
$this->value = $langParams->get('administrator',
'en-GB');
break;
case 'active':
case 'auto':
$lang = JFactory::getLanguage();
$this->value = $lang->getTag();
break;
default:
break;
}
}
return $options;
}
}
fields/list.php000064400000016434151161006600007502 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Supports a generic list of options.
*
* @since 1.7.0
*/
class JFormFieldList extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'List';
/**
* Method to get the field input markup for a generic list.
* Use the multiple attribute to enable multiselect.
*
* @return string The field input markup.
*
* @since 3.7.0
*/
protected function getInput()
{
$html = array();
$attr = '';
// Initialize some field attributes.
$attr .= !empty($this->class) ? ' class="' .
$this->class . '"' : '';
$attr .= !empty($this->size) ? ' size="' .
$this->size . '"' : '';
$attr .= $this->multiple ? ' multiple' : '';
$attr .= $this->required ? ' required
aria-required="true"' : '';
$attr .= $this->autofocus ? ' autofocus' : '';
// To avoid user's confusion, readonly="true" should imply
disabled="true".
if ((string) $this->readonly == '1' || (string)
$this->readonly == 'true' || (string) $this->disabled ==
'1'|| (string) $this->disabled == 'true')
{
$attr .= ' disabled="disabled"';
}
// Initialize JavaScript field attributes.
$attr .= $this->onchange ? ' onchange="' .
$this->onchange . '"' : '';
// Get the field options.
$options = (array) $this->getOptions();
// Create a read-only list (no name) with hidden input(s) to store the
value(s).
if ((string) $this->readonly == '1' || (string)
$this->readonly == 'true')
{
$html[] = JHtml::_('select.genericlist', $options,
'', trim($attr), 'value', 'text',
$this->value, $this->id);
// E.g. form field type tag sends $this->value as array
if ($this->multiple && is_array($this->value))
{
if (!count($this->value))
{
$this->value[] = '';
}
foreach ($this->value as $value)
{
$html[] = '<input type="hidden" name="' .
$this->name . '" value="' . htmlspecialchars($value,
ENT_COMPAT, 'UTF-8') . '"/>';
}
}
else
{
$html[] = '<input type="hidden" name="' .
$this->name . '" value="' .
htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') .
'"/>';
}
}
else
// Create a regular list passing the arguments in an array.
{
$listoptions = array();
$listoptions['option.key'] = 'value';
$listoptions['option.text'] = 'text';
$listoptions['list.select'] = $this->value;
$listoptions['id'] = $this->id;
$listoptions['list.translate'] = false;
$listoptions['option.attr'] = 'optionattr';
$listoptions['list.attr'] = trim($attr);
$html[] = JHtml::_('select.genericlist', $options,
$this->name, $listoptions);
}
return implode($html);
}
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 3.7.0
*/
protected function getOptions()
{
$fieldname = preg_replace('/[^a-zA-Z0-9_\-]/', '_',
$this->fieldname);
$options = array();
foreach ($this->element->xpath('option') as $option)
{
// Filter requirements
if ($requires = explode(',', (string)
$option['requires']))
{
// Requires multilanguage
if (in_array('multilanguage', $requires) &&
!JLanguageMultilang::isEnabled())
{
continue;
}
// Requires associations
if (in_array('associations', $requires) &&
!JLanguageAssociations::isEnabled())
{
continue;
}
// Requires adminlanguage
if (in_array('adminlanguage', $requires) &&
!JModuleHelper::isAdminMultilang())
{
continue;
}
// Requires vote plugin
if (in_array('vote', $requires) &&
!JPluginHelper::isEnabled('content', 'vote'))
{
continue;
}
}
$value = (string) $option['value'];
$text = trim((string) $option) != '' ? trim((string) $option)
: $value;
$disabled = (string) $option['disabled'];
$disabled = ($disabled == 'true' || $disabled ==
'disabled' || $disabled == '1');
$disabled = $disabled || ($this->readonly && $value !=
$this->value);
$checked = (string) $option['checked'];
$checked = ($checked == 'true' || $checked ==
'checked' || $checked == '1');
$selected = (string) $option['selected'];
$selected = ($selected == 'true' || $selected ==
'selected' || $selected == '1');
$tmp = array(
'value' => $value,
'text' => JText::alt($text, $fieldname),
'disable' => $disabled,
'class' => (string) $option['class'],
'selected' => ($checked || $selected),
'checked' => ($checked || $selected),
);
// Set some event handler attributes. But really, should be using
unobtrusive js.
$tmp['onclick'] = (string) $option['onclick'];
$tmp['onchange'] = (string) $option['onchange'];
if ((string) $option['showon'])
{
$tmp['optionattr'] = " data-showon='" .
json_encode(
JFormHelper::parseShowOnConditions((string)
$option['showon'], $this->formControl, $this->group)
)
. "'";
}
// Add the option object to the result set.
$options[] = (object) $tmp;
}
if ($this->element['useglobal'])
{
$tmp = new stdClass;
$tmp->value = '';
$tmp->text = JText::_('JGLOBAL_USE_GLOBAL');
$component =
JFactory::getApplication()->input->getCmd('option');
// Get correct component for menu items
if ($component == 'com_menus')
{
$link = $this->form->getData()->get('link');
$uri = new JUri($link);
$component = $uri->getVar('option',
'com_menus');
}
$params = JComponentHelper::getParams($component);
$value = $params->get($this->fieldname);
// Try with global configuration
if (is_null($value))
{
$value = JFactory::getConfig()->get($this->fieldname);
}
// Try with menu configuration
if (is_null($value) &&
JFactory::getApplication()->input->getCmd('option') ==
'com_menus')
{
$value =
JComponentHelper::getParams('com_menus')->get($this->fieldname);
}
if (!is_null($value))
{
$value = (string) $value;
foreach ($options as $option)
{
if ($option->value === $value)
{
$value = $option->text;
break;
}
}
$tmp->text = JText::sprintf('JGLOBAL_USE_GLOBAL_VALUE',
$value);
}
array_unshift($options, $tmp);
}
reset($options);
return $options;
}
/**
* Method to add an option to the list field.
*
* @param string $text Text/Language variable of the option.
* @param array $attributes Array of attributes ('name'
=> 'value' format)
*
* @return JFormFieldList For chaining.
*
* @since 3.7.0
*/
public function addOption($text, $attributes = array())
{
if ($text && $this->element instanceof SimpleXMLElement)
{
$child = $this->element->addChild('option', $text);
foreach ($attributes as $name => $value)
{
$child->addAttribute($name, $value);
}
}
return $this;
}
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.7.0
*/
public function __get($name)
{
if ($name == 'options')
{
return $this->getOptions();
}
return parent::__get($name);
}
}
fields/meter.php000064400000011010151161006600007624 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('number');
/**
* Form Field class for the Joomla Platform.
* Provides a meter to show value in a range.
*
* @link http://www.w3.org/TR/html-markup/input.text.html#input.text
* @since 3.2
*/
class JFormFieldMeter extends JFormFieldNumber
{
/**
* The form field type.
*
* @var string
* @since 3.2
*/
protected $type = 'Meter';
/**
* The width of the field increased or decreased.
*
* @var string
* @since 3.2
*/
protected $width;
/**
* Whether the field is active or not.
*
* @var boolean
* @since 3.2
*/
protected $active = false;
/**
* Whether the field is animated or not.
*
* @var boolean
* @since 3.2
*/
protected $animated = true;
/**
* The color of the field
*
* @var boolean
* @since 3.2
*/
protected $color;
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7
*/
protected $layout = 'joomla.form.field.meter';
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'active':
case 'width':
case 'animated':
case 'color':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'width':
case 'color':
$this->$name = (string) $value;
break;
case 'active':
$value = (string) $value;
$this->active = ($value === 'true' || $value === $name ||
$value === '1');
break;
case 'animated':
$value = (string) $value;
$this->animated = !($value === 'false' || $value ===
'off' || $value === '0');
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->width = isset($this->element['width']) ? (string)
$this->element['width'] : '';
$this->color = isset($this->element['color']) ? (string)
$this->element['color'] : '';
$active = (string) $this->element['active'];
$this->active = ($active == 'true' || $active ==
'on' || $active == '1');
$animated = (string) $this->element['animated'];
$this->animated = !($animated == 'false' || $animated ==
'off' || $animated == '0');
}
return $return;
}
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 3.2
*/
protected function getInput()
{
// Trim the trailing line in the layout file
return
rtrim($this->getRenderer($this->layout)->render($this->getLayoutData()),
PHP_EOL);
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.5
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// Initialize some field attributes.
$extraData = array(
'width' => $this->width,
'color' => $this->color,
'animated' => $this->animated,
'active' => $this->active,
'max' => $this->max,
'min' => $this->min,
'step' => $this->step,
);
return array_merge($data, $extraData);
}
}
fields/note.php000064400000003467151161006600007476 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Supports a one line text field.
*
* @link http://www.w3.org/TR/html-markup/input.text.html#input.text
* @since 1.7.0
*/
class JFormFieldNote extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Note';
/**
* Method to get the field label markup.
*
* @return string The field label markup.
*
* @since 1.7.0
*/
protected function getLabel()
{
if (empty($this->element['label']) &&
empty($this->element['description']))
{
return '';
}
$title = $this->element['label'] ? (string)
$this->element['label'] :
($this->element['title'] ? (string)
$this->element['title'] : '');
$heading = $this->element['heading'] ? (string)
$this->element['heading'] : 'h4';
$description = (string) $this->element['description'];
$class = !empty($this->class) ? ' class="' .
$this->class . '"' : '';
$close = (string) $this->element['close'];
$html = array();
if ($close)
{
$close = $close == 'true' ? 'alert' : $close;
$html[] = '<button type="button"
class="close" data-dismiss="' . $close .
'">×</button>';
}
$html[] = !empty($title) ? '<' . $heading . '>'
. JText::_($title) . '</' . $heading . '>' :
'';
$html[] = !empty($description) ? JText::_($description) : '';
return '</div><div ' . $class . '>' .
implode('', $html);
}
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
return '';
}
}
fields/number.php000064400000011463151161006600010014 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Provides a one line text box with up-down handles to set a number in the
field.
*
* @link http://www.w3.org/TR/html-markup/input.text.html#input.text
* @since 3.2
*/
class JFormFieldNumber extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 3.2
*/
protected $type = 'Number';
/**
* The allowable maximum value of the field.
*
* @var float
* @since 3.2
*/
protected $max = null;
/**
* The allowable minimum value of the field.
*
* @var float
* @since 3.2
*/
protected $min = null;
/**
* The step by which value of the field increased or decreased.
*
* @var float
* @since 3.2
*/
protected $step = 0;
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7
*/
protected $layout = 'joomla.form.field.number';
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'max':
case 'min':
case 'step':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'step':
case 'min':
case 'max':
$this->$name = (float) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
// It is better not to force any default limits if none is specified
$this->max = isset($this->element['max']) ? (float)
$this->element['max'] : null;
$this->min = isset($this->element['min']) ? (float)
$this->element['min'] : null;
$this->step = isset($this->element['step']) ? (float)
$this->element['step'] : 1;
}
return $return;
}
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 3.2
*/
protected function getInput()
{
if ($this->element['useglobal'])
{
$component =
JFactory::getApplication()->input->getCmd('option');
// Get correct component for menu items
if ($component == 'com_menus')
{
$link = $this->form->getData()->get('link');
$uri = new JUri($link);
$component = $uri->getVar('option',
'com_menus');
}
$params = JComponentHelper::getParams($component);
$value = $params->get($this->fieldname);
// Try with global configuration
if (is_null($value))
{
$value = JFactory::getConfig()->get($this->fieldname);
}
// Try with menu configuration
if (is_null($value) &&
JFactory::getApplication()->input->getCmd('option') ==
'com_menus')
{
$value =
JComponentHelper::getParams('com_menus')->get($this->fieldname);
}
if (!is_null($value))
{
$value = (string) $value;
$this->hint = JText::sprintf('JGLOBAL_USE_GLOBAL_VALUE',
$value);
}
}
// Trim the trailing line in the layout file
return
rtrim($this->getRenderer($this->layout)->render($this->getLayoutData()),
PHP_EOL);
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.7
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// Initialize some field attributes.
$extraData = array(
'max' => $this->max,
'min' => $this->min,
'step' => $this->step,
'value' => $this->value,
);
return array_merge($data, $extraData);
}
}
fields/password.php000064400000010655151161006600010370 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Text field for passwords
*
* @link
http://www.w3.org/TR/html-markup/input.password.html#input.password
* @note Two password fields may be validated as matching using
JFormRuleEquals
* @since 1.7.0
*/
class JFormFieldPassword extends JFormField
{
/**
* Attach an unlock button and disable the input field,
* also remove the value from the output.
*
* @var boolean
* @since 3.9.24
*/
protected $lock = false;
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Password';
/**
* The threshold of password field.
*
* @var integer
* @since 3.2
*/
protected $threshold = 66;
/**
* The allowable maxlength of password.
*
* @var integer
* @since 3.2
*/
protected $maxLength;
/**
* Whether to attach a password strength meter or not.
*
* @var boolean
* @since 3.2
*/
protected $meter = false;
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7
*/
protected $layout = 'joomla.form.field.password';
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'lock':
case 'threshold':
case 'maxLength':
case 'meter':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
$value = (string) $value;
switch ($name)
{
case 'maxLength':
case 'threshold':
$this->$name = $value;
break;
case 'lock':
case 'meter':
$this->$name = ($value === 'true' || $value === $name ||
$value === '1');
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$lock = (string) $this->element['lock'];
$this->lock = ($lock == 'true' || $lock == 'on'
|| $lock == '1');
$this->maxLength = $this->element['maxlength'] ? (int)
$this->element['maxlength'] : 99;
$this->threshold = $this->element['threshold'] ? (int)
$this->element['threshold'] : 66;
$meter = (string) $this->element['strengthmeter'];
$this->meter = ($meter == 'true' || $meter ==
'on' || $meter == '1');
}
return $return;
}
/**
* Method to get the field input markup for password.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
// Trim the trailing line in the layout file
return
rtrim($this->getRenderer($this->layout)->render($this->getLayoutData()),
PHP_EOL);
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.7
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// Initialize some field attributes.
$extraData = array(
'lock' => $this->lock,
'maxLength' => $this->maxLength,
'meter' => $this->meter,
'threshold' => $this->threshold,
);
return array_merge($data, $extraData);
}
}
fields/plugins.php000064400000010344151161006600010202 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Framework.
*
* @since 2.5.0
*/
class JFormFieldPlugins extends JFormFieldList
{
/**
* The field type.
*
* @var string
* @since 2.5.0
*/
protected $type = 'Plugins';
/**
* The path to folder for plugins.
*
* @var string
* @since 3.2
*/
protected $folder;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'folder':
return $this->folder;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'folder':
$this->folder = (string) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->folder = (string) $this->element['folder'];
}
return $return;
}
/**
* Method to get a list of options for a list input.
*
* @return array An array of JHtml options.
*
* @since 2.5.0
*/
protected function getOptions()
{
$folder = $this->folder;
$parentOptions = parent::getOptions();
if (!empty($folder))
{
// Get list of plugins
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('element AS value, name AS text')
->from('#__extensions')
->where('folder = ' . $db->quote($folder))
->where('enabled = 1')
->order('ordering, name');
if ((string) $this->element['useaccess'] ===
'true')
{
$groups = implode(',',
JFactory::getUser()->getAuthorisedViewLevels());
$query->where($db->quoteName('access') . ' IN
(' . $groups . ')');
}
$options = $db->setQuery($query)->loadObjectList();
$lang = JFactory::getLanguage();
$useGlobal = $this->element['useglobal'];
if ($useGlobal)
{
$globalValue = JFactory::getConfig()->get($this->fieldname);
}
foreach ($options as $i => $item)
{
$source = JPATH_PLUGINS . '/' . $folder . '/' .
$item->value;
$extension = 'plg_' . $folder . '_' .
$item->value;
$lang->load($extension . '.sys', JPATH_ADMINISTRATOR,
null, false, true) || $lang->load($extension . '.sys',
$source, null, false, true);
$options[$i]->text = JText::_($item->text);
// If we are using useglobal update the use global value text with the
plugin text.
if ($useGlobal && isset($parentOptions[0]) &&
$item->value === $globalValue)
{
$text = JText::_($extension);
$parentOptions[0]->text =
JText::sprintf('JGLOBAL_USE_GLOBAL_VALUE', ($text ===
'' || $text === $extension ? $item->value : $text));
}
}
}
else
{
JLog::add(JText::_('JFRAMEWORK_FORM_FIELDS_PLUGINS_ERROR_FOLDER_EMPTY'),
JLog::WARNING, 'jerror');
}
return array_merge($parentOptions, $options);
}
}
fields/predefinedlist.php000064400000003651151161006600011525
0ustar00<?php
/**
* @package Joomla.Libraries
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field to load a list of predefined values
*
* @since 3.2
*/
abstract class JFormFieldPredefinedList extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 3.2
*/
protected $type = 'PredefinedList';
/**
* Cached array of the category items.
*
* @var array
* @since 3.2
*/
protected static $options = array();
/**
* Available predefined options
*
* @var array
* @since 3.2
*/
protected $predefinedOptions = array();
/**
* Translate options labels ?
*
* @var boolean
* @since 3.2
*/
protected $translate = true;
/**
* Method to get the options to populate list
*
* @return array The field option objects.
*
* @since 3.2
*/
protected function getOptions()
{
// Hash for caching
$hash = md5($this->element);
$type = strtolower($this->type);
if (!isset(static::$options[$type][$hash]) &&
!empty($this->predefinedOptions))
{
static::$options[$type][$hash] = parent::getOptions();
$options = array();
// Allow to only use specific values of the predefined list
$filter = isset($this->element['filter']) ?
explode(',', $this->element['filter']) : array();
foreach ($this->predefinedOptions as $value => $text)
{
$val = (string) $value;
if (empty($filter) || in_array($val, $filter, true))
{
$text = $this->translate ? JText::_($text) : $text;
$options[] = (object) array(
'value' => $value,
'text' => $text,
);
}
}
static::$options[$type][$hash] =
array_merge(static::$options[$type][$hash], $options);
}
return static::$options[$type][$hash];
}
}
fields/radio.php000064400000002761151161006600007623 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Platform.
* Provides radio button inputs
*
* @link
http://www.w3.org/TR/html-markup/command.radio.html#command.radio
* @since 1.7.0
*/
class JFormFieldRadio extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Radio';
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.5
*/
protected $layout = 'joomla.form.field.radio';
/**
* Method to get the radio button field input markup.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
if (empty($this->layout))
{
throw new UnexpectedValueException(sprintf('%s has no layout
assigned.', $this->name));
}
return
$this->getRenderer($this->layout)->render($this->getLayoutData());
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.5
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
$extraData = array(
'options' => $this->getOptions(),
'value' => (string) $this->value,
);
return array_merge($data, $extraData);
}
}
fields/range.php000064400000002642151161006600007617 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('number');
/**
* Form Field class for the Joomla Platform.
* Provides a horizontal scroll bar to specify a value in a range.
*
* @link http://www.w3.org/TR/html-markup/input.text.html#input.text
* @since 3.2
*/
class JFormFieldRange extends JFormFieldNumber
{
/**
* The form field type.
*
* @var string
* @since 3.2
*/
protected $type = 'Range';
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7
*/
protected $layout = 'joomla.form.field.range';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 3.2
*/
protected function getInput()
{
return
$this->getRenderer($this->layout)->render($this->getLayoutData());
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.7
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// Initialize some field attributes.
$extraData = array(
'max' => $this->max,
'min' => $this->min,
'step' => $this->step,
);
return array_merge($data, $extraData);
}
}
fields/repeatable.php000064400000013154151161006600010627 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Display a JSON loaded window with a repeatable set of sub fields
*
* @since 3.2
*
* @deprecated 4.0 Use JFormFieldSubform
*/
class JFormFieldRepeatable extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 3.2
*/
protected $type = 'Repeatable';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 3.2
*/
protected function getInput()
{
JLog::add('JFormFieldRepeatable is deprecated. Use JFormFieldSubform
instead.', JLog::WARNING, 'deprecated');
// Initialize variables.
$subForm = new JForm($this->name, array('control' =>
'jform'));
$xml = $this->element->children()->asXml();
$subForm->load($xml);
// Needed for repeating modals in gmaps
// @TODO: what and where???
$subForm->repeatCounter = (int) @$this->form->repeatCounter;
$children = $this->element->children();
$subForm->setFields($children);
// If a maximum value isn't set then we'll make the maximum
amount of cells a large number
$maximum = $this->element['maximum'] ? (int)
$this->element['maximum'] : '999';
// Build a Table
$head_row_str = array();
$body_row_str = array();
$head_row_str[] = '<th></th>';
$body_row_str[] = '<td><span class="sortable-handler
" style="cursor: move;"><span
class="icon-menu"
aria-hidden="true"></span></span></td>';
foreach ($subForm->getFieldset() as $field)
{
// Reset name to simple
$field->name = (string) $field->element['name'];
// Build heading
$head_row_str[] = '<th>' .
strip_tags($field->getLabel($field->name));
$head_row_str[] = '<br /><small
style="font-weight:normal">' .
JText::_($field->description) . '</small>';
$head_row_str[] = '</th>';
// Build body
$body_row_str[] = '<td>' . $field->getInput() .
'</td>';
}
// Append buttons
$head_row_str[] = '<th><div
class="btn-group"><a href="#" class="add btn
button btn-success" aria-label="' .
JText::_('JGLOBAL_FIELD_ADD') . '">';
$head_row_str[] = '<span class="icon-plus"
aria-hidden="true"></span>
</a></div></th>';
$body_row_str[] = '<td><div
class="btn-group">';
$body_row_str[] = '<a class="add btn button
btn-success" aria-label="' .
JText::_('JGLOBAL_FIELD_ADD') . '">';
$body_row_str[] = '<span class="icon-plus"
aria-hidden="true"></span> </a>';
$body_row_str[] = '<a class="remove btn button
btn-danger" aria-label="' .
JText::_('JGLOBAL_FIELD_REMOVE') . '">';
$body_row_str[] = '<span class="icon-minus"
aria-hidden="true"></span> </a>';
$body_row_str[] = '</div></td>';
// Put all table parts together
$table = '<table id="' . $this->id .
'_table" class="adminlist ' .
$this->element['class'] . ' table
table-striped">'
. '<thead><tr>' . implode("\n",
$head_row_str) . '</tr></thead>'
. '<tbody><tr>' . implode("\n",
$body_row_str) . '</tr></tbody>'
. '</table>';
// And finally build a main container
$str = array();
$str[] = '<div id="' . $this->id .
'_container">';
// Add the table to modal
$str[] = '<div id="' . $this->id .
'_modal" class="modal hide">';
$str[] = $table;
$str[] = '<div class="modal-footer">';
$str[] = '<button class="close-modal btn button
btn-link">' . JText::_('JCANCEL') .
'</button>';
$str[] = '<button class="save-modal-data btn button
btn-primary">' . JText::_('JAPPLY') .
'</button>';
$str[] = '</div>';
// Close modal container
$str[] = '</div>';
// Close main container
$str[] = '</div>';
// Button for display the modal window
$select = (string) $this->element['select'] ?
JText::_((string) $this->element['select']) :
JText::_('JLIB_FORM_BUTTON_SELECT');
$icon = $this->element['icon'] ? '<span
class="icon-' . $this->element['icon'] .
'"></span> ' : '';
$str[] = '<button class="open-modal btn"
id="' . $this->id . '_button" >' . $icon .
$select . '</button>';
if (is_array($this->value))
{
$this->value = array_shift($this->value);
}
// Script params
$data = array();
$data[] = 'data-container="#' . $this->id .
'_container"';
$data[] = 'data-modal-element="#' . $this->id .
'_modal"';
$data[] = 'data-repeatable-element="table tbody tr"';
$data[] = 'data-bt-add="a.add"';
$data[] = 'data-bt-remove="a.remove"';
$data[] = 'data-bt-modal-open="#' . $this->id .
'_button"';
$data[] = 'data-bt-modal-close="button.close-modal"';
$data[] =
'data-bt-modal-save-data="button.save-modal-data"';
$data[] = 'data-maximum="' . $maximum .
'"';
$data[] = 'data-input="#' . $this->id .
'"';
// Hidden input, where the main value is
$value = htmlspecialchars($this->value, ENT_COMPAT,
'UTF-8');
$str[] = '<input type="hidden" name="' .
$this->name . '" id="' . $this->id . '"
value="' . $value
. '" class="form-field-repeatable" ' .
implode(' ', $data) . ' />';
// Add scripts
JHtml::_('bootstrap.framework');
// Depends on jQuery UI
JHtml::_('jquery.ui', array('core',
'sortable'));
JHtml::_('script', 'jui/sortablelist.js',
array('version' => 'auto', 'relative'
=> true));
JHtml::_('stylesheet', 'jui/sortablelist.css',
array('version' => 'auto', 'relative'
=> true));
JHtml::_('script', 'system/repeatable.js',
array('framework' => true, 'version' =>
'auto', 'relative' => true));
$javascript = 'jQuery(document).ready(function($) { $("#'
. $this->id . '_table tbody").sortable(); });';
JFactory::getDocument()->addScriptDeclaration($javascript);
return implode("\n", $str);
}
}
fields/rules.php000064400000034473151161006600007664 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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
*
* @see JAccess
* @since 1.7.0
*/
class JFormFieldRules extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Rules';
/**
* The section.
*
* @var string
* @since 3.2
*/
protected $section;
/**
* The component.
*
* @var string
* @since 3.2
*/
protected $component;
/**
* The assetField.
*
* @var string
* @since 3.2
*/
protected $assetField;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'section':
case 'component':
case 'assetField':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'section':
case 'component':
case 'assetField':
$this->$name = (string) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->section = $this->element['section'] ? (string)
$this->element['section'] : '';
$this->component = $this->element['component'] ?
(string) $this->element['component'] : '';
$this->assetField = $this->element['asset_field'] ?
(string) $this->element['asset_field'] : 'asset_id';
}
return $return;
}
/**
* Method to get the field input markup for Access Control Lists.
* Optionally can be associated with a specific component and section.
*
* @return string The field input markup.
*
* @since 1.7.0
* @todo: Add access check.
*/
protected function getInput()
{
JHtml::_('bootstrap.tooltip');
// Add Javascript for permission change
JHtml::_('script', 'system/permissions.js',
array('version' => 'auto', 'relative'
=> true));
// Load JavaScript message titles
JText::script('ERROR');
JText::script('WARNING');
JText::script('NOTICE');
JText::script('MESSAGE');
// Add strings for JavaScript error translations.
JText::script('JLIB_JS_AJAX_ERROR_CONNECTION_ABORT');
JText::script('JLIB_JS_AJAX_ERROR_NO_CONTENT');
JText::script('JLIB_JS_AJAX_ERROR_OTHER');
JText::script('JLIB_JS_AJAX_ERROR_PARSE');
JText::script('JLIB_JS_AJAX_ERROR_TIMEOUT');
// Initialise some field attributes.
$section = $this->section;
$assetField = $this->assetField;
$component = empty($this->component) ? 'root.1' :
$this->component;
// Current view is global config?
$isGlobalConfig = $component === 'root.1';
// 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 asset id.
// Note that for global configuration, com_config injects asset_id = 1
into the form.
$assetId = $this->form->getValue($assetField);
$newItem = empty($assetId) && $isGlobalConfig === false
&& $section !== 'component';
$parentAssetId = null;
// If the asset id is empty (component or new item).
if (empty($assetId))
{
// Get the component asset id as fallback.
$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();
/**
* @to do: incorrect info
* When creating a new item (not saving) it uses the calculated
permissions from the component (item <-> component <-> global
config).
* But if we have a section too (item <-> section(s) <->
component <-> global config) this is not correct.
* Also, currently it uses the component permission, but should use the
calculated permissions for achild of the component/section.
*/
}
// If not in global config we need the parent_id asset to calculate
permissions.
if (!$isGlobalConfig)
{
// In this case we need to get the component rules too.
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName('parent_id'))
->from($db->quoteName('#__assets'))
->where($db->quoteName('id') . ' = ' .
$assetId);
$db->setQuery($query);
$parentAssetId = (int) $db->loadResult();
}
// Full width format.
// Get the rules for just this asset (non-recursive).
$assetRules = JAccess::getAssetRules($assetId, false, false);
// Get the available user groups.
$groups = $this->getUserGroups();
// Ajax request data.
$ajaxUri =
JRoute::_('index.php?option=com_config&task=config.store&format=json&'
. JSession::getFormToken() . '=1');
// Prepare output
$html = array();
// Description
$html[] = '<p class="rule-desc">' .
JText::_('JLIB_RULES_SETTINGS_DESC') . '</p>';
// Begin tabs
$html[] = '<div class="tabbable tabs-left"
data-ajaxuri="' . $ajaxUri . '"
id="permissions-sliders">';
// Building tab nav
$html[] = '<ul class="nav nav-tabs">';
foreach ($groups as $group)
{
// Initial Active Tab
$active = (int) $group->value === 1 ? '
class="active"' : '';
$html[] = '<li' . $active . '>';
$html[] = '<a href="#permission-' . $group->value .
'" data-toggle="tab">';
$html[] = JLayoutHelper::render('joomla.html.treeprefix',
array('level' => $group->level + 1)) . $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 = (int) $group->value === 1 ? ' 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>';
$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>';
// Check if this group has super user permissions
$isSuperUserGroup = JAccess::checkGroup($group->value,
'core.admin');
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="'
. JHtml::_('tooltipText', $action->title,
$action->description) . '">';
$html[] = JText::_($action->title);
$html[] = '</label>';
$html[] = '</td>';
$html[] = '<td headers="settings-th' .
$group->value . '">';
$html[] = '<select onchange="sendPermissions.call(this,
event)" data-chosen="true" class="input-small
novalidate"'
. ' name="' . $this->name . '[' .
$action->name . '][' . $group->value . ']"'
. ' id="' . $this->id . '_' .
$action->name . '_' . $group->value . '"'
. ' title="' .
strip_tags(JText::sprintf('JLIB_RULES_SELECT_ALLOW_DENY_GROUP',
JText::_($action->title), trim($group->text))) .
'">';
/**
* Possible values:
* null = not set means inherited
* false = denied
* true = allowed
*/
// Get the actual setting for the action for this group.
$assetRule = $newItem === false ?
$assetRules->allow($action->name, $group->value) : null;
// 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) && $isGlobalConfig ?
'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>  ';
$html[] = '<span id="icon_' . $this->id .
'_' . $action->name . '_' . $group->value .
'"' . '></span>';
$html[] = '</td>';
// Build the Calculated Settings column.
$html[] = '<td headers="aclactionth' .
$group->value . '">';
$result = array();
// Get the group, group parent id, and group global config recursive
calculated permission for the chosen action.
$inheritedGroupRule = JAccess::checkGroup((int)
$group->value, $action->name, $assetId);
$inheritedGroupParentAssetRule = !empty($parentAssetId) ?
JAccess::checkGroup($group->value, $action->name, $parentAssetId) :
null;
$inheritedParentGroupRule = !empty($group->parent_id) ?
JAccess::checkGroup($group->parent_id, $action->name, $assetId) :
null;
// Current group is a Super User group, so calculated setting is
"Allowed (Super User)".
if ($isSuperUserGroup)
{
$result['class'] = 'label label-success';
$result['text'] = '<span class="icon-lock
icon-white"></span>' .
JText::_('JLIB_RULES_ALLOWED_ADMIN');
}
// Not super user.
else
{
// First get the real recursive calculated setting and add (Inherited)
to it.
// If recursive calculated setting is "Denied" or null.
Calculated permission is "Not Allowed (Inherited)".
if ($inheritedGroupRule === null || $inheritedGroupRule === false)
{
$result['class'] = 'label label-important';
$result['text'] =
JText::_('JLIB_RULES_NOT_ALLOWED_INHERITED');
}
// If recursive calculated setting is "Allowed". Calculated
permission is "Allowed (Inherited)".
else
{
$result['class'] = 'label label-success';
$result['text'] =
JText::_('JLIB_RULES_ALLOWED_INHERITED');
}
// Second part: Overwrite the calculated permissions labels if there
is an explicit permission in the current group.
/**
* @to do: incorrect info
* If a component has a permission that doesn't exists in global
config (ex: frontend editing in com_modules) by default
* we get "Not Allowed (Inherited)" when we should get
"Not Allowed (Default)".
*/
// If there is an explicit permission "Not Allowed".
Calculated permission is "Not Allowed".
if ($assetRule === false)
{
$result['class'] = 'label label-important';
$result['text'] =
JText::_('JLIB_RULES_NOT_ALLOWED');
}
// If there is an explicit permission is "Allowed".
Calculated permission is "Allowed".
elseif ($assetRule === true)
{
$result['class'] = 'label label-success';
$result['text'] =
JText::_('JLIB_RULES_ALLOWED');
}
// Third part: Overwrite the calculated permissions labels for special
cases.
// Global configuration with "Not Set" permission.
Calculated permission is "Not Allowed (Default)".
if (empty($group->parent_id) && $isGlobalConfig === true
&& $assetRule === null)
{
$result['class'] = 'label label-important';
$result['text'] =
JText::_('JLIB_RULES_NOT_ALLOWED_DEFAULT');
}
/**
* Component/Item with explicit "Denied" permission at
parent Asset (Category, Component or Global config) configuration.
* Or some parent group has an explicit "Denied".
* Calculated permission is "Not Allowed (Locked)".
*/
elseif ($inheritedGroupParentAssetRule === false ||
$inheritedParentGroupRule === false)
{
$result['class'] = 'label label-important';
$result['text'] = '<span class="icon-lock
icon-white"></span>' .
JText::_('JLIB_RULES_NOT_ALLOWED_LOCKED');
}
}
$html[] = '<span class="' .
$result['class'] . '">' .
$result['text'] . '</span>';
$html[] = '</td>';
$html[] = '</tr>';
}
$html[] = '</tbody>';
$html[] = '</table></div>';
}
$html[] = '</div></div>';
$html[] = '<div class="clr"></div>';
$html[] = '<div class="alert">';
if ($section === 'component' || !$section)
{
$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 1.7.0
*/
protected function getUserGroups()
{
$options = JHelperUsergroups::getInstance()->getAll();
foreach ($options as &$option)
{
$option->value = $option->id;
$option->text = $option->title;
}
return array_values($options);
}
}
fields/sessionhandler.php000064400000002170151161006600011540
0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Form Field class for the Joomla Platform.
* Provides a select list of session handler options.
*
* @since 1.7.0
*/
class JFormFieldSessionHandler extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'SessionHandler';
/**
* Method to get the session handler field options.
*
* @return array The field option objects.
*
* @since 1.7.0
*/
protected function getOptions()
{
$options = array();
// Get the options from JSession.
foreach (JSession::getStores() as $store)
{
$options[] = JHtml::_('select.option', $store,
JText::_('JLIB_FORM_VALUE_SESSION_' . $store), 'value',
'text');
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
fields/spacer.php000064400000006403151161006600007777 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Provides spacer markup to be used in form layouts.
*
* @since 1.7.0
*/
class JFormFieldSpacer extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Spacer';
/**
* Method to get the field input markup for a spacer.
* The spacer does not have accept input.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
return ' ';
}
/**
* Method to get the field label markup for a spacer.
* Use the label text or name from the XML element as the spacer or
* Use a hr="true" to automatically generate plain hr markup
*
* @return string The field label markup.
*
* @since 1.7.0
*/
protected function getLabel()
{
$html = array();
$class = !empty($this->class) ? ' class="' .
$this->class . '"' : '';
$html[] = '<span class="spacer">';
$html[] = '<span class="before"></span>';
$html[] = '<span' . $class . '>';
if ((string) $this->element['hr'] == 'true')
{
$html[] = '<hr' . $class . ' />';
}
else
{
$label = '';
// Get the label text from the XML element, defaulting to the element
name.
$text = $this->element['label'] ? (string)
$this->element['label'] : (string)
$this->element['name'];
$text = $this->translateLabel ? JText::_($text) : $text;
// Build the class for the label.
$class = !empty($this->description) ? 'hasPopover' :
'';
$class = $this->required == true ? $class . ' required' :
$class;
// Add the opening label tag and main attributes attributes.
$label .= '<label id="' . $this->id .
'-lbl" class="' . $class . '"';
// If a description is specified, use it to build a tooltip.
if (!empty($this->description))
{
JHtml::_('bootstrap.popover');
$label .= ' title="' . htmlspecialchars(trim($text,
':'), ENT_COMPAT, 'UTF-8') . '"';
$label .= ' data-content="' . htmlspecialchars(
$this->translateDescription ? JText::_($this->description) :
$this->description,
ENT_COMPAT,
'UTF-8'
) . '"';
if (JFactory::getLanguage()->isRtl())
{
$label .= ' data-placement="left"';
}
}
// Add the label text and closing tag.
$label .= '>' . $text . '</label>';
$html[] = $label;
}
$html[] = '</span>';
$html[] = '<span class="after"></span>';
$html[] = '</span>';
return implode('', $html);
}
/**
* Method to get the field title.
*
* @return string The field title.
*
* @since 1.7.0
*/
protected function getTitle()
{
return $this->getLabel();
}
/**
* Method to get a control group with label and input.
*
* @param array $options Options to be passed into the rendering of
the field
*
* @return string A string containing the html for the control group
*
* @since 3.7.3
*/
public function renderField($options = array())
{
$options['class'] = empty($options['class']) ?
'field-spacer' : $options['class'] . '
field-spacer';
return parent::renderField($options);
}
}
fields/sql.php000064400000016204151161006600007321 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
/**
* Supports a custom SQL select list
*
* @since 1.7.0
*/
class JFormFieldSQL extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
public $type = 'SQL';
/**
* The keyField.
*
* @var string
* @since 3.2
*/
protected $keyField;
/**
* The valueField.
*
* @var string
* @since 3.2
*/
protected $valueField;
/**
* The translate.
*
* @var boolean
* @since 3.2
*/
protected $translate = false;
/**
* The query.
*
* @var string
* @since 3.2
*/
protected $query;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'keyField':
case 'valueField':
case 'translate':
case 'query':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'keyField':
case 'valueField':
case 'translate':
case 'query':
$this->$name = (string) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
// Check if its using the old way
$this->query = (string) $this->element['query'];
if (empty($this->query))
{
// Get the query from the form
$query = array();
$defaults = array();
$sql_select = (string) $this->element['sql_select'];
$sql_from = (string) $this->element['sql_from'];
if ($sql_select && $sql_from)
{
$query['select'] = $sql_select;
$query['from'] = $sql_from;
$query['join'] = (string)
$this->element['sql_join'];
$query['where'] = (string)
$this->element['sql_where'];
$query['group'] = (string)
$this->element['sql_group'];
$query['order'] = (string)
$this->element['sql_order'];
// Get the filters
$filters = isset($this->element['sql_filter']) ?
explode(',', $this->element['sql_filter']) :
'';
// Get the default value for query if empty
if (is_array($filters))
{
foreach ($filters as $filter)
{
$name = "sql_default_{$filter}";
$attrib = (string) $this->element[$name];
if (!empty($attrib))
{
$defaults[$filter] = $attrib;
}
}
}
// Process the query
$this->query = $this->processQuery($query, $filters, $defaults);
}
}
$this->keyField = (string) $this->element['key_field']
?: 'value';
$this->valueField = (string)
$this->element['value_field'] ?: (string)
$this->element['name'];
$this->translate = (string) $this->element['translate']
?: false;
$this->header = (string) $this->element['header'] ?:
false;
}
return $return;
}
/**
* Method to process the query from form.
*
* @param array $conditions The conditions from the form.
* @param string $filters The columns to filter.
* @param array $defaults The defaults value to set if condition is
empty.
*
* @return JDatabaseQuery The query object.
*
* @since 3.5
*/
protected function processQuery($conditions, $filters, $defaults)
{
// Get the database object.
$db = JFactory::getDbo();
// Get the query object
$query = $db->getQuery(true);
// Select fields
$query->select($conditions['select']);
// From selected table
$query->from($conditions['from']);
// Join over the groups
if (!empty($conditions['join']))
{
$query->join('LEFT', $conditions['join']);
}
// Where condition
if (!empty($conditions['where']))
{
$query->where($conditions['where']);
}
// Group by
if (!empty($conditions['group']))
{
$query->group($conditions['group']);
}
// Process the filters
if (is_array($filters))
{
$html_filters =
JFactory::getApplication()->getUserStateFromRequest($this->context .
'.filter', 'filter', array(), 'array');
foreach ($filters as $k => $value)
{
if (!empty($html_filters[$value]))
{
$escape = $db->quote($db->escape($html_filters[$value]), false);
$query->where("{$value} = {$escape}");
}
elseif (!empty($defaults[$value]))
{
$escape = $db->quote($db->escape($defaults[$value]), false);
$query->where("{$value} = {$escape}");
}
}
}
// Add order to query
if (!empty($conditions['order']))
{
$query->order($conditions['order']);
}
return $query;
}
/**
* Method to get the custom field options.
* Use the query attribute to supply a query to generate the list.
*
* @return array The field option objects.
*
* @since 1.7.0
*/
protected function getOptions()
{
$options = array();
// Initialize some field attributes.
$key = $this->keyField;
$value = $this->valueField;
$header = $this->header;
if ($this->query)
{
// Get the database object.
$db = JFactory::getDbo();
// Set the query and get the result list.
$db->setQuery($this->query);
try
{
$items = $db->loadObjectlist();
}
catch (JDatabaseExceptionExecuting $e)
{
JFactory::getApplication()->enqueueMessage(JText::_('JERROR_AN_ERROR_HAS_OCCURRED'),
'error');
}
}
// Add header.
if (!empty($header))
{
$header_title = JText::_($header);
$options[] = JHtml::_('select.option', '',
$header_title);
}
// Build the field options.
if (!empty($items))
{
foreach ($items as $item)
{
if ($this->translate == true)
{
$options[] = JHtml::_('select.option', $item->$key,
JText::_($item->$value));
}
else
{
$options[] = JHtml::_('select.option', $item->$key,
$item->$value);
}
}
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
fields/subform.php000064400000022173151161006610010202 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
use Joomla\CMS\Form\Form;
jimport('joomla.filesystem.path');
/**
* The Field to load the form inside current form
*
* @Example with all attributes:
* <field name="field-name" type="subform"
* formsource="path/to/form.xml" min="1"
max="3" multiple="true"
buttons="add,remove,move"
* layout="joomla.form.field.subform.repeatable-table"
groupByFieldset="false" component="com_example"
client="site"
* label="Field Label" description="Field
Description" />
*
* @since 3.6
*/
class JFormFieldSubform extends JFormField
{
/**
* The form field type.
* @var string
*/
protected $type = 'Subform';
/**
* Form source
* @var string
*/
protected $formsource;
/**
* Minimum items in repeat mode
* @var int
*/
protected $min = 0;
/**
* Maximum items in repeat mode
* @var int
*/
protected $max = 1000;
/**
* Layout to render the form
* @var string
*/
protected $layout = 'joomla.form.field.subform.default';
/**
* Whether group subform fields by it`s fieldset
* @var boolean
*/
protected $groupByFieldset = false;
/**
* Which buttons to show in miltiple mode
* @var array $buttons
*/
protected $buttons = array('add' => true, 'remove'
=> true, 'move' => true);
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.6
*/
public function __get($name)
{
switch ($name)
{
case 'formsource':
case 'min':
case 'max':
case 'layout':
case 'groupByFieldset':
case 'buttons':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.6
*/
public function __set($name, $value)
{
switch ($name)
{
case 'formsource':
$this->formsource = (string) $value;
// Add root path if we have a path to XML file
if (strrpos($this->formsource, '.xml') ===
strlen($this->formsource) - 4)
{
$this->formsource = JPath::clean(JPATH_ROOT . '/' .
$this->formsource);
}
break;
case 'min':
$this->min = (int) $value;
break;
case 'max':
if ($value)
{
$this->max = max(1, (int) $value);
}
break;
case 'groupByFieldset':
if ($value !== null)
{
$value = (string) $value;
$this->groupByFieldset = !($value === 'false' || $value
=== 'off' || $value === '0');
}
break;
case 'layout':
$this->layout = (string) $value;
// Make sure the layout is not empty.
if (!$this->layout)
{
// Set default value depend from "multiple" mode
$this->layout = !$this->multiple ?
'joomla.form.field.subform.default' :
'joomla.form.field.subform.repeatable';
}
break;
case 'buttons':
if (!$this->multiple)
{
$this->buttons = array();
break;
}
if ($value && !is_array($value))
{
$value = explode(',', (string) $value);
$value = array_fill_keys(array_filter($value), true);
}
if ($value)
{
$value = array_merge(array('add' => false,
'remove' => false, 'move' => false), $value);
$this->buttons = $value;
}
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the <field /> tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value.
*
* @return boolean True on success.
*
* @since 3.6
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
if (!parent::setup($element, $value, $group))
{
return false;
}
foreach (array('formsource', 'min', 'max',
'layout', 'groupByFieldset', 'buttons') as
$attributeName)
{
$this->__set($attributeName, $element[$attributeName]);
}
if ($this->value && is_string($this->value))
{
// Guess here is the JSON string from 'default' attribute
$this->value = json_decode($this->value, true);
}
if (!$this->formsource && $element->form)
{
// Set the formsource parameter from the content of the node
$this->formsource = $element->form->saveXML();
}
return true;
}
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 3.6
*/
protected function getInput()
{
// Prepare data for renderer
$data = parent::getLayoutData();
$tmpl = null;
$control = $this->name;
try
{
$tmpl = $this->loadSubForm();
$forms = $this->loadSubFormData($tmpl);
}
catch (Exception $e)
{
return $e->getMessage();
}
$data['tmpl'] = $tmpl;
$data['forms'] = $forms;
$data['min'] = $this->min;
$data['max'] = $this->max;
$data['control'] = $control;
$data['buttons'] = $this->buttons;
$data['fieldname'] = $this->fieldname;
$data['groupByFieldset'] = $this->groupByFieldset;
/**
* For each rendering process of a subform element, we want to have a
* separate unique subform id present to could distinguish the
eventhandlers
* regarding adding/moving/removing rows from nested subforms from their
parents.
*/
static $unique_subform_id = 0;
$data['unique_subform_id'] = ('sr-' .
($unique_subform_id++));
// Prepare renderer
$renderer = $this->getRenderer($this->layout);
// Allow to define some JLayout options as attribute of the element
if ($this->element['component'])
{
$renderer->setComponent((string)
$this->element['component']);
}
if ($this->element['client'])
{
$renderer->setClient((string) $this->element['client']);
}
// Render
$html = $renderer->render($data);
// Add hidden input on front of the subform inputs, in multiple mode
// for allow to submit an empty value
if ($this->multiple)
{
$html = '<input name="' . $this->name .
'" type="hidden" value="" />' .
$html;
}
return $html;
}
/**
* Method to get the name used for the field input tag.
*
* @param string $fieldName The field element name.
*
* @return string The name to be used for the field input tag.
*
* @since 3.6
*/
protected function getName($fieldName)
{
$name = '';
// If there is a form control set for the attached form add it first.
if ($this->formControl)
{
$name .= $this->formControl;
}
// If the field is in a group add the group control to the field name.
if ($this->group)
{
// If we already have a name segment add the group control as another
level.
$groups = explode('.', $this->group);
if ($name)
{
foreach ($groups as $group)
{
$name .= '[' . $group . ']';
}
}
else
{
$name .= array_shift($groups);
foreach ($groups as $group)
{
$name .= '[' . $group . ']';
}
}
}
// If we already have a name segment add the field name as another level.
if ($name)
{
$name .= '[' . $fieldName . ']';
}
else
{
$name .= $fieldName;
}
return $name;
}
/**
* Loads the form instance for the subform.
*
* @return Form The form instance.
*
* @throws InvalidArgumentException if no form provided.
* @throws RuntimeException if the form could not be loaded.
*
* @since 3.9.7
*/
public function loadSubForm()
{
$control = $this->name;
if ($this->multiple)
{
$control .= '[' . $this->fieldname . 'X]';
}
// Prepare the form template
$formname = 'subform.' . str_replace(array('jform[',
'[', ']'), array('', '.',
''), $this->name);
$tmpl = Form::getInstance($formname, $this->formsource,
array('control' => $control));
return $tmpl;
}
/**
* Binds given data to the subform and its elements.
*
* @param Form &$subForm Form instance of the subform.
*
* @return Form[] Array of Form instances for the rows.
*
* @since 3.9.7
*/
private function loadSubFormData(Form &$subForm)
{
$value = $this->value ? (array) $this->value : array();
// Simple form, just bind the data and return one row.
if (!$this->multiple)
{
$subForm->bind($value);
return array($subForm);
}
// Multiple rows possible: Construct array and bind values to their
respective forms.
$forms = array();
$value = array_values($value);
// Show as many rows as we have values, but at least min and at most max.
$c = max($this->min, min(count($value), $this->max));
for ($i = 0; $i < $c; $i++)
{
$control = $this->name . '[' . $this->fieldname . $i .
']';
$itemForm = Form::getInstance($subForm->getName() . $i,
$this->formsource, array('control' => $control));
if (!empty($value[$i]))
{
$itemForm->bind($value[$i]);
}
$forms[] = $itemForm;
}
return $forms;
}
}
fields/tel.php000064400000003133151161006610007304 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('text');
/**
* Form Field class for the Joomla Platform.
* Supports a text field telephone numbers.
*
* @link http://www.w3.org/TR/html-markup/input.tel.html
* @see JFormRuleTel for telephone number validation
* @see JHtmlTel for rendering of telephone numbers
* @since 1.7.0
*/
class JFormFieldTel extends JFormFieldText
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Tel';
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7.0
*/
protected $layout = 'joomla.form.field.tel';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 3.2
*/
protected function getInput()
{
// Trim the trailing line in the layout file
return
rtrim($this->getRenderer($this->layout)->render($this->getLayoutData()),
PHP_EOL);
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.7.0
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// Initialize some field attributes.
$maxLength = !empty($this->maxLength) ? '
maxlength="' . $this->maxLength . '"' :
'';
$extraData = array(
'maxLength' => $maxLength,
);
return array_merge($data, $extraData);
}
}
fields/text.php000064400000015255151161006610007514 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Supports a one line text field.
*
* @link http://www.w3.org/TR/html-markup/input.text.html#input.text
* @since 1.7.0
*/
class JFormFieldText extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Text';
/**
* The allowable maxlength of the field.
*
* @var integer
* @since 3.2
*/
protected $maxLength;
/**
* The mode of input associated with the field.
*
* @var mixed
* @since 3.2
*/
protected $inputmode;
/**
* The name of the form field direction (ltr or rtl).
*
* @var string
* @since 3.2
*/
protected $dirname;
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7
*/
protected $layout = 'joomla.form.field.text';
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'maxLength':
case 'dirname':
case 'inputmode':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'maxLength':
$this->maxLength = (int) $value;
break;
case 'dirname':
$value = (string) $value;
$this->dirname = ($value == $name || $value == 'true' ||
$value == '1');
break;
case 'inputmode':
$this->inputmode = (string) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$result = parent::setup($element, $value, $group);
if ($result == true)
{
$inputmode = (string) $this->element['inputmode'];
$dirname = (string) $this->element['dirname'];
$this->inputmode = '';
$inputmode = preg_replace('/\s+/', ' ',
trim($inputmode));
$inputmode = explode(' ', $inputmode);
if (!empty($inputmode))
{
$defaultInputmode = in_array('default', $inputmode) ?
JText::_('JLIB_FORM_INPUTMODE') . ' ' : '';
foreach (array_keys($inputmode, 'default') as $key)
{
unset($inputmode[$key]);
}
$this->inputmode = $defaultInputmode . implode(' ',
$inputmode);
}
// Set the dirname.
$dirname = ((string) $dirname == 'dirname' || $dirname ==
'true' || $dirname == '1');
$this->dirname = $dirname ? $this->getName($this->fieldname .
'_dir') : false;
$this->maxLength = (int) $this->element['maxlength'];
}
return $result;
}
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
if ($this->element['useglobal'])
{
$component =
JFactory::getApplication()->input->getCmd('option');
// Get correct component for menu items
if ($component == 'com_menus')
{
$link = $this->form->getData()->get('link');
$uri = new JUri($link);
$component = $uri->getVar('option',
'com_menus');
}
$params = JComponentHelper::getParams($component);
$value = $params->get($this->fieldname);
// Try with global configuration
if (is_null($value))
{
$value = JFactory::getConfig()->get($this->fieldname);
}
// Try with menu configuration
if (is_null($value) &&
JFactory::getApplication()->input->getCmd('option') ==
'com_menus')
{
$value =
JComponentHelper::getParams('com_menus')->get($this->fieldname);
}
if (!is_null($value))
{
$value = (string) $value;
$this->hint = JText::sprintf('JGLOBAL_USE_GLOBAL_VALUE',
$value);
}
}
return
$this->getRenderer($this->layout)->render($this->getLayoutData());
}
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 3.4
*/
protected function getOptions()
{
$options = array();
foreach ($this->element->children() as $option)
{
// Only add <option /> elements.
if ($option->getName() != 'option')
{
continue;
}
// Create a new option object based on the <option /> element.
$options[] = JHtml::_(
'select.option', (string) $option['value'],
JText::alt(trim((string) $option),
preg_replace('/[^a-zA-Z0-9_\-]/', '_',
$this->fieldname)), 'value', 'text'
);
}
return $options;
}
/**
* Method to get the field suggestions.
*
* @return array The field option objects.
*
* @since 3.2
* @deprecated 4.0 Use getOptions instead
*/
protected function getSuggestions()
{
return $this->getOptions();
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.7
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// Initialize some field attributes.
$maxLength = !empty($this->maxLength) ? '
maxlength="' . $this->maxLength . '"' :
'';
$inputmode = !empty($this->inputmode) ? '
inputmode="' . $this->inputmode . '"' :
'';
$dirname = !empty($this->dirname) ? ' dirname="' .
$this->dirname . '"' : '';
/* Get the field options for the datalist.
Note: getSuggestions() is deprecated and will be changed to getOptions()
with 4.0. */
$options = (array) $this->getSuggestions();
$extraData = array(
'maxLength' => $maxLength,
'pattern' => $this->pattern,
'inputmode' => $inputmode,
'dirname' => $dirname,
'options' => $options,
);
return array_merge($data, $extraData);
}
}
fields/textarea.php000064400000010150151161006650010336 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Supports a multi line area for entry of plain text
*
* @link http://www.w3.org/TR/html-markup/textarea.html#textarea
* @since 1.7.0
*/
class JFormFieldTextarea extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Textarea';
/**
* The number of rows in textarea.
*
* @var mixed
* @since 3.2
*/
protected $rows;
/**
* The number of columns in textarea.
*
* @var mixed
* @since 3.2
*/
protected $columns;
/**
* The maximum number of characters in textarea.
*
* @var mixed
* @since 3.4
*/
protected $maxlength;
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7
*/
protected $layout = 'joomla.form.field.textarea';
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'rows':
case 'columns':
case 'maxlength':
return $this->$name;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'rows':
case 'columns':
case 'maxlength':
$this->$name = (int) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->rows = isset($this->element['rows']) ? (int)
$this->element['rows'] : false;
$this->columns = isset($this->element['cols']) ? (int)
$this->element['cols'] : false;
$this->maxlength = isset($this->element['maxlength']) ?
(int) $this->element['maxlength'] : false;
}
return $return;
}
/**
* Method to get the textarea field input markup.
* Use the rows and columns attributes to specify the dimensions of the
area.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
// Trim the trailing line in the layout file
return
rtrim($this->getRenderer($this->layout)->render($this->getLayoutData()),
PHP_EOL);
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.7
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// Initialize some field attributes.
$columns = $this->columns ? ' cols="' .
$this->columns . '"' : '';
$rows = $this->rows ? ' rows="' .
$this->rows . '"' : '';
$maxlength = $this->maxlength ? ' maxlength="' .
$this->maxlength . '"' : '';
$extraData = array(
'maxlength' => $maxlength,
'rows' => $rows,
'columns' => $columns
);
return array_merge($data, $extraData);
}
}
fields/timezone.php000064400000007531151161006650010364 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('groupedlist');
/**
* Form Field class for the Joomla Platform.
*
* @since 1.7.0
*/
class JFormFieldTimezone extends JFormFieldGroupedList
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Timezone';
/**
* The list of available timezone groups to use.
*
* @var array
* @since 1.7.0
*/
protected static $zones = array('Africa', 'America',
'Antarctica', 'Arctic', 'Asia',
'Atlantic', 'Australia', 'Europe',
'Indian', 'Pacific');
/**
* The keyField of timezone field.
*
* @var integer
* @since 3.2
*/
protected $keyField;
/**
* Method to get certain otherwise inaccessible properties from the form
field object.
*
* @param string $name The property name for which to get the value.
*
* @return mixed The property value or null.
*
* @since 3.2
*/
public function __get($name)
{
switch ($name)
{
case 'keyField':
return $this->keyField;
}
return parent::__get($name);
}
/**
* Method to set certain otherwise inaccessible properties of the form
field object.
*
* @param string $name The property name for which to set the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @since 3.2
*/
public function __set($name, $value)
{
switch ($name)
{
case 'keyField':
$this->keyField = (string) $value;
break;
default:
parent::__set($name, $value);
}
}
/**
* Method to attach a JForm object to the field.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value. This acts as an array container for the field.
* For example if the field has
name="foo" and the group value is set to "bar" then the
* full field name would end up being
"bar[foo]".
*
* @return boolean True on success.
*
* @see JFormField::setup()
* @since 3.2
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->keyField = (string) $this->element['key_field'];
}
return $return;
}
/**
* Method to get the time zone field option groups.
*
* @return array The field option objects as a nested array in groups.
*
* @since 1.7.0
*/
protected function getGroups()
{
$groups = array();
// Get the list of time zones from the server.
$zones = DateTimeZone::listIdentifiers();
// Build the group lists.
foreach ($zones as $zone)
{
// Time zones not in a group we will ignore.
if (strpos($zone, '/') === false)
{
continue;
}
// Get the group/locale from the timezone.
list ($group, $locale) = explode('/', $zone, 2);
// Only use known groups.
if (in_array($group, self::$zones))
{
// Initialize the group if necessary.
if (!isset($groups[$group]))
{
$groups[$group] = array();
}
// Only add options where a locale exists.
if (!empty($locale))
{
$groups[$group][$zone] = JHtml::_('select.option', $zone,
str_replace('_', ' ', $locale), 'value',
'text', false);
}
}
}
// Sort the group lists.
ksort($groups);
foreach ($groups as &$location)
{
sort($location);
}
// Merge any additional groups in the XML definition.
$groups = array_merge(parent::getGroups(), $groups);
return $groups;
}
}
fields/url.php000064400000003446151161006650007335 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('text');
/**
* Form Field class for the Joomla Platform.
* Supports a URL text field
*
* @link http://www.w3.org/TR/html-markup/input.url.html#input.url
* @see JFormRuleUrl for validation of full urls
* @since 1.7.0
*/
class JFormFieldUrl extends JFormFieldText
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Url';
/**
* Name of the layout being used to render the field
*
* @var string
* @since 3.7
*/
protected $layout = 'joomla.form.field.url';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 3.1.2 (CMS)
*/
protected function getInput()
{
// Trim the trailing line in the layout file
return
rtrim($this->getRenderer($this->layout)->render($this->getLayoutData()),
PHP_EOL);
}
/**
* Method to get the data to be passed to the layout for rendering.
*
* @return array
*
* @since 3.7
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();
// Initialize some field attributes.
$maxLength = !empty($this->maxLength) ? '
maxlength="' . $this->maxLength . '"' :
'';
// Note that the input type "url" is suitable only for external
URLs, so if internal URLs are allowed
// we have to use the input type "text" instead.
$inputType = $this->element['relative'] ?
'type="text"' : 'type="url"';
$extraData = array(
'maxLength' => $maxLength,
'inputType' => $inputType,
);
return array_merge($data, $extraData);
}
}
fields/usergroup.php000064400000004572151161006650010567 0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage Form
*
* @copyright Copyright (C) 2005 - 2020 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.
* Supports a nested checkbox field listing user groups.
* Multiselect is available by default.
*
* @since 1.7.0
* @deprecated 3.5
*/
class JFormFieldUsergroup extends JFormField
{
/**
* The form field type.
*
* @var string
* @since 1.7.0
*/
protected $type = 'Usergroup';
/**
* Method to get the user group field input markup.
*
* @return string The field input markup.
*
* @since 1.7.0
*/
protected function getInput()
{
JLog::add('JFormFieldUsergroup is deprecated. Use
JFormFieldUserGroupList instead.', JLog::WARNING,
'deprecated');
$options = array();
$attr = '';
// Initialize some field attributes.
$attr .= !empty($this->class) ? ' class="' .
$this->class . '"' : '';
$attr .= $this->disabled ? ' disabled' : '';
$attr .= $this->size ? ' size="' . $this->size .
'"' : '';
$attr .= $this->multiple ? ' multiple' : '';
$attr .= $this->required ? ' required
aria-required="true"' : '';
$attr .= $this->autofocus ? ' autofocus' : '';
// Initialize JavaScript field attributes.
$attr .= !empty($this->onchange) ? ' onchange="' .
$this->onchange . '"' : '';
$attr .= !empty($this->onclick) ? ' onclick="' .
$this->onclick . '"' : '';
// Iterate through the children and build an array of options.
foreach ($this->element->children() as $option)
{
// Only add <option /> elements.
if ($option->getName() != 'option')
{
continue;
}
$disabled = (string) $option['disabled'];
$disabled = ($disabled == 'true' || $disabled ==
'disabled' || $disabled == '1');
// Create a new option object based on the <option /> element.
$tmp = JHtml::_(
'select.option', (string) $option['value'],
trim((string) $option), 'value', 'text',
$disabled
);
// Set some option attributes.
$tmp->class = (string) $option['class'];
// Set some JavaScript option attributes.
$tmp->onclick = (string) $option['onclick'];
// Add the option object to the result set.
$options[] = $tmp;
}
return JHtml::_('access.usergroup', $this->name,
$this->value, $attr, $options, $this->id);
}
}
setoptions.xml000064400000017641151162213600007503 0ustar00<?xml
version="1.0" encoding="utf-8"?>
<form>
<field
name="access"
type="usergrouplist"
label="PLG_TINY_FIELD_SETACCESS_LABEL"
description="PLG_TINY_FIELD_SETACCESS_DESC"
multiple="true"
class="access-select"
labelclass="label label-success"
/>
<field
name="skins"
type="note"
label="PLG_TINY_FIELD_SKIN_INFO_LABEL"
description="PLG_TINY_FIELD_SKIN_INFO_DESC"
/>
<field
name="skin"
type="skins"
label="PLG_TINY_FIELD_SKIN_LABEL"
description="PLG_TINY_FIELD_SKIN_DESC"
/>
<field
name="skin_admin"
type="skins"
label="PLG_TINY_FIELD_SKIN_ADMIN_LABEL"
description="PLG_TINY_FIELD_SKIN_ADMIN_DESC"
/>
<field
name="mobile"
type="radio"
label="PLG_TINY_FIELD_MOBILE_LABEL"
description="PLG_TINY_FIELD_MOBILE_DESC"
class="btn-group btn-group-yesno"
default="0"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="drag_drop"
type="radio"
label="PLG_TINY_FIELD_DRAG_DROP_LABEL"
description="PLG_TINY_FIELD_DRAG_DROP_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="path"
type="uploaddirs"
label="PLG_TINY_FIELD_CUSTOM_PATH_LABEL"
description="PLG_TINY_FIELD_CUSTOM_PATH_DESC"
class="input-xxlarge"
showon="drag_drop:1"
/>
<field
name="entity_encoding"
type="list"
label="PLG_TINY_FIELD_ENCODING_LABEL"
description="PLG_TINY_FIELD_ENCODING_DESC"
default="raw"
>
<option
value="named">PLG_TINY_FIELD_VALUE_NAMED</option>
<option
value="numeric">PLG_TINY_FIELD_VALUE_NUMERIC</option>
<option
value="raw">PLG_TINY_FIELD_VALUE_RAW</option>
</field>
<field
name="lang_mode"
type="radio"
label="PLG_TINY_FIELD_LANGSELECT_LABEL"
description="PLG_TINY_FIELD_LANGSELECT_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="lang_code"
type="filelist"
label="PLG_TINY_FIELD_LANGCODE_LABEL"
description="PLG_TINY_FIELD_LANGCODE_DESC"
class="inputbox"
stripext="1"
directory="media/editors/tinymce/langs/"
hide_none="1"
default="en"
hide_default="1"
filter="\.js$"
size="10"
showon="lang_mode:0"
/>
<field
name="text_direction"
type="list"
label="PLG_TINY_FIELD_DIRECTION_LABEL"
description="PLG_TINY_FIELD_DIRECTION_DESC"
default="ltr"
>
<option
value="ltr">PLG_TINY_FIELD_VALUE_LTR</option>
<option
value="rtl">PLG_TINY_FIELD_VALUE_RTL</option>
</field>
<field
name="content_css"
type="radio"
label="PLG_TINY_FIELD_CSS_LABEL"
description="PLG_TINY_FIELD_CSS_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="content_css_custom"
type="text"
label="PLG_TINY_FIELD_CUSTOM_CSS_LABEL"
description="PLG_TINY_FIELD_CUSTOM_CSS_DESC"
class="input-xxlarge"
/>
<field
name="relative_urls"
type="list"
label="PLG_TINY_FIELD_URLS_LABEL"
description="PLG_TINY_FIELD_URLS_DESC"
default="1"
>
<option
value="0">PLG_TINY_FIELD_VALUE_ABSOLUTE</option>
<option
value="1">PLG_TINY_FIELD_VALUE_RELATIVE</option>
</field>
<field
name="newlines"
type="list"
label="PLG_TINY_FIELD_NEWLINES_LABEL"
description="PLG_TINY_FIELD_NEWLINES_DESC"
default="0"
>
<option
value="1">PLG_TINY_FIELD_VALUE_BR</option>
<option
value="0">PLG_TINY_FIELD_VALUE_P</option>
</field>
<field
name="use_config_textfilters"
type="radio"
label="PLG_TINY_CONFIG_TEXTFILTER_ACL_LABEL"
description="PLG_TINY_CONFIG_TEXTFILTER_ACL_DESC"
class="btn-group btn-group-yesno"
default="0"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="invalid_elements"
type="text"
label="PLG_TINY_FIELD_PROHIBITED_LABEL"
description="PLG_TINY_FIELD_PROHIBITED_DESC"
showon="use_config_textfilters:0"
default="script,applet,iframe"
class="input-xxlarge"
/>
<field
name="valid_elements"
type="text"
label="PLG_TINY_FIELD_VALIDELEMENTS_LABEL"
description="PLG_TINY_FIELD_VALIDELEMENTS_DESC"
showon="use_config_textfilters:0"
class="input-xxlarge"
/>
<field
name="extended_elements"
type="text"
label="PLG_TINY_FIELD_ELEMENTS_LABEL"
description="PLG_TINY_FIELD_ELEMENTS_DESC"
showon="use_config_textfilters:0"
class="input-xxlarge"
/>
<!-- Extra plugins -->
<field
name="resizing"
type="radio"
label="PLG_TINY_FIELD_RESIZING_LABEL"
description="PLG_TINY_FIELD_RESIZING_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="resize_horizontal"
type="radio"
label="PLG_TINY_FIELD_RESIZE_HORIZONTAL_LABEL"
description="PLG_TINY_FIELD_RESIZE_HORIZONTAL_DESC"
class="btn-group btn-group-yesno"
default="1"
showon="resizing:1"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="element_path"
type="radio"
label="PLG_TINY_FIELD_PATH_LABEL"
description="PLG_TINY_FIELD_PATH_DESC"
class="btn-group btn-group-yesno"
default="0"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="wordcount"
type="radio"
label="PLG_TINY_FIELD_WORDCOUNT_LABEL"
description="PLG_TINY_FIELD_WORDCOUNT_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="image_advtab"
type="radio"
label="PLG_TINY_FIELD_ADVIMAGE_LABEL"
description="PLG_TINY_FIELD_ADVIMAGE_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="advlist"
type="radio"
label="PLG_TINY_FIELD_ADVLIST_LABEL"
description="PLG_TINY_FIELD_ADVLIST_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="contextmenu"
type="radio"
label="PLG_TINY_FIELD_CONTEXTMENU_LABEL"
description="PLG_TINY_FIELD_CONTEXTMENU_DESC"
class="btn-group btn-group-yesno"
default="1"
>
<option value="1">JON</option>
<option value="0">JOFF</option>
</field>
<field
name="custom_plugin"
type="text"
label="PLG_TINY_FIELD_CUSTOMPLUGIN_LABEL"
description="PLG_TINY_FIELD_CUSTOMPLUGIN_DESC"
class="input-xxlarge"
/>
<field
name="custom_button"
type="text"
label="PLG_TINY_FIELD_CUSTOMBUTTON_LABEL"
description="PLG_TINY_FIELD_CUSTOMBUTTON_DESC"
class="input-xxlarge"
/>
</form>edit.php000064400000026365151165370770006232 0ustar00<?php
/**
* @package Joomla.Site
* @subpackage Templates.beez3
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
// no direct access
defined('_JEXEC') or die;
JHtml::_('behavior.keepalive');
JHtml::_('behavior.formvalidation');
// Create shortcut to parameters.
$params = $this->state->get('params');
//$images = json_decode($this->item->images);
//$urls = json_decode($this->item->urls);
// This checks if the editor config options have ever been saved. If they
haven't they will fall back to the original settings.
$editoroptions = isset($params->show_publishing_options);
if (!$editoroptions):
$params->show_urls_images_frontend = '0';
endif;
$ignoredFieldsets = array('image-intro', 'image-full',
'jmetadata', 'item_associations');
?>
<script type="text/javascript">
Joomla.submitbutton = function(task)
{
if (task === 'article.cancel' ||
document.formvalidator.isValid(document.getElementById('adminForm')))
{
<?php echo
$this->form->getField('articletext')->save(); ?>
Joomla.submitform(task);
}
}
</script>
<div class="edit item-page<?php echo $this->pageclass_sfx;
?>">
<?php if ($params->get('show_page_heading')) : ?>
<h1>
<?php echo $this->escape($params->get('page_heading'));
?>
</h1>
<?php endif; ?>
<form action="<?php echo
JRoute::_('index.php?option=com_content&a_id='.(int)
$this->item->id); ?>" method="post"
name="adminForm" id="adminForm"
class="form-validate">
<fieldset>
<legend><?php echo
JText::_('COM_CONTENT_ARTICLE_CONTENT'); ?></legend>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('title'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('title'); ?>
</div>
</div>
<?php if ($this->item->id === null):?>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('alias'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('alias'); ?>
</div>
</div>
<?php endif; ?>
<div class="btn-group">
<button type="button" class="btn btn-primary"
onclick="Joomla.submitbutton('article.save')">
<?php echo JText::_('JSAVE') ?>
</button>
<button type="button" class="btn"
onclick="Joomla.submitbutton('article.cancel')">
<?php echo JText::_('JCANCEL') ?>
</button>
</div>
<?php if ($this->captchaEnabled) : ?>
<?php echo $this->form->renderField('captcha');
?>
<?php endif; ?>
<?php echo $this->form->getInput('articletext');
?>
</fieldset>
<?php if ($params->get('show_urls_images_frontend') ) :
?>
<fieldset>
<legend><?php echo
JText::_('COM_CONTENT_IMAGES_AND_URLS'); ?></legend>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('image_intro',
'images'); ?>
<?php echo $this->form->getInput('image_intro',
'images'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('image_intro_alt',
'images'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('image_intro_alt',
'images'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo
$this->form->getLabel('image_intro_caption',
'images'); ?>
</div>
<div class="controls">
<?php echo
$this->form->getInput('image_intro_caption',
'images'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('float_intro',
'images'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('float_intro',
'images'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('image_fulltext',
'images'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('image_fulltext',
'images'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo
$this->form->getLabel('image_fulltext_alt',
'images'); ?>
</div>
<div class="controls">
<?php echo
$this->form->getInput('image_fulltext_alt',
'images'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo
$this->form->getLabel('image_fulltext_caption',
'images'); ?>
</div>
<div class="controls">
<?php echo
$this->form->getInput('image_fulltext_caption',
'images'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('float_fulltext',
'images'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('float_fulltext',
'images'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('urla',
'urls'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('urla',
'urls'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('urlatext',
'urls'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('urlatext',
'urls'); ?>
</div>
</div>
<div class="control-group">
<div class="controls">
<?php echo $this->form->getInput('targeta',
'urls'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('urlb',
'urls'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('urlb',
'urls'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('urlbtext',
'urls'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('urlbtext',
'urls'); ?>
</div>
</div>
<div class="control-group">
<div class="controls">
<?php echo $this->form->getInput('targetb',
'urls'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('urlc',
'urls'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('urlc',
'urls'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('urlctext',
'urls'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('urlctext',
'urls'); ?>
</div>
</div>
<div class="control-group">
<div class="controls">
<?php echo $this->form->getInput('targetc',
'urls'); ?>
</div>
</div>
</fieldset>
<?php endif; ?>
<?php // Render additional fieldsets added by plugins. ?>
<?php foreach ($this->form->getFieldsets() as $fieldset) : ?>
<?php if (in_array($fieldset->name, $ignoredFieldsets)) : ?>
<?php continue; ?>
<?php endif; ?>
<fieldset>
<legend><?php echo JText::_($fieldset->label);
?></legend>
<?php $this->fieldset = $fieldset->name; ?>
<?php echo JLayoutHelper::render('joomla.edit.fieldset',
$this); ?>
</fieldset>
<?php endforeach; ?>
<fieldset>
<legend><?php echo JText::_('COM_CONTENT_PUBLISHING');
?></legend>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('catid'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('catid'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('tags'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('tags'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('note'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('note'); ?>
</div>
</div>
<?php if ($params->get('save_history', 0)) : ?>
<div class="control-label">
<?php echo $this->form->getLabel('version_note');
?>
</div>
<div class="controls">
<?php echo $this->form->getInput('version_note');
?>
</div>
<?php endif; ?>
<?php if ($params->get('show_publishing_options', 1) ==
1) : ?>
<div class="control-group">
<div class="control-label">
<?php echo
$this->form->getLabel('created_by_alias'); ?>
</div>
<div class="controls">
<?php echo
$this->form->getInput('created_by_alias'); ?>
</div>
</div>
<?php endif; ?>
<?php if
($this->item->params->get('access-change')) : ?>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('state'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('state'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('featured');
?>
</div>
<div class="controls">
<?php echo $this->form->getInput('featured');
?>
</div>
</div>
<?php if ($params->get('show_publishing_options', 1) ==
1) : ?>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('publish_up');
?>
</div>
<div class="controls">
<?php echo $this->form->getInput('publish_up');
?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('publish_down');
?>
</div>
<div class="controls">
<?php echo $this->form->getInput('publish_down');
?>
</div>
</div>
<?php endif; ?>
<?php endif; ?>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('access'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('access'); ?>
</div>
</div>
<?php if ($this->item->id === null):?>
<div class="control-group">
<div class="control-label">
</div>
<div class="controls">
<?php echo JText::_('COM_CONTENT_ORDERING'); ?>
</div>
</div>
<?php endif; ?>
</fieldset>
<fieldset>
<legend><?php echo JText::_('JFIELD_LANGUAGE_LABEL');
?></legend>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('language'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('language'); ?>
</div>
</div>
</fieldset>
<?php if ($params->get('show_publishing_options', 1) == 1)
: ?>
<fieldset>
<legend><?php echo JText::_('COM_CONTENT_METADATA');
?></legend>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('metadesc'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('metadesc'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('metakey'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('metakey'); ?>
</div>
</div>
</fieldset>
<?php endif; ?>
<input type="hidden" name="task"
value="" />
<input type="hidden" name="return"
value="<?php echo $this->return_page;?>" />
<?php if ($this->params->get('enable_category', 0) ==
1) : ?>
<input type="hidden" name="jform[catid]"
value="<?php echo $this->params->get('catid',
1);?>"/>
<?php endif;?>
<?php echo JHtml::_('form.token'); ?>
</form>
</div>