mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-10-05 17:52:03 +02:00
automatic cast and defaults for boolean attributes
Not all attributes are implemented, as many dont play any role on server-side. Fixes taglist-account multiple="false" returns array(<selected id>)
This commit is contained in:
parent
822b967fe3
commit
e483ec4957
@ -7,8 +7,7 @@
|
|||||||
* @subpackage etemplate
|
* @subpackage etemplate
|
||||||
* @link http://www.egroupware.org
|
* @link http://www.egroupware.org
|
||||||
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||||||
* @copyright 2002-16 by RalfBecker@outdoor-training.de
|
* @copyright 2002-18 by RalfBecker@outdoor-training.de
|
||||||
* @version $Id$
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EGroupware\Api\Etemplate;
|
namespace EGroupware\Api\Etemplate;
|
||||||
@ -43,6 +42,20 @@ class Widget
|
|||||||
*/
|
*/
|
||||||
public $attrs = array();
|
public $attrs = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Names and defaults of boolean attributes to correctly cast them from XML in set_attrs
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $bool_attr_default = array(
|
||||||
|
'disabled' => false,
|
||||||
|
'statustext_html' => false,
|
||||||
|
'no_lang' => false,
|
||||||
|
// strictly speeding only for input widgets, but server-side input-widgets have a validation method, but no shared parent
|
||||||
|
'readonly' => false,
|
||||||
|
'needed' => false,
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Children
|
* Children
|
||||||
*
|
*
|
||||||
@ -213,6 +226,20 @@ class Widget
|
|||||||
$this->attrs = array_merge($this->attrs,self::$request->modifications[$this->id]);
|
$this->attrs = array_merge($this->attrs,self::$request->modifications[$this->id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cast boolean attributes to boolean and set their defaults
|
||||||
|
foreach($this->bool_attr_default as $name => $default_value)
|
||||||
|
{
|
||||||
|
if (!isset($this->attrs[$name]))
|
||||||
|
{
|
||||||
|
$this->attrs[$name] = $default_value;
|
||||||
|
}
|
||||||
|
elseif (!is_bool($this->attrs[$name]))
|
||||||
|
{
|
||||||
|
// use PHP default evaluation, with the exception of "false" --> false
|
||||||
|
$this->attrs[$name] = !(!$this->attrs[$name] || $this->attrs[$name] === 'false');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $template;
|
return $template;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,8 +7,7 @@
|
|||||||
* @subpackage etemplate
|
* @subpackage etemplate
|
||||||
* @link http://www.egroupware.org
|
* @link http://www.egroupware.org
|
||||||
* @author Nathan Gray
|
* @author Nathan Gray
|
||||||
* @copyright 2015 Nathan Gray
|
* @copyright 2015-18 Nathan Gray
|
||||||
* @version $Id$
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EGroupware\Api\Etemplate\Widget;
|
namespace EGroupware\Api\Etemplate\Widget;
|
||||||
@ -20,6 +19,21 @@ use EGroupware\Api\Etemplate;
|
|||||||
*/
|
*/
|
||||||
class AjaxSelect extends Select
|
class AjaxSelect extends Select
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param string|XMLReader $xml string with xml or XMLReader positioned on the element to construct
|
||||||
|
* @throws Api\Exception\WrongParameter
|
||||||
|
*/
|
||||||
|
public function __construct($xml = '')
|
||||||
|
{
|
||||||
|
$this->bool_attr_default += array(
|
||||||
|
'link' => true,
|
||||||
|
);
|
||||||
|
|
||||||
|
parent::__construct($xml);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fill type options in self::$request->sel_options to be used on the client
|
* Fill type options in self::$request->sel_options to be used on the client
|
||||||
*
|
*
|
||||||
|
@ -7,8 +7,7 @@
|
|||||||
* @subpackage etemplate
|
* @subpackage etemplate
|
||||||
* @link http://www.egroupware.org
|
* @link http://www.egroupware.org
|
||||||
* @author Nathan Gray
|
* @author Nathan Gray
|
||||||
* @copyright 2011 Nathan Gray
|
* @copyright 2011-18 Nathan Gray
|
||||||
* @version $Id$
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EGroupware\Api\Etemplate\Widget;
|
namespace EGroupware\Api\Etemplate\Widget;
|
||||||
@ -42,6 +41,10 @@ class File extends Etemplate\Widget
|
|||||||
*/
|
*/
|
||||||
public function __construct($xml='')
|
public function __construct($xml='')
|
||||||
{
|
{
|
||||||
|
$this->bool_attr_default += array(
|
||||||
|
'multiple' => false,
|
||||||
|
);
|
||||||
|
|
||||||
if($xml) parent::__construct($xml);
|
if($xml) parent::__construct($xml);
|
||||||
|
|
||||||
// Legacy multiple - id ends in []
|
// Legacy multiple - id ends in []
|
||||||
|
@ -7,8 +7,7 @@
|
|||||||
* @subpackage etemplate
|
* @subpackage etemplate
|
||||||
* @link http://www.egroupware.org
|
* @link http://www.egroupware.org
|
||||||
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||||||
* @copyright 2002-16 by RalfBecker@outdoor-training.de
|
* @copyright 2002-18 by RalfBecker@outdoor-training.de
|
||||||
* @version $Id$
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EGroupware\Api\Etemplate\Widget;
|
namespace EGroupware\Api\Etemplate\Widget;
|
||||||
@ -83,6 +82,14 @@ class Select extends Etemplate\Widget
|
|||||||
*/
|
*/
|
||||||
public function __construct($xml = '')
|
public function __construct($xml = '')
|
||||||
{
|
{
|
||||||
|
$this->bool_attr_default += array(
|
||||||
|
//'multiple' => false, // handeled in set_attrs, as we additional allow "dynamic"
|
||||||
|
'selected_first' => true,
|
||||||
|
'search' => false,
|
||||||
|
'tags' => false,
|
||||||
|
'allow_single_deselect' => true,
|
||||||
|
);
|
||||||
|
|
||||||
if($xml) {
|
if($xml) {
|
||||||
parent::__construct($xml);
|
parent::__construct($xml);
|
||||||
}
|
}
|
||||||
@ -102,6 +109,12 @@ class Select extends Etemplate\Widget
|
|||||||
{
|
{
|
||||||
parent::set_attrs($xml, $cloned);
|
parent::set_attrs($xml, $cloned);
|
||||||
|
|
||||||
|
if ($this->attrs['multiple'] !== 'dynamic')
|
||||||
|
{
|
||||||
|
$this->attrs['multiple'] = !isset($this->attrs['multiple']) ? false :
|
||||||
|
!(!$this->attrs['multiple'] || $this->attrs['multiple'] === 'false');
|
||||||
|
}
|
||||||
|
|
||||||
// set attrs[multiple] from attrs[options], unset options only if it just contains number or rows
|
// set attrs[multiple] from attrs[options], unset options only if it just contains number or rows
|
||||||
if ($this->attrs['options'] > 1)
|
if ($this->attrs['options'] > 1)
|
||||||
{
|
{
|
||||||
|
@ -7,8 +7,7 @@
|
|||||||
* @subpackage etemplate
|
* @subpackage etemplate
|
||||||
* @link http://www.egroupware.org
|
* @link http://www.egroupware.org
|
||||||
* @author Nathan Gray
|
* @author Nathan Gray
|
||||||
* @copyright 2013 Nathan Gray
|
* @copyright 2013-18 Nathan Gray
|
||||||
* @version $Id$
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EGroupware\Api\Etemplate\Widget;
|
namespace EGroupware\Api\Etemplate\Widget;
|
||||||
@ -42,7 +41,17 @@ class Taglist extends Etemplate\Widget
|
|||||||
*/
|
*/
|
||||||
public function __construct($xml = '')
|
public function __construct($xml = '')
|
||||||
{
|
{
|
||||||
$this->attrs['allowFreeEntries'] = true;
|
$this->bool_attr_default = array_merge($this->bool_attr_default, array(
|
||||||
|
'allowFreeEntries' => true,
|
||||||
|
'useCommaKey' => true,
|
||||||
|
'editModeEnabled' => true,
|
||||||
|
// inherited on js-side from Selextbox
|
||||||
|
'multiple' => true,
|
||||||
|
'selected_first' => true,
|
||||||
|
'search' => false,
|
||||||
|
'tags' => false,
|
||||||
|
'allow_single_deselect' => true,
|
||||||
|
));
|
||||||
|
|
||||||
if($xml) {
|
if($xml) {
|
||||||
parent::__construct($xml);
|
parent::__construct($xml);
|
||||||
|
@ -7,8 +7,7 @@
|
|||||||
* @subpackage etemplate
|
* @subpackage etemplate
|
||||||
* @link http://www.egroupware.org
|
* @link http://www.egroupware.org
|
||||||
* @author Nathan Gray
|
* @author Nathan Gray
|
||||||
* @copyright 2012 Nathan Gray
|
* @copyright 2012-18 Nathan Gray
|
||||||
* @version $Id$
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EGroupware\Api\Etemplate\Widget;
|
namespace EGroupware\Api\Etemplate\Widget;
|
||||||
@ -111,6 +110,24 @@ class Tree extends Etemplate\Widget
|
|||||||
*/
|
*/
|
||||||
const NOCHECKBOX = 'nocheckbox';
|
const NOCHECKBOX = 'nocheckbox';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param string|XMLReader $xml string with xml or XMLReader positioned on the element to construct
|
||||||
|
* @throws Api\Exception\WrongParameter
|
||||||
|
*/
|
||||||
|
public function __construct($xml = '')
|
||||||
|
{
|
||||||
|
$this->bool_attr_default += array(
|
||||||
|
'multiple' => false,
|
||||||
|
'highlighting' => true,
|
||||||
|
);
|
||||||
|
|
||||||
|
if($xml) {
|
||||||
|
parent::__construct($xml);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse and set extra attributes from xml in template object
|
* Parse and set extra attributes from xml in template object
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user