1387 lines
37 KiB
PHP
1387 lines
37 KiB
PHP
<?php
|
|
/**
|
|
* 2016 Revolution Slider
|
|
*
|
|
* @author SmatDataSoft <support@smartdatasoft.com>
|
|
* @copyright 2016 SmatDataSoft
|
|
* @license private
|
|
* @version 5.1.3
|
|
* International Registered Trademark & Property of SmatDataSoft
|
|
*/
|
|
|
|
class UniteSettingsRev
|
|
{
|
|
|
|
const COLOR_OUTPUT_FLASH = "flash";
|
|
const COLOR_OUTPUT_HTML = "html";
|
|
const RELATED_NONE = "";
|
|
const TYPE_TEXT = "text";
|
|
const TYPE_HIDDEN = "hidden";
|
|
const TYPE_COLOR = "color";
|
|
const TYPE_DATE = "date";
|
|
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_MULTIPLE_TEXT = "multitext";
|
|
const TYPE_IMAGE = "image";
|
|
const TYPE_CHECKLIST = "checklist";
|
|
|
|
|
|
|
|
//------------------------------------------------------------
|
|
//set data types
|
|
const DATATYPE_NUMBER = "number";
|
|
const DATATYPE_NUMBEROREMTY = "number_empty";
|
|
const DATATYPE_STRING = "string";
|
|
const DATATYPE_FREE = "free";
|
|
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 (!@RevsliderPrestashop::getIsset($arrParams["items"])) {
|
|
throw new Exception("no select items presented");
|
|
}
|
|
|
|
if (!is_array($arrParams["items"])) {
|
|
throw new Exception("the items parameter should be array");
|
|
}
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//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 (!@RevsliderPrestashop::getIsset($arrTypesAssoc[$type])) {
|
|
$arrTypes[] = $type;
|
|
}
|
|
|
|
$arrTypesAssoc[$type] = "";
|
|
}
|
|
|
|
return($arrTypes);
|
|
}
|
|
|
|
private function modifySettingsValues()
|
|
{
|
|
|
|
}
|
|
|
|
public function getArrSettings()
|
|
{
|
|
return($this->arrSettings);
|
|
}
|
|
|
|
public function getArrSettingNames()
|
|
{
|
|
$arrKeys = array();
|
|
|
|
$arrNames = array();
|
|
|
|
foreach ($this->arrSettings as $setting) {
|
|
$name = UniteFunctionsRev::getVal($setting, "name");
|
|
|
|
if (!empty($name)) {
|
|
$arrNames[] = $name;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return($arrNames);
|
|
}
|
|
|
|
public function getArrSettingNamesAndTitles()
|
|
{
|
|
$arrKeys = array();
|
|
|
|
$arrNames = array();
|
|
|
|
foreach ($this->arrSettings as $setting) {
|
|
$name = UniteFunctionsRev::getVal($setting, "name");
|
|
|
|
$title = UniteFunctionsRev::getVal($setting, "text");
|
|
|
|
if (!empty($name)) {
|
|
$arrNames[$name] = $title;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return($arrNames);
|
|
}
|
|
|
|
public function getArrSections()
|
|
{
|
|
return($this->arrSections);
|
|
}
|
|
|
|
public function getArrControls()
|
|
{
|
|
return($this->arrControls);
|
|
}
|
|
|
|
public function setArrSettings($arrSettings)
|
|
{
|
|
$this->arrSettings = $arrSettings;
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
public function addHiddenBox($name, $defaultValue = "", $text = "", $arrParams = array())
|
|
{
|
|
$this->add($name, $defaultValue, $text, self::TYPE_HIDDEN, $arrParams);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
//add multiple text box element
|
|
|
|
public function addMultipleTextBox($name, $defaultValue = "", $text = "", $arrParams = array())
|
|
{
|
|
$this->add($name, $defaultValue, $text, self::TYPE_MULTIPLE_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 date picker setting
|
|
|
|
public function addDatePicker($name, $defaultValue = "", $text = "", $arrParams = array())
|
|
{
|
|
$this->add($name, $defaultValue, $text, self::TYPE_DATE, $arrParams);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
public function addHr($name = "", $params = array())
|
|
{
|
|
$setting = array();
|
|
|
|
$setting["type"] = self::TYPE_HR;
|
|
|
|
$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";
|
|
|
|
|
|
$setting = $this->checkAndAddSectionAndSap($setting);
|
|
|
|
|
|
|
|
$this->checkAddBulkControl($itemName);
|
|
|
|
|
|
|
|
$setting = array_merge($params, $setting);
|
|
|
|
$this->arrSettings[] = $setting;
|
|
|
|
$this->addSettingToIndex($itemName);
|
|
}
|
|
|
|
public function addStaticText($text, $name = "", $params = array())
|
|
{
|
|
$setting = array();
|
|
|
|
$setting["type"] = self::TYPE_STATIC_TEXT;
|
|
|
|
$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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
public function addSap($text, $name = "", $opened = false, $icon = "")
|
|
{
|
|
if (empty($text)) {
|
|
UniteFunctionsRev::throwError("sap $name must have a text");
|
|
}
|
|
|
|
//create sap array
|
|
$sap = array();
|
|
$sap["name"] = $name;
|
|
$sap["text"] = $text;
|
|
$sap["icon"] = $icon;
|
|
|
|
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 (!@RevsliderPrestashop::getIsset($this->arrSections[$sectionKey])) {
|
|
throw new Exception("Sap on section:" . $sectionKey . " doesn't exists");
|
|
}
|
|
|
|
$arrSaps = $this->arrSections[$sectionKey]["arrSaps"];
|
|
|
|
if (!@RevsliderPrestashop::getIsset($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: $label)");
|
|
}
|
|
|
|
|
|
|
|
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 (@RevsliderPrestashop::getIsset($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;
|
|
|
|
|
|
|
|
|
|
|
|
$setting = array_merge($setting, $arrParams);
|
|
|
|
|
|
|
|
//set datatype
|
|
|
|
if (!@RevsliderPrestashop::getIsset($setting["datatype"])) {
|
|
$datatype = self::DATATYPE_STRING;
|
|
|
|
switch ($type) {
|
|
|
|
case self::TYPE_TEXTAREA:
|
|
|
|
$datatype = self::DATATYPE_FREE;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
$datatype = self::DATATYPE_STRING;
|
|
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
$setting["datatype"] = $datatype;
|
|
}
|
|
|
|
|
|
|
|
//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 (@RevsliderPrestashop::getIsset($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 (@RevsliderPrestashop::getIsset($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 (!@RevsliderPrestashop::getIsset($this->arrIndex[$control_name])) {
|
|
throw new Exception("There is not such control setting: '$control_name'");
|
|
}
|
|
|
|
$index = $this->arrIndex[$control_name];
|
|
|
|
$parentValue = Tools::strtolower($this->arrSettings[$index]["value"]);
|
|
|
|
|
|
|
|
//set child (controlled) attributes
|
|
|
|
foreach ($arrControlled as $controlled) {
|
|
if (!@RevsliderPrestashop::getIsset($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 = Tools::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 setCustomDrawFunctionAfterSections($func)
|
|
{
|
|
$this->customFunction_afterSections = $func;
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
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");
|
|
if ($sapLabel != '' && @RevsliderPrestashop::getIsset(RevsliderPrestashop::$lang[$sapLabel])) {
|
|
$sapLabel = RevsliderPrestashop::$lang[$sapLabel];
|
|
}
|
|
|
|
$sapIcon = (string) UniteFunctionsRev::getVal($attribs, "icon");
|
|
|
|
UniteFunctionsRev::validateNotEmpty($sapName, "sapName");
|
|
UniteFunctionsRev::validateNotEmpty($sapLabel, "sapLabel");
|
|
|
|
$this->addSap($sapLabel, $sapName, false, $sapIcon);
|
|
|
|
//--- 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");
|
|
if ($fieldLabel != '' && @RevsliderPrestashop::getIsset(RevsliderPrestashop::$lang[$fieldLabel])) {
|
|
$fieldLabel = RevsliderPrestashop::$lang[$fieldLabel];
|
|
}
|
|
$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_MULTIPLE_TEXT:
|
|
$this->addMultipleTextBox($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_BUTTON:
|
|
$this->addButton($fieldName, $fieldDefaultValue, $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;
|
|
case "codemirror":
|
|
$this->addCodemirror($fieldName, $fieldDefaultValue, $fieldLabel, $arrParams);
|
|
break;
|
|
default:
|
|
UniteFunctionsRev::throwError("wrong type: $fieldType");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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 (!@RevsliderPrestashop::getIsset($arrUnits[$unit])) {
|
|
$arr[] = $unit;
|
|
}
|
|
|
|
$arrUnits[$unit] = true;
|
|
}
|
|
|
|
|
|
|
|
$items = UniteFunctionsRev::getVal($setting, "items");
|
|
|
|
if (!empty($items)) {
|
|
foreach ($items as $item) {
|
|
if (!@RevsliderPrestashop::getIsset($arrUnits[$item])) {
|
|
$arr[] = $item;
|
|
}
|
|
|
|
$arrUnits[$item] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return($arr);
|
|
}
|
|
|
|
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");
|
|
}
|
|
|
|
public function getSettingValue($name, $default = "")
|
|
{
|
|
$setting = $this->getSettingByName($name);
|
|
|
|
$value = UniteFunctionsRev::getVal($setting, "value", $default);
|
|
|
|
|
|
|
|
return($value);
|
|
}
|
|
|
|
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");
|
|
}
|
|
|
|
public function updateSettingValue($name, $value)
|
|
{
|
|
$setting = $this->getSettingByName($name);
|
|
|
|
$setting["value"] = $value;
|
|
|
|
|
|
|
|
$this->updateArrSettingByName($name, $setting);
|
|
}
|
|
|
|
public function modifyValueByDatatype($value, $datatype)
|
|
{
|
|
if (is_array($value)) {
|
|
foreach ($value as $key => $val) {
|
|
$value[$key] = $this->modifyValueByDatatypeFunc($val, $datatype);
|
|
}
|
|
} else {
|
|
$value = $this->modifyValueByDatatypeFunc($value, $datatype);
|
|
}
|
|
|
|
return($value);
|
|
}
|
|
|
|
public function modifyValueByDatatypeFunc($value, $datatype)
|
|
{
|
|
switch ($datatype) {
|
|
|
|
case self::DATATYPE_STRING:
|
|
|
|
$value = strip_tags($value, '<link>');
|
|
|
|
break;
|
|
|
|
case self::DATATYPE_NUMBER:
|
|
|
|
$value = (float) ($value); //turn every string to float
|
|
|
|
if (!is_numeric($value)) {
|
|
$value = 0;
|
|
}
|
|
|
|
break;
|
|
|
|
case self::DATATYPE_NUMBEROREMTY:
|
|
|
|
$value = trim($value);
|
|
|
|
if ($value !== "") {
|
|
$value = (float) ($value);
|
|
} //turn every string to float
|
|
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
return $value;
|
|
}
|
|
|
|
public function setStoredValues($arrValues)
|
|
{
|
|
foreach ($this->arrSettings as $key => $setting) {
|
|
$name = UniteFunctionsRev::getVal($setting, "name");
|
|
|
|
|
|
|
|
//type consolidation
|
|
|
|
$type = UniteFunctionsRev::getVal($setting, "type");
|
|
|
|
|
|
|
|
$datatype = UniteFunctionsRev::getVal($setting, "datatype");
|
|
|
|
|
|
|
|
//skip custom type
|
|
|
|
$customType = UniteFunctionsRev::getVal($setting, "custom_type");
|
|
|
|
|
|
|
|
if (!empty($customType)) {
|
|
continue;
|
|
}
|
|
|
|
|
|
|
|
if (array_key_exists($name, $arrValues)) {
|
|
$value = $arrValues[$name];
|
|
|
|
$value = $this->modifyValueByDatatype($value, $datatype);
|
|
|
|
$this->arrSettings[$key]["value"] = $value;
|
|
|
|
$arrValues[$name] = $value;
|
|
}
|
|
}//end foreach
|
|
|
|
|
|
|
|
return($arrValues);
|
|
}
|
|
|
|
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 = Tools::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 (@RevsliderPrestashop::getIsset($setting["remove_lf"])) {
|
|
$value = str_replace("\n", "", $value);
|
|
|
|
$value = str_replace("\r\n", "", $value);
|
|
}
|
|
|
|
|
|
|
|
$arrSettingsOutput[$setting["name"]] = $value;
|
|
}
|
|
|
|
|
|
|
|
return($arrSettingsOutput);
|
|
}
|
|
|
|
public function updateValuesFromPostMeta($postID)
|
|
{
|
|
$arrNames = $this->getArrSettingNames();
|
|
$arrValues = array();
|
|
$this->setStoredValues($arrValues);
|
|
}
|
|
}
|