110 lines
3.3 KiB
PHP
110 lines
3.3 KiB
PHP
<?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('F0F_INCLUDED') or die;
|
|
|
|
/**
|
|
* Generic field header, with drop down filters
|
|
*
|
|
* @package FrameworkOnFramework
|
|
* @since 2.0
|
|
*/
|
|
class F0FFormHeaderFieldselectable extends F0FFormHeaderField
|
|
{
|
|
/**
|
|
* 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 = F0FTemplateUtils::parsePath($source_file, true);
|
|
|
|
if (F0FPlatform::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;
|
|
}
|
|
}
|