joomla_test/modules/mod_roknavmenu/lib/RokSubfieldForm.php

183 lines
5.4 KiB
PHP
Raw Normal View History

2020-01-02 22:20:31 +07:00
<?php
/**
* @version $Id: RokSubfieldForm.php 10623 2013-05-23 23:37:15Z steph $
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2013 RocketTheme, LLC
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
*/
if(!class_exists('RokSubfieldForm')){
class RokSubfieldForm extends JForm
{
static $instances = array();
protected $original_params;
public static function getInstanceFromForm(JForm $form)
{
if (!array_key_exists($form->getName(), self::$instances))
{
self::$instances[$form->getName()] = new RokSubfieldForm($form);
}
self::$instances[$form->getName()]->updateDataParams();
return self::$instances[$form->getName()];
}
public function __construct(JForm &$form)
{
$form_vars = get_object_vars($form);
foreach ($form_vars as $form_var_name => $form_var_value)
{
$this->$form_var_name = $form_var_value;
}
}
public function makeSubfieldsVisable(){
$subs = $this->xml->xpath('//subfields/fieldset/field');
foreach($subs as $sub){
$field =& $this->xml->config[0]->fields->fieldset[0]->addChild('field');
foreach($sub->attributes() as $aname=>$aval){
$field->addAttribute($aname,$aval);
}
}
}
/**
* Method to get an array of <field /> elements from the form XML document which are
* in a specified fieldset by name.
*
* @param string $name The name of the fieldset.
*
* @return mixed Boolean false on error or array of JXMLElement objects.
* @since 1.6
*/
protected function & findFieldsBySubFieldset($subtype, $name)
{
// Initialise variables.
$false = false;
// Make sure there is a valid JForm XML document.
$version = new JVersion();
if (!($this->xml instanceof SimpleXMLElement) && (version_compare($version->getShortVersion(), '3.0', '>='))) {
return false;
} elseif (!($this->xml instanceof JXMLElement) && (version_compare($version->getShortVersion(), '3.0', '<'))) {
return false;
}
/*
* Get an array of <field /> elements that are underneath a <fieldset /> element
* with the appropriate name attribute, and also any <field /> elements with
* the appropriate fieldset attribute.
*/
$fields = $this->xml->xpath('//subfields[@name="'.$subtype.'"]/fieldset[@name="'.$name.'"]/field');
return $fields;
}
/**
* Method to get an array of JFormField objects in a given fieldset by name. If no name is
* given then all fields are returned.
*
* @param string $set The optional name of the fieldset.
*
* @return array The array of JFormField objects in the fieldset.
* @since 1.6
*/
public function getSubFieldset($subtype, $set, $group="params")
{
// Initialise variables.
$fields = array();
$elements = $this->findFieldsBySubFieldset($subtype, $set);
// 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)
{
// If the field is successfully loaded add it to the result array.
if ($field = $this->loadField($element, $group)) {
$fields[$field->id] = $field;
}
}
return $fields;
}
public function setOriginalParams($original_params)
{
$this->original_params = $original_params;
}
public function getOriginalParams()
{
return $this->original_params;
}
public function updateDataParams()
{
if (isset($this->original_params) && (is_array($this->original_params))){
foreach($this->original_params as $param_name => $param_value){
$this->data->set('params.'.$param_name, $param_value);
}
}
}
/**
* Method to get an array of fieldset objects optionally filtered over a given field group.
*
* @param string $group The dot-separated form group path on which to filter the fieldsets.
*
* @return array The array of fieldset objects.
* @since 1.6
*/
public function getSubFieldsets($subfield_type)
{
// Initialise variables.
$fieldsets = array();
$sets = array();
// Make sure there is a valid JForm XML document.
$version = new JVersion();
if (!($this->xml instanceof SimpleXMLElement) && (version_compare($version->getShortVersion(), '3.0', '>='))) {
return $fieldsets;
} elseif (!($this->xml instanceof JXMLElement) && (version_compare($version->getShortVersion(), '3.0', '<'))) {
return $fieldsets;
}
// Get an array of <fieldset /> elements and fieldset attributes.
$sets = $this->xml->xpath('//subfields[@name="'.$subfield_type.'"]/fieldset');
// If no fieldsets are found return empty.
if (empty($sets)) {
return $fieldsets;
}
// Process each found fieldset.
foreach ($sets as $set)
{
// Only create it if it doesn't already exist.
if (empty($fieldsets[(string) $set['name']])) {
// Build the fieldset object.
$fieldset = (object) array('name' => '', 'label' => '', 'description' => '');
foreach ($set->attributes() as $name => $value)
{
$fieldset->$name = (string) $value;
}
// Add the fieldset object to the list.
$fieldsets[$fieldset->name] = $fieldset;
}
}
return $fieldsets;
}
}
}