961 lines
29 KiB
PHP
961 lines
29 KiB
PHP
<?php
|
|
|
|
/**
|
|
*
|
|
* unite settings class.
|
|
* @version 1.1
|
|
*
|
|
*/
|
|
|
|
class UniteSettingsRev{
|
|
|
|
const COLOR_OUTPUT_FLASH = "flash";
|
|
const COLOR_OUTPUT_HTML = "html";
|
|
|
|
//------------------------------------------------------------
|
|
|
|
const RELATED_NONE = "";
|
|
const TYPE_TEXT = "text";
|
|
const TYPE_COLOR = "color";
|
|
const TYPE_SELECT = "list";
|
|
const TYPE_CHECKBOX = "checkbox";
|
|
const TYPE_RADIO = "radio";
|
|
const TYPE_TEXTAREA = "textarea";
|
|
const TYPE_STATIC_TEXT = "statictext";
|
|
const TYPE_HR = "hr";
|
|
const TYPE_CUSTOM = "custom";
|
|
const ID_PREFIX = "";
|
|
const TYPE_CONTROL = "control";
|
|
const TYPE_BUTTON = "button";
|
|
const TYPE_IMAGE = "image";
|
|
const TYPE_CHECKLIST = "checklist";
|
|
|
|
//------------------------------------------------------------
|
|
//set data types
|
|
const DATATYPE_NUMBER = "number";
|
|
const DATATYPE_STRING = "string";
|
|
const DATATYPE_BOOLEAN = "boolean";
|
|
|
|
const CONTROL_TYPE_ENABLE = "enable";
|
|
const CONTROL_TYPE_DISABLE = "disable";
|
|
const CONTROL_TYPE_SHOW = "show";
|
|
const CONTROL_TYPE_HIDE = "hide";
|
|
|
|
//additional parameters that can be added to settings.
|
|
const PARAM_TEXTSTYLE = "textStyle";
|
|
const PARAM_ADDPARAMS = "addparams"; //additional text after the field
|
|
const PARAM_ADDTEXT = "addtext"; //additional text after the field
|
|
const PARAM_ADDTEXT_BEFORE_ELEMENT = "addtext_before_element"; //additional text after the field
|
|
const PARAM_CELLSTYLE = "cellStyle"; //additional text after the field
|
|
|
|
//view defaults:
|
|
protected $defaultText = "Enter value";
|
|
protected $sap_size = 5;
|
|
|
|
//other variables:
|
|
protected $HRIdCounter = 0; //counter of hr id
|
|
|
|
protected $arrSettings = array();
|
|
protected $arrSections = array();
|
|
protected $arrIndex = array(); //index of name->index of the settings.
|
|
protected $arrSaps = array();
|
|
|
|
//controls:
|
|
protected $arrControls = array(); //array of items that controlling others (hide/show or enabled/disabled)
|
|
protected $arrBulkControl = array(); //bulk cotnrol array. if not empty, every settings will be connected with control.
|
|
|
|
//custom functions:
|
|
protected $customFunction_afterSections = null;
|
|
protected $colorOutputType = self::COLOR_OUTPUT_HTML;
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
// constructor
|
|
public function __construct(){
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
// get where query according relatedTo and relatedID.
|
|
private function getWhereQuery(){
|
|
$where = "relatedTo='".$this->relatedTo."' and relatedID='".$this->relatedID."'";
|
|
return($where);
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//set type of color output
|
|
public function setColorOutputType($type){
|
|
$this->colorOutputType = $type;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//set the related to/id for saving/restoring settings.
|
|
public function setRelated($relatedTo,$relatedID){
|
|
$this->relatedTo = $relatedTo;
|
|
$this->relatedID = $relatedID;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//modify the data before save
|
|
private function modifySettingsData($arrSettings){
|
|
|
|
foreach($arrSettings as $key=>$content){
|
|
switch(getType($content)){
|
|
case "string":
|
|
//replace the unicode line break (sometimes left after json)
|
|
$content = str_replace("u000a","\n",$content);
|
|
$content = str_replace("u000d","",$content);
|
|
break;
|
|
case "object":
|
|
case "array":
|
|
$content = UniteFunctionsRev::convertStdClassToArray($content);
|
|
break;
|
|
}
|
|
|
|
$arrSettings[$key] = $content;
|
|
}
|
|
|
|
return($arrSettings);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
// add the section value to the setting
|
|
private function checkAndAddSectionAndSap($setting){
|
|
//add section
|
|
if(!empty($this->arrSections)){
|
|
$sectionKey = count($this->arrSections)-1;
|
|
$setting["section"] = $sectionKey;
|
|
$section = $this->arrSections[$sectionKey];
|
|
$sapKey = count($section["arrSaps"])-1;
|
|
$setting["sap"] = $sapKey;
|
|
}
|
|
else{
|
|
//please impliment add sap normal!!! - without sections
|
|
}
|
|
return($setting);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
// validate items parameter. throw exception on error
|
|
private function validateParamItems($arrParams){
|
|
if(!isset($arrParams["items"])) throw new Exception("no select items presented");
|
|
if(!is_array($arrParams["items"])) throw new Exception("the items parameter should be array");
|
|
if(empty($arrParams["items"])) throw new Exception("the items array should not be empty");
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add this setting to index
|
|
private function addSettingToIndex($name){
|
|
$this->arrIndex[$name] = count($this->arrSettings)-1;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//get types array from all the settings:
|
|
protected function getArrTypes(){
|
|
$arrTypesAssoc = array();
|
|
$arrTypes = array();
|
|
foreach($this->arrSettings as $setting){
|
|
$type = $setting["type"];
|
|
if(!isset($arrTypesAssoc[$type])) $arrTypes[] = $type;
|
|
$arrTypesAssoc[$type] = "";
|
|
}
|
|
return($arrTypes);
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
// get json client object for javascript
|
|
public function getJsonClientString(){
|
|
$arrSettingTypes = array();
|
|
foreach($this->arrSettings as $setting){
|
|
if(isset($setting["name"]))
|
|
$arrSettingTypes[$setting["name"]] = $setting["datatype"];
|
|
}
|
|
$strJson = json_encode($arrSettingTypes);
|
|
return($strJson);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* get settings array
|
|
*/
|
|
public function getArrSettings(){
|
|
return($this->arrSettings);
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* get sections
|
|
*/
|
|
public function getArrSections(){
|
|
return($this->arrSections);
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* get controls
|
|
*/
|
|
public function getArrControls(){
|
|
return($this->arrControls);
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* set settings array
|
|
*/
|
|
public function setArrSettings($arrSettings){
|
|
$this->arrSettings = $arrSettings;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//get number of settings
|
|
public function getNumSettings(){
|
|
$counter = 0;
|
|
foreach($this->arrSettings as $setting){
|
|
switch($setting["type"]){
|
|
case self::TYPE_HR:
|
|
case self::TYPE_STATIC_TEXT:
|
|
break;
|
|
default:
|
|
$counter++;
|
|
break;
|
|
}
|
|
}
|
|
return($counter);
|
|
}
|
|
|
|
//private function
|
|
//-----------------------------------------------------------------------------------------------
|
|
// add radio group
|
|
public function addRadio($name,$arrItems,$text = "",$defaultItem="",$arrParams = array()){
|
|
$params = array("items"=>$arrItems);
|
|
$params = array_merge($params,$arrParams);
|
|
$this->add($name,$defaultItem,$text,self::TYPE_RADIO,$params);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add text area control
|
|
public function addTextArea($name,$defaultValue,$text,$arrParams = array()){
|
|
$this->add($name,$defaultValue,$text,self::TYPE_TEXTAREA,$arrParams);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add button control
|
|
public function addButton($name,$value,$arrParams = array()){
|
|
$this->add($name,$value,"",self::TYPE_BUTTON,$arrParams);
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
// add checkbox element
|
|
public function addCheckbox($name,$defaultValue = false,$text = "",$arrParams = array()){
|
|
$this->add($name,$defaultValue,$text,self::TYPE_CHECKBOX,$arrParams);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add text box element
|
|
public function addTextBox($name,$defaultValue = "",$text = "",$arrParams = array()){
|
|
$this->add($name,$defaultValue,$text,self::TYPE_TEXT,$arrParams);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add image selector
|
|
public function addImage($name,$defaultValue = "",$text = "",$arrParams = array()){
|
|
$this->add($name,$defaultValue,$text,self::TYPE_IMAGE,$arrParams);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add color picker setting
|
|
public function addColorPicker($name,$defaultValue = "",$text = "",$arrParams = array()){
|
|
$this->add($name,$defaultValue,$text,self::TYPE_COLOR,$arrParams);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* add custom setting
|
|
*/
|
|
public function addCustom($customType,$name,$defaultValue = "",$text = "",$arrParams = array()){
|
|
$params = array();
|
|
$params["custom_type"] = $customType;
|
|
$params = array_merge($params,$arrParams);
|
|
|
|
$this->add($name,$defaultValue,$text,self::TYPE_CUSTOM,$params);
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add horezontal sap
|
|
public function addHr($name="",$params=array()){
|
|
$setting = array();
|
|
$setting["type"] = self::TYPE_HR;
|
|
|
|
//set item name
|
|
$itemName = "";
|
|
if($name != "") $itemName = $name;
|
|
else{ //generate hr id
|
|
$this->HRIdCounter++;
|
|
$itemName = "hr".$this->HRIdCounter;
|
|
}
|
|
|
|
$setting["id"] = self::ID_PREFIX.$itemName;
|
|
$setting["id_row"] = $setting["id"]."_row";
|
|
|
|
//addsection and sap keys
|
|
$setting = $this->checkAndAddSectionAndSap($setting);
|
|
|
|
$this->checkAddBulkControl($itemName);
|
|
|
|
$setting = array_merge($params,$setting);
|
|
$this->arrSettings[] = $setting;
|
|
|
|
//add to settings index
|
|
$this->addSettingToIndex($itemName);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add static text
|
|
public function addStaticText($text,$name="",$params=array()){
|
|
$setting = array();
|
|
$setting["type"] = self::TYPE_STATIC_TEXT;
|
|
|
|
//set item name
|
|
$itemName = "";
|
|
if($name != "") $itemName = $name;
|
|
else{ //generate hr id
|
|
$this->HRIdCounter++;
|
|
$itemName = "textitem".$this->HRIdCounter;
|
|
}
|
|
|
|
$setting["id"] = self::ID_PREFIX.$itemName;
|
|
$setting["id_row"] = $setting["id"]."_row";
|
|
$setting["text"] = $text;
|
|
|
|
$this->checkAddBulkControl($itemName);
|
|
|
|
$params = array_merge($params,$setting);
|
|
|
|
//addsection and sap keys
|
|
$setting = $this->checkAndAddSectionAndSap($setting);
|
|
|
|
$this->arrSettings[] = $setting;
|
|
|
|
//add to settings index
|
|
$this->addSettingToIndex($itemName);
|
|
}
|
|
|
|
/**
|
|
* add select setting
|
|
*/
|
|
public function addSelect($name,$arrItems,$text,$defaultItem="",$arrParams=array()){
|
|
$params = array("items"=>$arrItems);
|
|
$params = array_merge($params,$arrParams);
|
|
$this->add($name,$defaultItem,$text,self::TYPE_SELECT,$params);
|
|
}
|
|
|
|
|
|
/**
|
|
* add select setting
|
|
*/
|
|
public function addChecklist($name,$arrItems,$text,$defaultItem="",$arrParams=array()){
|
|
$params = array("items"=>$arrItems);
|
|
$params = array_merge($params,$arrParams);
|
|
$this->add($name,$defaultItem,$text,self::TYPE_CHECKLIST,$params);
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* add saporator
|
|
*/
|
|
public function addSap($text, $name="", $opened = false){
|
|
|
|
if(empty($text))
|
|
UniteFunctionsRev::throwError("sap $name must have a text");
|
|
|
|
//create sap array
|
|
$sap = array();
|
|
$sap["name"] = $name;
|
|
$sap["text"] = $text;
|
|
|
|
if($opened == true) $sap["opened"] = true;
|
|
|
|
//add sap to current section
|
|
if(!empty($this->arrSections)){
|
|
$lastSection = end($this->arrSections);
|
|
$section_keys = array_keys($this->arrSections);
|
|
$lastSectionKey = end($section_keys);
|
|
$arrSaps = $lastSection["arrSaps"];
|
|
$arrSaps[] = $sap;
|
|
$this->arrSections[$lastSectionKey]["arrSaps"] = $arrSaps;
|
|
$sap_keys = array_keys($arrSaps);
|
|
$sapKey = end($sap_keys);
|
|
}
|
|
else{
|
|
$this->arrSaps[] = $sap;
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//get sap data:
|
|
public function getSap($sapKey,$sectionKey=-1){
|
|
//get sap without sections:
|
|
if($sectionKey == -1) return($this->arrSaps[$sapKey]);
|
|
if(!isset($this->arrSections[$sectionKey])) throw new Exception("Sap on section:".$sectionKey." doesn't exists");
|
|
$arrSaps = $this->arrSections[$sectionKey]["arrSaps"];
|
|
if(!isset($arrSaps[$sapKey])) throw new Exception("Sap with key:".$sapKey." doesn't exists");
|
|
$sap = $arrSaps[$sapKey];
|
|
return($sap);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
// add a new section. Every settings from now on will be related to this section
|
|
public function addSection($label,$name=""){
|
|
|
|
if(!empty($this->arrSettings) && empty($this->arrSections))
|
|
UniteFunctionsRev::throwError("You should add first section before begin to add settings. (section: $text)");
|
|
|
|
if(empty($label))
|
|
UniteFunctionsRev::throwError("You have some section without text");
|
|
|
|
$arrSection = array(
|
|
"text"=>$label,
|
|
"arrSaps"=>array(),
|
|
"name"=>$name
|
|
);
|
|
|
|
$this->arrSections[] = $arrSection;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add setting, may be in different type, of values
|
|
protected function add($name,$defaultValue = "",$text = "",$type = self::TYPE_TEXT,$arrParams = array()){
|
|
|
|
//validation:
|
|
if(empty($name)) throw new Exception("Every setting should have a name!");
|
|
|
|
switch($type){
|
|
case self::TYPE_RADIO:
|
|
case self::TYPE_SELECT:
|
|
$this->validateParamItems($arrParams);
|
|
break;
|
|
case self::TYPE_CHECKBOX:
|
|
if(!is_bool($defaultValue)) throw new Exception("The checkbox value should be boolean");
|
|
break;
|
|
}
|
|
|
|
//validate name:
|
|
if(isset($this->arrIndex[$name])) throw new Exception("Duplicate setting name:".$name);
|
|
|
|
$this->checkAddBulkControl($name);
|
|
|
|
//set defaults:
|
|
if($text == "") $text = $this->defaultText;
|
|
|
|
$setting = array();
|
|
$setting["name"] = $name;
|
|
$setting["id"] = self::ID_PREFIX.$name;
|
|
$setting["id_service"] = $setting["id"]."_service";
|
|
$setting["id_row"] = $setting["id"]."_row";
|
|
$setting["type"] = $type;
|
|
$setting["text"] = $text;
|
|
$setting["value"] = $defaultValue;
|
|
|
|
//set data type:
|
|
switch($setting["type"]){
|
|
case self::TYPE_COLOR:
|
|
$dataType = self::DATATYPE_STRING;
|
|
break;
|
|
default:
|
|
switch(getType($defaultValue)){
|
|
case "integer":
|
|
case "double":
|
|
$dataType = self::DATATYPE_NUMBER;
|
|
break;
|
|
case "boolean":
|
|
$dataType = self::DATATYPE_BOOLEAN;
|
|
break;
|
|
case "string":
|
|
default:
|
|
$dataType = self::DATATYPE_STRING;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
$setting["datatype"] = $dataType;
|
|
|
|
$setting = array_merge($setting,$arrParams);
|
|
|
|
//addsection and sap keys
|
|
$setting = $this->checkAndAddSectionAndSap($setting);
|
|
|
|
$this->arrSettings[] = $setting;
|
|
|
|
//add to settings index
|
|
$this->addSettingToIndex($name);
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add a item that controlling visibility of enabled/disabled of other.
|
|
public function addControl($control_item_name,$controlled_item_name,$control_type,$value){
|
|
|
|
UniteFunctionsRev::validateNotEmpty($control_item_name,"control parent");
|
|
UniteFunctionsRev::validateNotEmpty($controlled_item_name,"control child");
|
|
UniteFunctionsRev::validateNotEmpty($control_type,"control type");
|
|
UniteFunctionsRev::validateNotEmpty($value,"control value");
|
|
|
|
$arrControl = array();
|
|
if(isset($this->arrControls[$control_item_name]))
|
|
$arrControl = $this->arrControls[$control_item_name];
|
|
$arrControl[] = array("name"=>$controlled_item_name,"type"=>$control_type,"value"=>$value);
|
|
$this->arrControls[$control_item_name] = $arrControl;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//start control of all settings that comes after this function (between startBulkControl and endBulkControl)
|
|
public function startBulkControl($control_item_name,$control_type,$value){
|
|
$this->arrBulkControl = array("control_name"=>$control_item_name,"type"=>$control_type,"value"=>$value);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//end bulk control
|
|
public function endBulkControl(){
|
|
$this->arrBulkControl = array();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//build name->(array index) of the settings.
|
|
private function buildArrSettingsIndex(){
|
|
$this->arrIndex = array();
|
|
foreach($this->arrSettings as $key=>$value)
|
|
if(isset($value["name"])) $this->arrIndex[$value["name"]] = $key;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
// set sattes of the settings (enabled/disabled, visible/invisible) by controls
|
|
public function setSettingsStateByControls(){
|
|
|
|
foreach($this->arrControls as $control_name => $arrControlled){
|
|
//take the control value
|
|
if(!isset($this->arrIndex[$control_name])) throw new Exception("There is not sutch control setting: '$control_name'");
|
|
$index = $this->arrIndex[$control_name];
|
|
$parentValue = strtolower($this->arrSettings[$index]["value"]);
|
|
|
|
//set child (controlled) attributes
|
|
foreach($arrControlled as $controlled){
|
|
if(!isset($this->arrIndex[$controlled["name"]])) throw new Exception("There is not sutch controlled setting: '".$controlled["name"]."'");
|
|
$indexChild = $this->arrIndex[$controlled["name"]];
|
|
$child = $this->arrSettings[$indexChild];
|
|
$value = strtolower($controlled["value"]);
|
|
switch($controlled["type"]){
|
|
case self::CONTROL_TYPE_ENABLE:
|
|
if($value != $parentValue) $child["disabled"] = true;
|
|
break;
|
|
case self::CONTROL_TYPE_DISABLE:
|
|
if($value == $parentValue) $child["disabled"] = true;
|
|
break;
|
|
case self::CONTROL_TYPE_SHOW:
|
|
if($value != $parentValue) $child["hidden"] = true;
|
|
break;
|
|
case self::CONTROL_TYPE_HIDE:
|
|
if($value == $parentValue) $child["hidden"] = true;
|
|
break;
|
|
}
|
|
$this->arrSettings[$indexChild] = $child;
|
|
}
|
|
}//end foreach
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//check that bulk control is available , and add some element to it.
|
|
private function checkAddBulkControl($name){
|
|
//add control
|
|
if(!empty($this->arrBulkControl))
|
|
$this->addControl($this->arrBulkControl["control_name"],$name,$this->arrBulkControl["type"],$this->arrBulkControl["value"]);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//set custom function that will be run after sections will be drawen
|
|
public function setCustomDrawFunction_afterSections($func){
|
|
$this->customFunction_afterSections = $func;
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* parse options from xml field
|
|
* @param $field
|
|
*/
|
|
private function getOptionsFromXMLField($field,$fieldName){
|
|
$arrOptions = array();
|
|
|
|
$arrField = (array)$field;
|
|
$options = UniteFunctionsRev::getVal($arrField, "option");
|
|
|
|
if(empty($options))
|
|
return($arrOptions);
|
|
|
|
foreach($options as $option){
|
|
|
|
if(gettype($option) == "string")
|
|
UniteFunctionsRev::throwError("Wrong options type: ".$option." in field: $fieldName");
|
|
|
|
$attribs = $option->attributes();
|
|
|
|
$optionValue = (string)UniteFunctionsRev::getVal($attribs, "value");
|
|
$optionText = (string)UniteFunctionsRev::getVal($attribs, "text");
|
|
|
|
//validate options:
|
|
UniteFunctionsRev::validateNotEmpty($optionValue,"option value");
|
|
UniteFunctionsRev::validateNotEmpty($optionText,"option text");
|
|
|
|
$arrOptions[$optionValue] = $optionText;
|
|
}
|
|
|
|
return($arrOptions);
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* load settings from xml file
|
|
*/
|
|
public function loadXMLFile($filepath){
|
|
|
|
if(!file_exists($filepath))
|
|
UniteFunctionsRev::throwError("File: '$filepath' not exists!!!");
|
|
|
|
$obj = simplexml_load_file($filepath);
|
|
|
|
if(empty($obj))
|
|
UniteFunctionsRev::throwError("Wrong xml file format: $filepath");
|
|
|
|
$fieldsets = $obj->fieldset;
|
|
if(!@count($obj->fieldset)){
|
|
$fieldsets = array($fieldsets);
|
|
}
|
|
|
|
$this->addSection("Xml Settings");
|
|
|
|
foreach($fieldsets as $fieldset){
|
|
|
|
//Add Section
|
|
$attribs = $fieldset->attributes();
|
|
|
|
$sapName = (string)UniteFunctionsRev::getVal($attribs, "name");
|
|
$sapLabel = (string)UniteFunctionsRev::getVal($attribs, "label");
|
|
|
|
UniteFunctionsRev::validateNotEmpty($sapName,"sapName");
|
|
UniteFunctionsRev::validateNotEmpty($sapLabel,"sapLabel");
|
|
|
|
$this->addSap($sapLabel,$sapName);
|
|
|
|
//--- add fields
|
|
$fieldset = (array)$fieldset;
|
|
$fields = $fieldset["field"];
|
|
|
|
if(is_array($fields) == false)
|
|
$fields = array($fields);
|
|
|
|
foreach($fields as $field){
|
|
$attribs = $field->attributes();
|
|
$fieldType = (string)UniteFunctionsRev::getVal($attribs, "type");
|
|
$fieldName = (string)UniteFunctionsRev::getVal($attribs, "name");
|
|
$fieldLabel = (string)UniteFunctionsRev::getVal($attribs, "label");
|
|
$fieldDefaultValue = (string)UniteFunctionsRev::getVal($attribs, "default");
|
|
|
|
//all other params will be added to "params array".
|
|
$arrMustParams = array("type","name","label","default");
|
|
|
|
$arrParams = array();
|
|
|
|
foreach($attribs as $key=>$value){
|
|
$key = (string)$key;
|
|
$value = (string)$value;
|
|
|
|
//skip must params:
|
|
if(in_array($key, $arrMustParams))
|
|
continue;
|
|
|
|
$arrParams[$key] = $value;
|
|
}
|
|
|
|
$options = $this->getOptionsFromXMLField($field,$fieldName);
|
|
|
|
//validate must fields:
|
|
UniteFunctionsRev::validateNotEmpty($fieldType,"type");
|
|
|
|
//validate name
|
|
if($fieldType != self::TYPE_HR && $fieldType != self::TYPE_CONTROL &&
|
|
$fieldType != "bulk_control_start" && $fieldType != "bulk_control_end")
|
|
UniteFunctionsRev::validateNotEmpty($fieldName,"name");
|
|
switch ($fieldType){
|
|
case self::TYPE_CHECKBOX:
|
|
$fieldDefaultValue = UniteFunctionsRev::strToBool($fieldDefaultValue);
|
|
$this->addCheckbox($fieldName,$fieldDefaultValue,$fieldLabel,$arrParams);
|
|
break;
|
|
case self::TYPE_COLOR:
|
|
$this->addColorPicker($fieldName,$fieldDefaultValue,$fieldLabel,$arrParams);
|
|
break;
|
|
case self::TYPE_HR:
|
|
$this->addHr();
|
|
break;
|
|
case self::TYPE_TEXT:
|
|
$this->addTextBox($fieldName,$fieldDefaultValue,$fieldLabel,$arrParams);
|
|
break;
|
|
case self::TYPE_STATIC_TEXT:
|
|
$this->addStaticText($fieldLabel, $fieldName, $arrParams);
|
|
break;
|
|
case self::TYPE_IMAGE:
|
|
$this->addImage($fieldName,$fieldDefaultValue,$fieldLabel,$arrParams);
|
|
break;
|
|
case self::TYPE_SELECT:
|
|
$this->addSelect($fieldName, $options, $fieldLabel,$fieldDefaultValue,$arrParams);
|
|
break;
|
|
case self::TYPE_CHECKBOX:
|
|
$this->addChecklist($fieldName, $options, $fieldLabel,$fieldDefaultValue,$arrParams);
|
|
break;
|
|
case self::TYPE_RADIO:
|
|
$this->addRadio($fieldName, $options, $fieldLabel,$fieldDefaultValue,$arrParams);
|
|
break;
|
|
case self::TYPE_TEXTAREA:
|
|
$this->addTextArea($fieldName, $fieldDefaultValue, $fieldLabel, $arrParams);
|
|
break;
|
|
case self::TYPE_CUSTOM:
|
|
$this->add($fieldName, $fieldDefaultValue, $fieldLabel, self::TYPE_CUSTOM, $arrParams);
|
|
break;
|
|
case self::TYPE_CONTROL:
|
|
$parent = UniteFunctionsRev::getVal($arrParams, "parent");
|
|
$child = UniteFunctionsRev::getVal($arrParams, "child");
|
|
$ctype = UniteFunctionsRev::getVal($arrParams, "ctype");
|
|
$value = UniteFunctionsRev::getVal($arrParams, "value");
|
|
$this->addControl($parent, $child, $ctype, $value);
|
|
break;
|
|
case "bulk_control_start":
|
|
$parent = UniteFunctionsRev::getVal($arrParams, "parent");
|
|
$ctype = UniteFunctionsRev::getVal($arrParams, "ctype");
|
|
$value = UniteFunctionsRev::getVal($arrParams, "value");
|
|
|
|
$this->startBulkControl($parent, $ctype, $value);
|
|
break;
|
|
case "bulk_control_end":
|
|
$this->endBulkControl();
|
|
break;
|
|
default:
|
|
UniteFunctionsRev::throwError("wrong type: $fieldType");
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* get titles and descriptions array
|
|
*/
|
|
public function getArrTextFromAllSettings(){
|
|
$arr = array();
|
|
$arrUnits = array();
|
|
|
|
//get saps array:
|
|
foreach($this->arrSections as $section){
|
|
$arrSaps = UniteFunctionsRev::getVal($section, "arrSaps");
|
|
if(empty($arrSaps))
|
|
continue;
|
|
foreach($arrSaps as $sap){
|
|
$text = $sap["text"];
|
|
if(!empty($text))
|
|
$arr[] = $text;
|
|
}
|
|
}
|
|
|
|
foreach($this->arrSettings as $setting){
|
|
|
|
$text = UniteFunctionsRev::getVal($setting, "text");
|
|
$desc = UniteFunctionsRev::getVal($setting, "description");
|
|
$unit = UniteFunctionsRev::getVal($setting, "unit");
|
|
|
|
if(!empty($text))
|
|
$arr[] = $text;
|
|
|
|
if(!empty($desc))
|
|
$arr[] = $desc;
|
|
|
|
if(!empty($unit)){
|
|
if(!isset($arrUnits[$unit]))
|
|
$arr[] = $unit;
|
|
$arrUnits[$unit] = true;
|
|
}
|
|
|
|
$items = UniteFunctionsRev::getVal($setting, "items");
|
|
if(!empty($items)){
|
|
foreach($items as $item){
|
|
if(!isset($arrUnits[$item]))
|
|
$arr[] = $item;
|
|
$arrUnits[$item] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return($arr);
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* get setting array by name
|
|
*/
|
|
public function getSettingByName($name){
|
|
|
|
//if index present
|
|
if(!empty($this->arrIndex)){
|
|
if(array_key_exists($name, $this->arrIndex) == false)
|
|
UniteFunctionsRev::throwError("setting $name not found");
|
|
$index = $this->arrIndex[$name];
|
|
$setting = $this->arrSettings[$index];
|
|
return($setting);
|
|
}
|
|
|
|
//if no index
|
|
foreach($this->arrSettings as $setting){
|
|
$settingName = UniteFunctionsRev::getVal($setting, "name");
|
|
if($settingName == $name)
|
|
return($setting);
|
|
}
|
|
|
|
UniteFunctionsRev::throwError("Setting with name: $name don't exists");
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* get value of some setting
|
|
* @param $name
|
|
*/
|
|
public function getSettingValue($name,$default=""){
|
|
$setting = $this->getSettingByName($name);
|
|
$value = UniteFunctionsRev::getVal($setting, "value",$default);
|
|
|
|
return($value);
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* update setting array by name
|
|
*/
|
|
public function updateArrSettingByName($name,$setting){
|
|
|
|
foreach($this->arrSettings as $key => $settingExisting){
|
|
$settingName = UniteFunctionsRev::getVal($settingExisting,"name");
|
|
if($settingName == $name){
|
|
$this->arrSettings[$key] = $setting;
|
|
return(false);
|
|
}
|
|
}
|
|
|
|
UniteFunctionsRev::throwError("Setting with name: $name don't exists");
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* update default value in the setting
|
|
*/
|
|
public function updateSettingValue($name,$value){
|
|
$setting = $this->getSettingByName($name);
|
|
$setting["value"] = $value;
|
|
|
|
$this->updateArrSettingByName($name, $setting);
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
* set values from array of stored settings elsewhere.
|
|
*/
|
|
public function setStoredValues($arrValues){
|
|
|
|
foreach($this->arrSettings as $key=>$setting){
|
|
$name = UniteFunctionsRev::getVal($setting, "name");
|
|
|
|
//type consolidation
|
|
$type = UniteFunctionsRev::getVal($setting, "type");
|
|
|
|
$customType = UniteFunctionsRev::getVal($setting, "custom_type");
|
|
if(!empty($customType))
|
|
$type .= ".".$customType;
|
|
|
|
switch($type){
|
|
case "custom.kenburns_position":
|
|
$name = $setting["name"];
|
|
if(array_key_exists($name."_hor", $arrValues)){
|
|
$value_vert = UniteFunctionsRev::getVal($arrValues, $name."_vert","random");
|
|
$value_hor = UniteFunctionsRev::getVal($arrValues, $name."_hor","random");
|
|
$this->arrSettings[$key]["value"] = "$value_vert,$value_hor";
|
|
}
|
|
break;
|
|
default:
|
|
if(array_key_exists($name, $arrValues)){
|
|
$this->arrSettings[$key]["value"] = $arrValues[$name];
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* get setting values. replace from stored ones if given
|
|
*/
|
|
public function getArrValues(){
|
|
|
|
$arrSettingsOutput = array();
|
|
|
|
//modify settings by type
|
|
foreach($this->arrSettings as $setting){
|
|
if($setting["type"] == self::TYPE_HR
|
|
||$setting["type"] == self::TYPE_STATIC_TEXT)
|
|
continue;
|
|
|
|
$value = $setting["value"];
|
|
|
|
//modify value by type
|
|
switch($setting["type"]){
|
|
case self::TYPE_COLOR:
|
|
$value = strtolower($value);
|
|
//set color output type
|
|
if($this->colorOutputType == self::COLOR_OUTPUT_FLASH)
|
|
$value = str_replace("#","0x",$value);
|
|
break;
|
|
case self::TYPE_CHECKBOX:
|
|
if($value == true) $value = "true";
|
|
else $value = "false";
|
|
break;
|
|
}
|
|
|
|
//remove lf
|
|
if(isset($setting["remove_lf"])){
|
|
$value = str_replace("\n","",$value);
|
|
$value = str_replace("\r\n","",$value);
|
|
}
|
|
|
|
$arrSettingsOutput[$setting["name"]] = $value;
|
|
}
|
|
|
|
return($arrSettingsOutput);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
?>
|