From 87bba93d4b7a2951a54be305d552c5b5869b3d89 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sat, 18 Aug 2012 19:35:05 +0200 Subject: [REM] unused files from calendar bzr revid: al@openerp.com-20120818173505-6i414945p102fp0c --- .../codebase/connector/base_connector.php | 706 --------------- .../codebase/connector/combo_connector.php | 89 -- .../codebase/connector/connector.js | 141 --- .../codebase/connector/crosslink_connector.php | 120 --- .../codebase/connector/dataprocessor.php | 465 ---------- .../codebase/connector/db_common.php | 959 --------------------- .../codebase/connector/db_mssql.php | 66 -- .../codebase/connector/db_mysqli.php | 53 -- .../codebase/connector/db_oracle.php | 79 -- .../dhtmlxScheduler/codebase/connector/db_pdo.php | 65 -- .../codebase/connector/db_postgre.php | 66 -- .../codebase/connector/grid_connector.php | 268 ------ .../codebase/connector/scheduler_connector.php | 121 --- .../dhtmlxScheduler/codebase/connector/tools.php | 254 ------ .../codebase/connector/tree_connector.php | 274 ------ .../codebase/connector/treegrid_connector.php | 161 ---- .../dhtmlxScheduler/codebase/connector/update.php | 262 ------ 17 files changed, 4149 deletions(-) delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/base_connector.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/combo_connector.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/connector.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/crosslink_connector.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/dataprocessor.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_common.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mssql.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mysqli.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_oracle.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_pdo.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_postgre.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/grid_connector.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/scheduler_connector.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tools.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tree_connector.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/treegrid_connector.php delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/update.php (limited to 'addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector') diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/base_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/base_connector.php deleted file mode 100644 index aab70e3c6ea..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/base_connector.php +++ /dev/null @@ -1,706 +0,0 @@ -start = $start; - $this->end = $end; - $this->type = "xml"; - } - public function add($add){ - $this->start.=$add; - } - public function reset(){ - $this->start=""; - $this->end=""; - } - public function set_type($add){ - $this->type=$add; - } - public function output($name="", $inline=true){ - ob_clean(); - if ($this->type == "xml") - header("Content-type: text/xml"); - - echo $this->__toString(); - } - public function __toString(){ - return $this->start.$this->end; - } -} - -/*! EventInterface - Base class , for iterable collections, which are used in event -**/ -class EventInterface{ - protected $request; ////!< DataRequestConfig instance - public $rules=array(); //!< array of sorting rules - - /*! constructor - creates a new interface based on existing request - @param request - DataRequestConfig object - */ - public function __construct($request){ - $this->request = $request; - } - - /*! remove all elements from collection - */ - public function clear(){ - array_splice($rules,0); - } - /*! get index by name - - @param name - name of field - @return - index of named field - */ - public function index($name){ - $len = sizeof($this->rules); - for ($i=0; $i < $len; $i++) { - if ($this->rules[$i]["name"]==$name) - return $i; - } - return false; - } -} -/*! Wrapper for collection of sorting rules -**/ -class SortInterface extends EventInterface{ - /*! constructor - creates a new interface based on existing request - @param request - DataRequestConfig object - */ - public function __construct($request){ - parent::__construct($request); - $this->rules = &$request->get_sort_by_ref(); - } - /*! add new sorting rule - - @param name - name of field - @param dir - direction of sorting - */ - public function add($name,$dir){ - $this->request->set_sort($name,$dir); - } - public function store(){ - $this->request->set_sort_by($this->rules); - } -} -/*! Wrapper for collection of filtering rules -**/ -class FilterInterface extends EventInterface{ - /*! constructor - creates a new interface based on existing request - @param request - DataRequestConfig object - */ - public function __construct($request){ - $this->request = $request; - $this->rules = &$request->get_filters_ref(); - } - /*! add new filatering rule - - @param name - name of field - @param value - value to filter by - @param rule - filtering rule - */ - public function add($name,$value,$rule){ - $this->request->set_filter($name,$value,$rule); - } - public function store(){ - $this->request->set_filters($this->rules); - } -} - -/*! base class for component item representation -**/ -class DataItem{ - protected $data; //!< hash of data - protected $config;//!< DataConfig instance - protected $index;//!< index of element - protected $skip;//!< flag , which set if element need to be skiped during rendering - /*! constructor - - @param data - hash of data - @param config - DataConfig object - @param index - index of element - */ - function __construct($data,$config,$index){ - $this->config=$config; - $this->data=$data; - $this->index=$index; - $this->skip=false; - } - /*! get named value - - @param name - name or alias of field - @return - value from field with provided name or alias - */ - public function get_value($name){ - return $this->data[$name]; - } - /*! set named value - - @param name - name or alias of field - @param value - value for field with provided name or alias - */ - public function set_value($name,$value){ - return $this->data[$name]=$value; - } - /*! get id of element - @return - id of element - */ - public function get_id(){ - $id = $this->config->id["name"]; - if (array_key_exists($id,$this->data)) - return $this->data[$id]; - return false; - } - /*! change id of element - - @param value - new id value - */ - public function set_id($value){ - $this->data[$this->config->id["name"]]=$value; - } - /*! get index of element - - @return - index of element - */ - public function get_index(){ - return $this->index; - } - /*! mark element for skiping ( such element will not be rendered ) - */ - public function skip(){ - $this->skip=true; - } - - /*! return self as XML string - */ - public function to_xml(){ - return $this->to_xml_start().$this->to_xml_end(); - } - - /*! replace xml unsafe characters - - @param string - string to be escaped - @return - escaped string - */ - protected function xmlentities($string) { - return str_replace( array( '&', '"', "'", '<', '>', '’' ), array( '&' , '"', ''' , '<' , '>', ''' ), $string); - } - - /*! return starting tag for self as XML string - */ - public function to_xml_start(){ - $str="config->data); $i++){ - $name=$this->config->data[$i]["name"]; - $str.=" ".$name."='".$this->xmlentities($this->data[$name])."'"; - } - return $str.">"; - } - /*! return ending tag for XML string - */ - public function to_xml_end(){ - return ""; - } -} - - - - - -/*! Base connector class - This class used as a base for all component specific connectors. - Can be used on its own to provide raw data. -**/ -class Connector { - protected $config;//DataConfig instance - protected $request;//DataRequestConfig instance - protected $names;//!< hash of names for used classes - private $encoding="utf-8";//!< assigned encoding (UTF-8 by default) - private $editing=false;//!< flag of edit mode ( response for dataprocessor ) - private $updating=false;//!< flag of update mode ( response for data-update ) - private $db; //!< db connection resource - protected $dload;//!< flag of dyn. loading mode - public $access; //!< AccessMaster instance - - public $sql; //DataWrapper instance - public $event; //EventMaster instance - public $limit=false; - - private $id_seed=0; //!< default value, used to generate auto-IDs - protected $live_update = false; // actions table name for autoupdating - - /*! constructor - - Here initilization of all Masters occurs, execution timer initialized - @param db - db connection resource - @param type - string , which hold type of database ( MySQL or Postgre ), optional, instead of short DB name, full name of DataWrapper-based class can be provided - @param item_type - name of class, which will be used for item rendering, optional, DataItem will be used by default - @param data_type - name of class which will be used for dataprocessor calls handling, optional, DataProcessor class will be used by default. - */ - public function __construct($db,$type=false, $item_type=false, $data_type=false){ - $this->exec_time=microtime(true); - - if (!$type) $type="MySQL"; - if (class_exists($type."DBDataWrapper",false)) $type.="DBDataWrapper"; - if (!$item_type) $item_type="DataItem"; - if (!$data_type) $data_type="DataProcessor"; - - $this->names=array( - "db_class"=>$type, - "item_class"=>$item_type, - "data_class"=>$data_type, - ); - - $this->config = new DataConfig(); - $this->request = new DataRequestConfig(); - $this->event = new EventMaster(); - $this->access = new AccessMaster(); - - if (!class_exists($this->names["db_class"],false)) - throw new Exception("DB class not found: ".$this->names["db_class"]); - $this->sql = new $this->names["db_class"]($db,$this->config); - - $this->db=$db;//saved for options connectors, if any - - EventMaster::trigger_static("connectorCreate",$this); - } - - /*! return db connection resource - nested class may neeed to access live connection object - @return - DB connection resource - */ - protected function get_connection(){ - return $this->db; - } - - public function get_config(){ - return new DataConfig($this->config); - } - - public function get_request(){ - return new DataRequestConfig($this->config); - } - - - /*! config connector based on table - - @param table - name of table in DB - @param id - name of id field - @param fields - list of fields names - @param extra - list of extra fields, optional, such fields will not be included in data rendering, but will be accessible in all inner events - @param relation_id - name of field used to define relations for hierarchical data organization, optional - */ - public function render_table($table,$id="",$fields=false,$extra=false,$relation_id=false){ - $this->configure($table,$id,$fields,$extra,$relation_id); - return $this->render(); - } - public function configure($table,$id="",$fields=false,$extra=false,$relation_id=false){ - if ($fields === false){ - //auto-config - $info = $this->sql->fields_list($table); - $fields = implode(",",$info["fields"]); - if ($info["key"]) - $id = $info["key"]; - } - $this->config->init($id,$fields,$extra,$relation_id); - $this->request->set_source($table); - } - - protected function uuid(){ - return time()."x".$this->id_seed++; - } - - /*! config connector based on sql - - @param sql - sql query used as base of configuration - @param id - name of id field - @param fields - list of fields names - @param extra - list of extra fields, optional, such fields will not be included in data rendering, but will be accessible in all inner events - @param relation_id - name of field used to define relations for hierarchical data organization, optional - */ - public function render_sql($sql,$id,$fields,$extra=false,$relation_id=false){ - $this->config->init($id,$fields,$extra,$relation_id); - $this->request->parse_sql($sql); - return $this->render(); - } - - /*! render already configured connector - - @param config - configuration of data - @param request - configuraton of request - */ - public function render_connector($config,$request){ - $this->config->copy($config); - $this->request->copy($request); - return $this->render(); - } - - /*! render self - process commands, output requested data as XML - */ - public function render(){ - EventMaster::trigger_static("connectorInit",$this); - - $this->parse_request(); - if ($this->live_update !== false && $this->updating!==false) { - $this->live_update->get_updates(); - } else { - if ($this->editing){ - $dp = new $this->names["data_class"]($this,$this->config,$this->request); - $dp->process($this->config,$this->request); - } - else { - $wrap = new SortInterface($this->request); - $this->event->trigger("beforeSort",$wrap); - $wrap->store(); - - $wrap = new FilterInterface($this->request); - $this->event->trigger("beforeFilter",$wrap); - $wrap->store(); - - $this->output_as_xml( $this->sql->select($this->request) ); - } - } - $this->end_run(); - } - - /*! prevent SQL injection through column names - replace dangerous chars in field names - @param str - incoming field name - @return - safe field name - */ - protected function safe_field_name($str){ - return strtok($str, " \n\t;',"); - } - - /*! limit max count of records - connector will ignore any records after outputing max count - @param limit - max count of records - @return - none - */ - public function set_limit($limit){ - $this->limit = $limit; - } - - protected function parse_request_mode(){ - //detect edit mode - if (isset($_GET["editing"])){ - $this->editing=true; - } else if (isset($_POST["ids"])){ - $this->editing=true; - LogMaster::log('While there is no edit mode mark, POST parameters similar to edit mode detected. \n Switching to edit mode ( to disable behavior remove POST[ids]'); - } else if (isset($_GET['dhx_version'])){ - $this->updating = true; - } - } - - /*! parse incoming request, detects commands and modes - */ - protected function parse_request(){ - //set default dyn. loading params, can be reset in child classes - if ($this->dload) - $this->request->set_limit(0,$this->dload); - else if ($this->limit) - $this->request->set_limit(0,$this->limit); - - $this->parse_request_mode(); - - if ($this->live_update && ($this->updating || $this->editing)){ - $this->request->set_version($_GET["dhx_version"]); - $this->request->set_user($_GET["dhx_user"]); - } - - if (isset($_GET["dhx_sort"])) - foreach($_GET["dhx_sort"] as $k => $v){ - $k = $this->safe_field_name($k); - $this->request->set_sort($this->resolve_parameter($k),$v); - } - - if (isset($_GET["dhx_filter"])) - foreach($_GET["dhx_filter"] as $k => $v){ - $k = $this->safe_field_name($k); - $this->request->set_filter($this->resolve_parameter($k),$v); - } - - - } - - /*! convert incoming request name to the actual DB name - @param name - incoming parameter name - @return - name of related DB field - */ - protected function resolve_parameter($name){ - return $name; - } - - - /*! replace xml unsafe characters - - @param string - string to be escaped - @return - escaped string - */ - private function xmlentities($string) { - return str_replace( array( '&', '"', "'", '<', '>', '’' ), array( '&' , '"', ''' , '<' , '>', ''' ), $string); - } - - /*! render from DB resultset - @param res - DB resultset - process commands, output requested data as XML - */ - protected function render_set($res){ - $output=""; - $index=0; - $this->event->trigger("beforeRenderSet",$this,$res,$this->config); - while ($data=$this->sql->get_next($res)){ - $data = new $this->names["item_class"]($data,$this->config,$index); - if ($data->get_id()===false) - $data->set_id($this->uuid()); - $this->event->trigger("beforeRender",$data); - $output.=$data->to_xml(); - $index++; - } - return $output; - } - - /*! output fetched data as XML - @param res - DB resultset - */ - protected function output_as_xml($res){ - $start="encoding."' ?>".$this->xml_start(); - $end=$this->render_set($res).$this->xml_end(); - - $out = new OutputWriter($start, $end); - $this->event->trigger("beforeOutput", $this, $out); - - $out->output(); - } - - - /*! end processing - stop execution timer, kill the process - */ - protected function end_run(){ - $time=microtime(true)-$this->exec_time; - LogMaster::log("Done in {$time}s"); - flush(); - die(); - } - - /*! set xml encoding - - methods sets only attribute in XML, no real encoding conversion occurs - @param encoding - value which will be used as XML encoding - */ - public function set_encoding($encoding){ - $this->encoding=$encoding; - } - - /*! enable or disable dynamic loading mode - - @param count - count of rows loaded from server, actual only for grid-connector, can be skiped in other cases. - If value is a false or 0 - dyn. loading will be disabled - */ - public function dynamic_loading($count){ - $this->dload=$count; - } - - /*! enable logging - - @param path - path to the log file. If set as false or empty strig - logging will be disabled - @param client_log - enable output of log data to the client side - */ - public function enable_log($path=true,$client_log=false){ - LogMaster::enable_log($path,$client_log); - } - - /*! provides infor about current processing mode - @return - true if processing dataprocessor command, false otherwise - */ - public function is_select_mode(){ - $this->parse_request_mode(); - return !$this->editing; - } - - public function is_first_call(){ - $this->parse_request_mode(); - return !($this->editing || $this->updating || $this->request->get_start() || sizeof($this->request->get_filters()) || sizeof($this->request->get_sort_by())); - - } - - /*! renders self as xml, starting part - */ - protected function xml_start(){ - return ""; - } - /*! renders self as xml, ending part - */ - protected function xml_end(){ - return ""; - } - - - public function insert($data) { - $action = new DataAction('inserted', false, $data); - $request = new DataRequestConfig(); - $request->set_source($this->request->get_source()); - - $this->config->limit_fields($data); - $this->sql->insert($action,$request); - $this->config->restore_fields($data); - - return $action->get_new_id(); - } - - public function delete($id) { - $action = new DataAction('deleted', $id, array()); - $request = new DataRequestConfig(); - $request->set_source($this->request->get_source()); - - $this->sql->delete($action,$request); - return $action->get_status(); -} - - public function update($data) { - $action = new DataAction('updated', $data[$this->config->id["name"]], $data); - $request = new DataRequestConfig(); - $request->set_source($this->request->get_source()); - - $this->config->limit_fields($data); - $this->sql->update($action,$request); - $this->config->restore_fields($data); - - return $action->get_status(); - } - - /*! sets actions_table for Optimistic concurrency control mode and start it - @param table_name - name of database table which will used for saving actions - @param url - url used for update notifications - */ - public function enable_live_update($table, $url=false){ - $this->live_update = new DataUpdate($this->sql, $this->config, $this->request, $table,$url); - $this->live_update->set_event($this->event,$this->names["item_class"]); - $this->event->attach("beforeOutput", Array($this->live_update, "version_output")); - $this->event->attach("beforeFiltering", Array($this->live_update, "get_updates")); - $this->event->attach("beforeProcessing", Array($this->live_update, "check_collision")); - $this->event->attach("afterProcessing", Array($this->live_update, "log_operations")); - } -} - - -/*! wrapper around options collection, used for comboboxes and filters -**/ -class OptionsConnector extends Connector{ - protected $init_flag=false;//!< used to prevent rendering while initialization - public function __construct($res,$type=false,$item_type=false,$data_type=false){ - if (!$item_type) $item_type="DataItem"; - if (!$data_type) $data_type=""; //has not sense, options not editable - parent::__construct($res,$type,$item_type,$data_type); - } - /*! render self - process commands, return data as XML, not output data to stdout, ignore parameters in incoming request - @return - data as XML string - */ - public function render(){ - if (!$this->init_flag){ - $this->init_flag=true; - return ""; - } - $res = $this->sql->select($this->request); - return $this->render_set($res); - } -} - - - -class DistinctOptionsConnector extends OptionsConnector{ - /*! render self - process commands, return data as XML, not output data to stdout, ignore parameters in incoming request - @return - data as XML string - */ - public function render(){ - if (!$this->init_flag){ - $this->init_flag=true; - return ""; - } - $res = $this->sql->get_variants($this->config->text[0]["db_name"],$this->request); - return $this->render_set($res); - } -} - -?> diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/combo_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/combo_connector.php deleted file mode 100644 index 65e6bfe8564..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/combo_connector.php +++ /dev/null @@ -1,89 +0,0 @@ -selected=false; - } - /*! mark option as selected - */ - function select(){ - $this->selected=true; - } - /*! return self as XML string, starting part - */ - function to_xml_start(){ - if ($this->skip) return ""; - - return ""; - } -} - -/*! Connector for the dhtmlxCombo -**/ -class ComboConnector extends Connector{ - private $filter; //!< filtering mask from incoming request - private $position; //!< position from incoming request - - /*! constructor - - Here initilization of all Masters occurs, execution timer initialized - @param res - db connection resource - @param type - string , which hold type of database ( MySQL or Postgre ), optional, instead of short DB name, full name of DataWrapper-based class can be provided - @param item_type - name of class, which will be used for item rendering, optional, DataItem will be used by default - @param data_type - name of class which will be used for dataprocessor calls handling, optional, DataProcessor class will be used by default. - */ - public function __construct($res,$type=false,$item_type=false,$data_type=false){ - if (!$item_type) $item_type="ComboDataItem"; - parent::__construct($res,$type,$item_type,$data_type); - } - - //parse GET scoope, all operations with incoming request must be done here - function parse_request(){ - parent::parse_request(); - - if (isset($_GET["pos"])){ - if (!$this->dload) //not critical, so just write a log message - LogMaster::log("Dyn loading request received, but server side was not configured to process dyn. loading. "); - else - $this->request->set_limit($_GET["pos"],$this->dload); - } - - if (isset($_GET["mask"])) - $this->request->set_filter($this->config->text[0]["name"],$_GET["mask"]."%","LIKE"); - - LogMaster::log($this->request); - } - - - /*! renders self as xml, starting part - */ - public function xml_start(){ - if ($this->request->get_start()) - return ""; - else - return ""; - } - - /*! renders self as xml, ending part - */ - public function xml_end(){ - return ""; - } -} -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/connector.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/connector.js deleted file mode 100644 index f0d03f7a880..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/connector.js +++ /dev/null @@ -1,141 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterise License -to use it in not GPL project. Please contact sales@dhtmlx.com for details -*/ -/* - dhx_sort[index]=direction - dhx_filter[index]=mask -*/ -if (window.dhtmlXGridObject){ - dhtmlXGridObject.prototype._init_point_connector=dhtmlXGridObject.prototype._init_point; - dhtmlXGridObject.prototype._init_point=function(){ - var clear_url=function(url){ - url=url.replace(/(\?|\&)connector[^\f]*/g,""); - return url+(url.indexOf("?")!=-1?"&":"?")+"connector=true"; - } - var combine_urls=function(url){ - return clear_url(url)+(this._connector_sorting||"")+(this._connector_filter||""); - } - var sorting_url=function(url,ind,dir){ - this._connector_sorting="&dhx_sort["+ind+"]="+dir; - return combine_urls.call(this,url); - } - var filtering_url=function(url,inds,vals){ - for (var i=0; idata_mode = $name; - $this->data_result=array(); - } - public function getDataResult(){ - return $this->data_result; - } - - public function render(){ - if (!$this->init_flag){ - $this->init_flag=true; - return ""; - } - return parent::render(); - } - - protected function output_as_xml($res){ - if ($this->data_mode){ - while ($data=$this->sql->get_next($res)){ - $this->data_result[]=$data[$this->data_mode]; - } - } - else - return parent::output_as_xml($res); - } - protected function end_run(){ - if (!$this->data_mode) - parent::end_run(); - } -} - -class CrossOptionsConnector extends Connector{ - public $options, $link; - private $master_name, $link_name, $master_value; - - public function __construct($res,$type=false,$item_type=false,$data_type=false){ - $this->options = new OptionsConnector($res,$type,$item_type,$data_type); - $this->link = new DelayedConnector($res,$type,$item_type,$data_type); - - EventMaster::attach_static("connectorInit",array($this, "handle")); - } - public function handle($conn){ - if ($conn instanceof DelayedConnector) return; - if ($conn instanceof OptionsConnector) return; - - $this->master_name = $this->link->get_config()->id["db_name"]; - $this->link_name = $this->options->get_config()->id["db_name"]; - - $this->link->event->attach("beforeFilter",array($this, "get_only_related")); - - if (isset($_GET["dhx_crosslink_".$this->link_name])){ - $this->get_links($_GET["dhx_crosslink_".$this->link_name]); - die(); - } - - if (!$this->dload){ - $conn->event->attach("beforeRender", array($this, "getOptions")); - $conn->event->attach("beforeRenderSet", array($this, "prepareConfig")); - } - - - $conn->event->attach("afterProcessing", array($this, "afterProcessing")); - } - public function prepareConfig($conn, $res, $config){ - $config->add_field($this->link_name); - } - public function getOptions($data){ - $this->link->dataMode($this->link_name); - - $this->get_links($data->get_value($this->master_name)); - - $data->set_value($this->link_name, implode(",",$this->link->getDataResult())); - } - public function get_links($id){ - $this->master_value = $id; - $this->link->render(); - } - public function get_only_related($filters){ - $index = $filters->index($this->master_name); - if ($index!==false){ - $filters->rules[$index]["value"]=$this->master_value; - } else - $filters->add($this->master_name, $this->master_value, "="); - } - public function afterProcessing($action){ - $status = $action->get_status(); - - $master_key = $action->get_value($this->master_name); - $link_key = $action->get_value($this->link_name); - $link_key = explode(',', $link_key); - - if ($status == "inserted") - $master_key = $action->get_new_id(); - - switch ($status){ - case "deleted": - $this->link->delete($master_key); - break; - case "updated": - $this->link->delete($master_key); - case "inserted": - for ($i=0; $i < sizeof($link_key); $i++) - if ($link_key[$i]!="") - $this->link->insert(array( - $this->link_name => $link_key[$i], - $this->master_name => $master_key - )); - break; - } - } -} - -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/dataprocessor.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/dataprocessor.php deleted file mode 100644 index 551a3ce7cb2..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/dataprocessor.php +++ /dev/null @@ -1,465 +0,0 @@ -connector= $connector; - $this->config=$config; - $this->request=$request; - } - - /*! convert incoming data name to valid db name - redirect to Connector->name_data by default - @param data - data name from incoming request - @return - related db_name - */ - function name_data($data){ - return $data; - } - /*! retrieve data from incoming request and normalize it - - @param ids - array of extected IDs - @return - hash of data - */ - function get_post_values($ids){ - $data=array(); - for ($i=0; $i < sizeof($ids); $i++) - $data[$ids[$i]]=array(); - - foreach ($_POST as $key => $value) { - $details=explode("_",$key,2); - if (sizeof($details)==1) continue; - - $name=$this->name_data($details[1]); - $data[$details[0]][$name]=$value; - } - - return $data; - } - /*! process incoming request ( save|update|delete ) - */ - function process(){ - LogMaster::log("DataProcessor object initialized",$_POST); - - $results=array(); - - if (!isset($_POST["ids"])) - throw new Exception("Incorrect incoming data, ID of incoming records not recognized"); - - $ids=explode(",",$_POST["ids"]); - $rows_data=$this->get_post_values($ids); - $failed=false; - - try{ - if ($this->connector->sql->is_global_transaction()) - $this->connector->sql->begin_transaction(); - - for ($i=0; $i < sizeof($ids); $i++) { - $rid = $ids[$i]; - LogMaster::log("Row data [{$rid}]",$rows_data[$rid]); - - if (!isset($_POST[$rid."_!nativeeditor_status"])) - throw new Exception("Status of record [{$rid}] not found in incoming request"); - $status = $_POST[$rid."_!nativeeditor_status"]; - - $action=new DataAction($status,$rid,$rows_data[$rid]); - $results[]=$action; - $this->inner_process($action); - } - - } catch(Exception $e){ - $failed=true; - } - - if ($this->connector->sql->is_global_transaction()){ - if (!$failed) - for ($i=0; $i < sizeof($results); $i++) - if ($results[$i]->get_status()=="error" || $results[$i]->get_status()=="invalid"){ - $failed=true; - break; - } - if ($failed){ - for ($i=0; $i < sizeof($results); $i++) - $results[$i]->error(); - $this->connector->sql->rollback_transaction(); - } - else - $this->connector->sql->commit_transaction(); - } - - $this->output_as_xml($results); - } - - /*! converts status string to the inner mode name - - @param status - external status string - @return - inner mode name - */ - protected function status_to_mode($status){ - switch($status){ - case "updated": - return "update"; - break; - case "inserted": - return "insert"; - break; - case "deleted": - return "delete"; - break; - default: - return $status; - break; - } - } - /*! process data updated request received - - @param action - DataAction object - @return - DataAction object with details of processing - */ - protected function inner_process($action){ - - if ($this->connector->sql->is_record_transaction()) - $this->connector->sql->begin_transaction(); - - try{ - - $mode = $this->status_to_mode($action->get_status()); - if (!$this->connector->access->check($mode)){ - LogMaster::log("Access control: {$operation} operation blocked"); - $action->error(); - } else { - $check = $this->connector->event->trigger("beforeProcessing",$action); - if (!$action->is_ready()) - $this->check_exts($action,$mode); - $check = $this->connector->event->trigger("afterProcessing",$action); - } - - } catch (Exception $e){ - $action->set_status("error"); - } - - if ($this->connector->sql->is_record_transaction()){ - if ($action->get_status()=="error" || $action->get_status()=="invalid") - $this->connector->sql->rollback_transaction(); - else - $this->connector->sql->commit_transaction(); - } - - return $action; - } - /*! check if some event intercepts processing, send data to DataWrapper in other case - - @param action - DataAction object - @param mode - name of inner mode ( will be used to generate event names ) - */ - function check_exts($action,$mode){ - $old_config = new DataConfig($this->config); - - $this->connector->event->trigger("before".$mode,$action); - if ($action->is_ready()) - LogMaster::log("Event code for ".$mode." processed"); - else { - //check if custom sql defined - $sql = $this->connector->sql->get_sql($mode,$action); - if ($sql) - $this->connector->sql->query($sql); - else{ - $action->sync_config($this->config); - $method=array($this->connector->sql,$mode); - if (!is_callable($method)) - throw new Exception("Unknown dataprocessing action: ".$mode); - call_user_func($method,$action,$this->request); - } - } - $this->connector->event->trigger("after".$mode,$action); - - $this->config = $old_config; - } - - /*! output xml response for dataprocessor - - @param results - array of DataAction objects - */ - function output_as_xml($results){ - LogMaster::log("Edit operation finished",$results); - ob_clean(); - header("Content-type:text/xml"); - echo ""; - echo ""; - for ($i=0; $i < sizeof($results); $i++) - echo $results[$i]->to_xml(); - echo ""; - } - -} - -/*! contain all info related to action and controls customizaton -**/ -class DataAction{ - private $status; //!< cuurent status of record - private $id;//!< id of record - private $data;//!< data hash of record - private $userdata;//!< hash of extra data , attached to record - private $nid;//!< new id value , after operation executed - private $output;//!< custom output to client side code - private $attrs;//!< hash of custtom attributes - private $ready;//!< flag of operation's execution - private $addf;//!< array of added fields - private $delf;//!< array of deleted fields - - - /*! constructor - - @param status - current operation status - @param id - record id - @param data - hash of data - */ - function __construct($status,$id,$data){ - $this->status=$status; - $this->id=$id; - $this->data=$data; - $this->nid=$id; - - $this->output=""; - $this->attrs=array(); - $this->ready=false; - - $this->addf=array(); - $this->delf=array(); - } - - - /*! add custom field and value to DB operation - - @param name - name of field which will be added to DB operation - @param value - value which will be used for related field in DB operation - */ - function add_field($name,$value){ - LogMaster::log("adding field: ".$name.", with value: ".$value); - $this->data[$name]=$value; - $this->addf[]=$name; - } - /*! remove field from DB operation - - @param name - name of field which will be removed from DB operation - */ - function remove_field($name){ - LogMaster::log("removing field: ".$name); - $this->delf[]=$name; - } - - /*! sync field configuration with external object - - @param slave - SQLMaster object - @todo - check , if all fields removed then cancel action - */ - function sync_config($slave){ - foreach ($this->addf as $k => $v) - $slave->add_field($v); - foreach ($this->delf as $k => $v) - $slave->remove_field($v); - } - /*! get value of some record's propery - - @param name - name of record's property ( name of db field or alias ) - @return - value of related property - */ - function get_value($name){ - if (!array_key_exists($name,$this->data)){ - LogMaster::log("Incorrect field name used: ".$name); - LogMaster::log("data",$this->data); - return ""; - } - return $this->data[$name]; - } - /*! set value of some record's propery - - @param name - name of record's property ( name of db field or alias ) - @param value - value of related property - */ - function set_value($name,$value){ - LogMaster::log("change value of: ".$name." as: ".$value); - $this->data[$name]=$value; - } - /*! get hash of data properties - - @return - hash of data properties - */ - function get_data(){ - return $this->data; - } - /*! get some extra info attached to record - deprecated, exists just for backward compatibility, you can use set_value instead of it - @param name - name of userdata property - @return - value of related userdata property - */ - function get_userdata_value($name){ - return $this->get_value($name); - } - /*! set some extra info attached to record - deprecated, exists just for backward compatibility, you can use get_value instead of it - @param name - name of userdata property - @param value - value of userdata property - */ - function set_userdata_value($name,$value){ - return $this->set_value($name,$value); - } - /*! get current status of record - - @return - string with status value - */ - function get_status(){ - return $this->status; - } - /*! assign new status to the record - - @param status - new status value - */ - function set_status($status){ - $this->status=$status; - } - /*! get id of current record - - @return - id of record - */ - function get_id(){ - return $this->id; - } - /*! sets custom response text - - can be accessed through defineAction on client side. Text wrapped in CDATA, so no extra escaping necessary - @param text - custom response text - */ - function set_response_text($text){ - $this->set_response_xml(""); - } - /*! sets custom response xml - - can be accessed through defineAction on client side - @param text - string with XML data - */ - function set_response_xml($text){ - $this->output=$text; - } - /*! sets custom response attributes - - can be accessed through defineAction on client side - @param name - name of custom attribute - @param value - value of custom attribute - */ - function set_response_attribute($name,$value){ - $this->attrs[$name]=$value; - } - /*! check if action finished - - @return - true if action finished, false otherwise - */ - function is_ready(){ - return $this->ready; - } - /*! return new id value - - equal to original ID normally, after insert operation - value assigned for new DB record - @return - new id value - */ - function get_new_id(){ - return $this->nid; - } - - /*! set result of operation as error - */ - function error(){ - $this->status="error"; - $this->ready=true; - } - /*! set result of operation as invalid - */ - function invalid(){ - $this->status="invalid"; - $this->ready=true; - } - /*! confirm successful opeation execution - @param id - new id value, optional - */ - function success($id=false){ - if ($id!==false) - $this->nid = $id; - $this->ready=true; - } - /*! convert DataAction to xml format compatible with client side dataProcessor - @return - DataAction operation report as XML string - */ - function to_xml(){ - $str="attrs as $k => $v) { - $str.=$k."='".$v."' "; - } - $str.=">{$this->output}"; - return $str; - } - /*! convert self to string ( for logs ) - - @return - DataAction operation report as plain string - */ - function __toString(){ - return "action:{$this->status}; sid:{$this->id}; tid:{$this->nid};"; - } - - -} - - -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_common.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_common.php deleted file mode 100644 index 7ef239c0488..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_common.php +++ /dev/null @@ -1,959 +0,0 @@ -copy($proto); - else{ - $start=0; - $this->filters=array(); - $this->sort_by=array(); - } - } - - /*! copy parameters of source object into self - - @param proto - source object - */ - public function copy($proto){ - $this->filters =$proto->get_filters(); - $this->sort_by =$proto->get_sort_by(); - $this->count =$proto->get_count(); - $this->start =$proto->get_start(); - $this->source =$proto->get_source(); - $this->fieldset =$proto->get_fieldset(); - $this->relation =$proto->get_relation(); - $this->user = $proto->user; - $this->version = $proto->version; - } - - /*! convert self to string ( for logs ) - @return - self as plain string, - */ - public function __toString(){ - $str="Source:{$this->source}\nFieldset:{$this->fieldset}\nWhere:"; - for ($i=0; $i < sizeof($this->filters); $i++) - $str.=$this->filters[$i]["name"]." ".$this->filters[$i]["operation"]." ".$this->filters[$i]["value"].";"; - $str.="\nStart:{$this->start}\nCount:{$this->count}\n"; - for ($i=0; $i < sizeof($this->sort_by); $i++) - $str.=$this->sort_by[$i]["name"]."=".$this->sort_by[$i]["direction"].";"; - $str.="\nRelation:{$this->relation}"; - return $str; - } - - /*! returns set of filtering rules - @return - set of filtering rules - */ - public function get_filters(){ - return $this->filters; - } - public function &get_filters_ref(){ - return $this->filters; - } - public function set_filters($data){ - $this->filters=$data; - } - - - public function get_user(){ - return $this->user; - } - public function set_user($user){ - $this->user = $user; - } - public function get_version(){ - return $this->version; - } - public function set_version($version){ - $this->version = $version; - } - - /*! returns list of used fields - @return - list of used fields - */ - public function get_fieldset(){ - return $this->fieldset; - } - /*! returns name of source table - @return - name of source table - */ - public function get_source(){ - return $this->source; - } - /*! returns set of sorting rules - @return - set of sorting rules - */ - public function get_sort_by(){ - return $this->sort_by; - } - public function &get_sort_by_ref(){ - return $this->sort_by; - } - public function set_sort_by($data){ - $this->sort_by=$data; - } - - /*! returns start index - @return - start index - */ - public function get_start(){ - return $this->start; - } - /*! returns count of requested records - @return - count of requested records - */ - public function get_count(){ - return $this->count; - } - /*! returns name of relation id - @return - relation id name - */ - public function get_relation(){ - return $this->relation; - } - - /*! sets sorting rule - - @param field - name of column - @param order - direction of sorting - */ - public function set_sort($field,$order=false){ - if (!$field && !$order) - $this->sort_by=array(); - else{ - $order=strtolower($order)=="asc"?"ASC":"DESC"; - $this->sort_by[]=array("name"=>$field,"direction" => $order); - } - } - /*! sets filtering rule - - @param field - name of column - @param value - value for filtering - @param operation - operation for filtering, optional , LIKE by default - */ - public function set_filter($field,$value,$operation=false){ - array_push($this->filters,array("name"=>$field,"value"=>$value,"operation"=>$operation)); - } - - /*! sets list of used fields - - @param value - list of used fields - */ - public function set_fieldset($value){ - $this->fieldset=$value; - } - /*! sets name of source table - - @param value - name of source table - */ - public function set_source($value){ - $this->source=trim($value); - if (!$this->source) throw new Exception("Source of data can't be empty"); - } - /*! sets data limits - - @param start - start index - @param count - requested count of data - */ - public function set_limit($start,$count){ - $this->start=$start; - $this->count=$count; - } - /*! sets name of relation id - - @param value - name of relation id field - */ - public function set_relation($value){ - $this->relation=$value; - } - /*! parse incoming sql, to fill other properties - - @param sql - incoming sql string - */ - public function parse_sql($sql){ - $sql= preg_replace("/[ \n\t]+limit[\n ,0-9]/i","",$sql); - - $data = preg_split("/[ \n\t]+\\_from\\_/i",$sql,2); - if (count($data)!=2) - $data = preg_split("/[ \n\t]+from/i",$sql,2); - $this->fieldset = preg_replace("/^[\s]*select/i","",$data[0],1); - - $table_data = preg_split("/[ \n\t]+where/i",$data[1],2); - if (sizeof($table_data)>1){ //where construction exists - $this->set_source($table_data[0]); - $where_data = preg_split("/[ \n\t]+order[ ]+by/i",$table_data[1],2); - $this->filters[]=$where_data[0]; - if (sizeof($where_data)==1) return; //end of line detected - $data=$where_data[1]; - } else { - $table_data = preg_split("/[ \n\t]+order[ ]+by/i",$table_data[0],2); - $this->set_source($table_data[0]); - if (sizeof($table_data)==1) return; //end of line detected - $data=$table_data[1]; - } - - if (trim($data)){ //order by construction exists - $s_data = preg_split("/\\,/",trim($data)); - for ($i=0; $i < count($s_data); $i++) { - $data=preg_split("/[ ]+/",trim($s_data[$i]),2); - $this->set_sort($data[0],$data[1]); - } - - } - } -} - -/*! manager of data configuration -**/ -class DataConfig{ - public $id;////!< name of ID field - public $relation_id;//!< name or relation ID field - public $text;//!< array of text fields - public $data;//!< array of all known fields , fields which exists only in this collection will not be included in dataprocessor's operations - - - /*! converts self to the string, for logging purposes - **/ - public function __toString(){ - $str="ID:{$this->id['db_name']}(ID:{$this->id['name']})\n"; - $str.="Relation ID:{$this->relation_id['db_name']}({$this->relation_id['name']})\n"; - $str.="Data:"; - for ($i=0; $itext); $i++) - $str.="{$this->text[$i]['db_name']}({$this->text[$i]['name']}),"; - - $str.="\nExtra:"; - for ($i=0; $idata); $i++) - $str.="{$this->data[$i]['db_name']}({$this->data[$i]['name']}),"; - - return $str; - } - - /*! removes un-used fields from configuration - @param name - name of field , which need to be preserved - */ - public function minimize($name){ - for ($i=0; $i < sizeof($this->text); $i++){ - if ($this->text[$i]["name"]==$name){ - $this->text[$i]["name"]="value"; - $this->data=array($this->text[$i]); - $this->text=array($this->text[$i]); - return; - } - } - throw new Exception("Incorrect dataset minimization, master field not found."); - } - - public function limit_fields($data){ - if (isset($this->full_field_list)) - $this->restore_fields(); - $this->full_field_list = $this->text; - $this->text = array(); - - for ($i=0; $i < sizeof($this->full_field_list); $i++) { - if (array_key_exists($this->full_field_list[$i]["name"],$data)) - $this->text[] = $this->full_field_list[$i]; - } - } - - public function restore_fields(){ - if (isset($this->full_field_list)) - $this->text = $this->full_field_list; - } - - /*! initialize inner state by parsing configuration parameters - - @param id - name of id field - @param fields - name of data field(s) - @param extra - name of extra field(s) - @param relation - name of relation field - - */ - public function init($id,$fields,$extra,$relation){ - $this->id = $this->parse($id,false); - $this->text = $this->parse($fields,true); - $this->data = array_merge($this->text,$this->parse($extra,true)); - $this->relation_id = $this->parse($relation,false); - } - - /*! parse configuration string - - @param key - key string from configuration - @param mode - multi names flag - @return - parsed field name object - */ - private function parse($key,$mode){ - if ($mode){ - if (!$key) return array(); - $key=explode(",",$key); - for ($i=0; $i < sizeof($key); $i++) - $key[$i]=$this->parse($key[$i],false); - return $key; - } - $key=explode("(",$key); - $data=array("db_name"=>trim($key[0]), "name"=>trim($key[0])); - if (sizeof($key)>1) - $data["name"]=substr(trim($key[1]),0,-1); - return $data; - } - - /*! constructor - init public collectons - @param proto - DataConfig object used as prototype for new one, optional - */ - public function __construct($proto=false){ - if ($proto!==false) - $this->copy($proto); - else { - $this->text=array(); - $this->data=array(); - $this->id=array("name"=>"dhx_auto_id", "db_name"=>"dhx_auto_id"); - $this->relation_id=array("name"=>"", "db_name"=>""); - } - } - - /*! copy properties from source object - - @param proto - source object - */ - public function copy($proto){ - $this->id = $proto->id; - $this->relation_id = $proto->relation_id; - $this->text = $proto->text; - $this->data = $proto->data; - } - - /*! returns list of data fields (db_names) - @return - list of data fields ( ready to be used in SQL query ) - */ - public function db_names_list($db){ - $out=array(); - if ($this->id["db_name"]) - array_push($out,$db->escape_name($this->id["db_name"])); - if ($this->relation_id["db_name"]) - array_push($out,$db->escape_name($this->relation_id["db_name"])); - - for ($i=0; $i < sizeof($this->data); $i++){ - if ($this->data[$i]["db_name"]!=$this->data[$i]["name"]) - $out[]=$db->escape_name($this->data[$i]["db_name"])." as ".$this->data[$i]["name"]; - else - $out[]=$db->escape_name($this->data[$i]["db_name"]); - } - - return $out; - } - - /*! add field to dataset config ($text collection) - - added field will be used in all auto-generated queries - @param name - name of field - @param aliase - aliase of field, optional - */ - public function add_field($name,$aliase=false){ - if ($aliase===false) $aliase=$name; - - //adding to list of data-active fields - if ($this->id["db_name"]==$name || $this->relation_id["db_name"] == $name){ - LogMaster::log("Field name already used as ID, be sure that it is really necessary."); - } - if ($this->is_field($name,$this->text)!=-1) - throw new Exception('Data field already registered: '.$name); - array_push($this->text,array("db_name"=>$name,"name"=>$aliase)); - - //adding to list of all fields as well - if ($this->is_field($name,$this->data)==-1) - array_push($this->data,array("db_name"=>$name,"name"=>$aliase)); - - } - - /*! remove field from dataset config ($text collection) - - removed field will be excluded from all auto-generated queries - @param name - name of field, or aliase of field - */ - public function remove_field($name){ - $ind = $this->is_field($name); - if ($ind==-1) throw new Exception('There was no such data field registered as: '.$name); - array_splice($this->text,$ind,1); - //we not deleting field from $data collection, so it will not be included in data operation, but its data still available - } - - /*! check if field is a part of dataset - - @param name - name of field - @param collection - collection, against which check will be done, $text collection by default - @return - returns true if field already a part of dataset, otherwise returns true - */ - private function is_field($name,$collection = false){ - if (!$collection) - $collection=$this->text; - - for ($i=0; $iconfig=$config; - $this->connection=$connection; - } - - /*! insert record in storage - - @param data - DataAction object - @param source - DataRequestConfig object - */ - abstract function insert($data,$source); - - /*! delete record from storage - - @param data - DataAction object - @param source - DataRequestConfig object - */ - abstract function delete($data,$source); - - /*! update record in storage - - @param data - DataAction object - @param source - DataRequestConfig object - */ - abstract function update($data,$source); - - /*! select record from storage - - @param source - DataRequestConfig object - */ - abstract function select($source); - - /*! get size of storage - - @param source - DataRequestConfig object - */ - abstract function get_size($source); - - /*! get all variations of field in storage - - @param name - name of field - @param source - DataRequestConfig object - */ - abstract function get_variants($name,$source); - - /*! checks if there is a custom sql string for specified db operation - - @param name - name of DB operation - @param data - hash of data - @return - sql string - */ - public function get_sql($name,$data){ - return ""; //custom sql not supported by default - } - - /*! begins DB transaction - */ - public function begin_transaction(){ - throw new Exception("Data wrapper not supports transactions."); - } - /*! commits DB transaction - */ - public function commit_transaction(){ - throw new Exception("Data wrapper not supports transactions."); - } - /*! rollbacks DB transaction - */ - public function rollback_transaction(){ - throw new Exception("Data wrapper not supports transactions."); - } -} - -/*! Common database abstraction class - Class provides base set of methods to access and change data in DB, class used as a base for DB-specific wrappers -**/ -abstract class DBDataWrapper extends DataWrapper{ - private $transaction = false; //!< type of transaction - private $sequence=false;//!< sequence name - private $sqls = array();//!< predefined sql actions - - - /*! assign named sql query - @param name - name of sql query - @param data - sql query text - */ - public function attach($name,$data){ - $name=strtolower($name); - $this->sqls[$name]=$data; - } - /*! replace vars in sql string with actual values - - @param matches - array of field name matches - @return - value for the var name - */ - public function get_sql_callback($matches){ - return $this->escape($this->temp->get_value($matches[1])); - } - public function get_sql($name,$data){ - $name=strtolower($name); - if (!array_key_exists($name,$this->sqls)) return ""; - - - $str = $this->sqls[$name]; - $this->temp = $data; //dirty - $str = preg_replace_callback('|\{([^}]+)\}|',array($this,"get_sql_callback"),$str); - unset ($this->temp); //dirty - return $str; - } - - public function insert($data,$source){ - $sql=$this->insert_query($data,$source); - $this->query($sql); - $data->success($this->get_new_id()); - } - public function delete($data,$source){ - $sql=$this->delete_query($data,$source); - $this->query($sql); - $data->success(); - } - public function update($data,$source){ - $sql=$this->update_query($data,$source); - $this->query($sql); - $data->success(); - } - public function select($source){ - $select=$source->get_fieldset(); - if (!$select){ - $select=$this->config->db_names_list($this); - $select = implode(",",$select); - } - - $where=$this->build_where($source->get_filters(),$source->get_relation()); - $sort=$this->build_order($source->get_sort_by()); - - return $this->query($this->select_query($select,$source->get_source(),$where,$sort,$source->get_start(),$source->get_count())); - } - public function get_size($source){ - $count = new DataRequestConfig($source); - - $count->set_fieldset("COUNT(*) as DHX_COUNT "); - $count->set_sort(null); - $count->set_limit(0,0); - - $res=$this->select($count); - $data=$this->get_next($res); - if (array_key_exists("DHX_COUNT",$data)) return $data["DHX_COUNT"]; - else return $data["dhx_count"]; //postgresql - } - public function get_variants($name,$source){ - $count = new DataRequestConfig($source); - $count->set_fieldset("DISTINCT ".$this->escape_name($name)." as value"); - $count->set_sort(null); - $count->set_limit(0,0); - - return $this->select($count); - } - - public function sequence($sec){ - $this->sequence=$sec; - } - - - /*! create an sql string for filtering rules - - @param rules - set of filtering rules - @param relation - name of relation id field - @return - sql string with filtering rules - */ - protected function build_where($rules,$relation=false){ - $sql=array(); - for ($i=0; $i < sizeof($rules); $i++) - if (is_string($rules[$i])) - array_push($sql,$rules[$i]); - else - if ($rules[$i]["value"]!=""){ - if (!$rules[$i]["operation"]) - array_push($sql,$this->escape_name($rules[$i]["name"])." LIKE '%".$this->escape($rules[$i]["value"])."%'"); - else - array_push($sql,$this->escape_name($rules[$i]["name"])." ".$rules[$i]["operation"]." '".$this->escape($rules[$i]["value"])."'"); - } - if ($relation!==false) - array_push($sql,$this->escape_name($this->config->relation_id["db_name"])." = '".$this->escape($relation)."'"); - return implode(" AND ",$sql); - } - /*! convert sorting rules to sql string - - @param by - set of sorting rules - @return - sql string for set of sorting rules - */ - protected function build_order($by){ - if (!sizeof($by)) return ""; - $out = array(); - for ($i=0; $i < sizeof($by); $i++) - if ($by[$i]["name"]) - $out[]=$this->escape_name($by[$i]["name"])." ".$by[$i]["direction"]; - return implode(",",$out); - } - - /*! generates sql code for select operation - - @param select - list of fields in select - @param from - table name - @param where - list of filtering rules - @param sort - list of sorting rules - @param start - start index of fetching - @param count - count of records to fetch - @return - sql string for select operation - */ - protected function select_query($select,$from,$where,$sort,$start,$count){ - $sql="SELECT ".$select." FROM ".$from; - if ($where) $sql.=" WHERE ".$where; - if ($sort) $sql.=" ORDER BY ".$sort; - if ($start || $count) $sql.=" LIMIT ".$start.",".$count; - return $sql; - } - /*! generates update sql - - @param data - DataAction object - @param request - DataRequestConfig object - @return - sql string, which updates record with provided data - */ - protected function update_query($data,$request){ - $sql="UPDATE ".$request->get_source()." SET "; - $temp=array(); - for ($i=0; $i < sizeof($this->config->text); $i++) { - $step=$this->config->text[$i]; - - if ($data->get_value($step["name"])===Null) - $step_value ="Null"; - else - $step_value = "'".$this->escape($data->get_value($step["name"]))."'"; - $temp[$i]= $this->escape_name($step["db_name"])."=". $step_value; - } - if ($relation = $this->config->relation_id["db_name"]){ - $temp[]= $this->escape_name($relation)."='".$this->escape($data->get_value($relation))."'"; - } - $sql.=implode(",",$temp)." WHERE ".$this->escape_name($this->config->id["db_name"])."='".$this->escape($data->get_id())."'"; - - //if we have limited set - set constraints - $where=$this->build_where($request->get_filters(),$request->get_relation()); - if ($where) $sql.=" AND (".$where.")"; - - return $sql; - } - - /*! generates delete sql - - @param data - DataAction object - @param request - DataRequestConfig object - @return - sql string, which delete record - */ - protected function delete_query($data,$request){ - $sql="DELETE FROM ".$request->get_source(); - $sql.=" WHERE ".$this->escape_name($this->config->id["db_name"])."='".$this->escape($data->get_id())."'"; - - //if we have limited set - set constraints - $where=$this->build_where($request->get_filters(),$request->get_relation()); - if ($where) $sql.=" AND (".$where.")"; - - return $sql; - } - - /*! generates insert sql - - @param data - DataAction object - @param request - DataRequestConfig object - @return - sql string, which inserts new record with provided data - */ - protected function insert_query($data,$request){ - $temp_n=array(); - $temp_v=array(); - foreach($this->config->text as $k => $v){ - $temp_n[$k]=$this->escape_name($v["db_name"]); - if ($data->get_value($v["name"])===Null) - $temp_v[$k]="Null"; - else - $temp_v[$k]="'".$this->escape($data->get_value($v["name"]))."'"; - } - if ($relation = $this->config->relation_id["db_name"]){ - $temp_n[]=$this->escape_name($relation); - $temp_v[]="'".$this->escape($data->get_value($relation))."'"; - } - if ($this->sequence){ - $temp_n[]=$this->escape_name($this->config->id["db_name"]); - $temp_v[]=$this->sequence; - } - - $sql="INSERT INTO ".$request->get_source()."(".implode(",",$temp_n).") VALUES (".implode(",",$temp_v).")"; - - return $sql; - } - - /*! sets the transaction mode, used by dataprocessor - - @param mode - mode name - */ - public function set_transaction_mode($mode){ - if ($mode!="none" && $mode!="global" && $mode!="record") - throw new Exception("Unknown transaction mode"); - $this->transaction=$mode; - } - /*! returns true if global transaction mode was specified - @return - true if global transaction mode was specified - */ - public function is_global_transaction(){ - return $this->transaction == "global"; - } - /*! returns true if record transaction mode was specified - @return - true if record transaction mode was specified - */ - public function is_record_transaction(){ - return $this->transaction == "record"; - } - - - public function begin_transaction(){ - $this->query("BEGIN"); - } - public function commit_transaction(){ - $this->query("COMMIT"); - } - public function rollback_transaction(){ - $this->query("ROLLBACK"); - } - - /*! exec sql string - - @param sql - sql string - @return - sql result set - */ - abstract protected function query($sql); - /*! returns next record from result set - - @param res - sql result set - @return - hash of data - */ - abstract public function get_next($res); - /*! returns new id value, for newly inserted row - @return - new id value, for newly inserted row - */ - abstract protected function get_new_id(); - /*! escape data to prevent sql injections - @param data - unescaped data - @return - escaped data - */ - abstract public function escape($data); - - /*! escape field name to prevent sql reserved words conflict - @param data - unescaped data - @return - escaped data - */ - public function escape_name($data){ - return $data; - } - - /*! get list of tables in the database - - @return - array of table names - */ - public function tables_list() { - throw new Exception("Not implemented"); - } - - /*! returns list of fields for the table in question - - @param table - name of table in question - @return - array of field names - */ - public function fields_list($table) { - throw new Exception("Not implemented"); - } - -} -/*! Implementation of DataWrapper for MySQL -**/ -class MySQLDBDataWrapper extends DBDataWrapper{ - protected $last_result; - public function query($sql){ - LogMaster::log($sql); - $res=mysql_query($sql,$this->connection); - if ($res===false) throw new Exception("MySQL operation failed\n".mysql_error($this->connection)); - $this->last_result = $res; - return $res; - } - - public function get_next($res){ - if (!$res) - $res = $this->last_result; - - return mysql_fetch_assoc($res); - } - - protected function get_new_id(){ - return mysql_insert_id($this->connection); - } - - public function escape($data){ - return mysql_real_escape_string($data); - } - - public function tables_list() { - $result = mysql_query("SHOW TABLES"); - if ($result===false) throw new Exception("MySQL operation failed\n".mysql_error($this->connection)); - - $tables = array(); - while ($table = mysql_fetch_array($result)) { - $tables[] = $table[0]; - } - return $tables; - } - - public function fields_list($table) { - $result = mysql_query("SHOW COLUMNS FROM `".$table."`"); - if ($result===false) throw new Exception("MySQL operation failed\n".mysql_error($this->connection)); - - $fields = array(); - $id = ""; - while ($field = mysql_fetch_assoc($result)) { - if ($field['Key'] == "PRI") - $id = $field["Field"]; - else - $fields[] = $field["Field"]; - } - return array("fields" => $fields, "key" => $id ); - } - - /*! escape field name to prevent sql reserved words conflict - @param data - unescaped data - @return - escaped data - */ - public function escape_name($data){ - if ((strpos($data,"`")!==false || intval($data)==$data) || (strpos($data,".")!==false)) - return $data; - return '`'.$data.'`'; - } -} -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mssql.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mssql.php deleted file mode 100644 index 4cad2217878..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mssql.php +++ /dev/null @@ -1,66 +0,0 @@ -connection); - if ($this->insert_operation){ - $last = mssql_fetch_assoc($res); - $this->last_id = $last["dhx_id"]; - mssql_free_result($res); - } - if ($this->start_from) - mssql_data_seek($res,$this->start_from); - return $res; - } - - public function get_next($res){ - return mssql_fetch_assoc($res); - } - - protected function get_new_id(){ - /* - MSSQL doesn't support identity or auto-increment fields - Insert SQL returns new ID value, which stored in last_id field - */ - return $this->last_id; - } - - protected function insert_query($data,$request){ - $sql = parent::insert_query($data,$request); - $this->insert_operation=true; - return $sql.";SELECT @@IDENTITY AS dhx_id"; - } - - protected function select_query($select,$from,$where,$sort,$start,$count){ - $sql="SELECT " ; - if ($count) - $sql.=" TOP ".($count+$start); - $sql.=" ".$select." FROM ".$from; - if ($where) $sql.=" WHERE ".$where; - if ($sort) $sql.=" ORDER BY ".$sort; - if ($start && $count) - $this->start_from=$start; - else - $this->start_from=false; - return $sql; - } - - public function escape($data){ - /* - there is no special escaping method for mssql - use common logic - */ - return str_replace("'","''",$data); - } - - public function begin_transaction(){ - $this->query("BEGIN TRAN"); - } -} -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mysqli.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mysqli.php deleted file mode 100644 index a33ca71bbe4..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mysqli.php +++ /dev/null @@ -1,53 +0,0 @@ -connection->query($sql); - if ($res===false) throw new Exception("MySQL operation failed\n".$this->connection->error); - return $res; - } - - public function get_next($res){ - return $res->fetch_assoc(); - } - - protected function get_new_id(){ - return $this->connection->insert_id; - } - - public function escape($data){ - return $this->connection->real_escape_string($data); - } - - public function tables_list() { - $result = $this->connection->query("SHOW TABLES"); - if ($result===false) throw new Exception("MySQL operation failed\n".$this->connection->error); - - $tables = array(); - while ($table = $result->fetch_array()) { - $tables[] = $table[0]; - } - return $tables; - } - - public function fields_list($table) { - $result = $this->connection->query("SHOW COLUMNS FROM `".$table."`"); - if ($result===false) throw new Exception("MySQL operation failed\n".$this->connection->error); - $fields = array(); - while ($field = $result->fetch_array()) { - if ($field['Key'] == "PRI") { - $fields[$field[0]] = 1; - } else { - $fields[$field[0]] = 0; - } - } - return $fields; - } - -} - -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_oracle.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_oracle.php deleted file mode 100644 index 46c3e88bebe..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_oracle.php +++ /dev/null @@ -1,79 +0,0 @@ -connection,$sql); - if ($stm===false) throw new Exception("Oracle - sql parsing failed\n".oci_error($this->connection)); - - $out = array(0=>null); - if($this->insert_operation){ - oci_bind_by_name($stm,":outID",$out[0],999); - $this->insert_operation=false; - } - - - $mode = ($this->is_record_transaction() || $this->is_global_transaction())?OCI_DEFAULT:OCI_COMMIT_ON_SUCCESS; - $res=oci_execute($stm,$mode); - if ($res===false) throw new Exception("Oracle - sql execution failed\n".oci_error($this->connection)); - - $this->last_id=$out[0]; - - return $stm; - } - - public function get_next($res){ - $data = oci_fetch_assoc($res); - if (array_key_exists("VALUE",$data)) - $data["value"]=$data["VALUE"]; - return $data; - } - - protected function get_new_id(){ - /* - Oracle doesn't support identity or auto-increment fields - Insert SQL returns new ID value, which stored in last_id field - */ - return $this->last_id; - } - - protected function insert_query($data,$request){ - $sql = parent::insert_query($data,$request); - $this->insert_operation=true; - return $sql." returning ".$this->config->id["db_name"]." into :outID"; - } - - protected function select_query($select,$from,$where,$sort,$start,$count){ - $sql="SELECT ".$select." FROM ".$from; - if ($where) $sql.=" WHERE ".$where; - if ($sort) $sql.=" ORDER BY ".$sort; - if ($start || $count) - $sql="SELECT * FROM ( select /*+ FIRST_ROWS(".$count.")*/dhx_table.*, ROWNUM rnum FROM (".$sql.") dhx_table where ROWNUM <= ".($count+$start)." ) where rnum >".$start; - return $sql; - } - - public function escape($data){ - /* - as far as I can see the only way to escape data is by using oci_bind_by_name - while it is neat solution in common case, it conflicts with existing SQL building logic - fallback to simple escaping - */ - return str_replace("'","''",$data); - } - - public function begin_transaction(){ - //auto-start of transaction - } - public function commit_transaction(){ - oci_commit($this->connection); - } - public function rollback_transaction(){ - oci_rollback($this->connection); - } -} -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_pdo.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_pdo.php deleted file mode 100644 index 8fb6cf4578b..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_pdo.php +++ /dev/null @@ -1,65 +0,0 @@ -connection->query($sql); - if ($res===false) throw new Exception("PDO - sql execution failed\n".$this->connection->errorInfo()); - - return new PDOResultSet($res); - } - - protected function select_query($select,$from,$where,$sort,$start,$count){ - $sql="SELECT ".$select." FROM ".$from; - if ($where) $sql.=" WHERE ".$where; - if ($sort) $sql.=" ORDER BY ".$sort; - if ($start || $count) { - if ($this->connection->getAttribute(PDO::ATTR_DRIVER_NAME)=="pgsql") - $sql.=" OFFSET ".$start." LIMIT ".$count; - else - $sql.=" LIMIT ".$start.",".$count; - } - return $sql; - } - - - public function get_next($res){ - $data = $res->next(); - return $data; - } - - protected function get_new_id(){ - return $this->connection->lastInsertId(); - } - - public function escape($str){ - $res=$this->connection->quote($str); - if ($res===false) //not supported by pdo driver - return str_replace("'","''",$str); - return substr($res,1,-1); - } - -} - -class PDOResultSet{ - private $res; - public function __construct($res){ - $this->res = $res; - } - public function next(){ - $data = $this->res->fetch(PDO::FETCH_ASSOC); - if (!$data){ - $this->res->closeCursor(); - return null; - } - return $data; - } -} -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_postgre.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_postgre.php deleted file mode 100644 index 08f1b1aaa79..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_postgre.php +++ /dev/null @@ -1,66 +0,0 @@ -connection,$sql); - if ($res===false) throw new Exception("Postgre - sql execution failed\n".pg_last_error($this->connection)); - - return $res; - } - - protected function select_query($select,$from,$where,$sort,$start,$count){ - $sql="SELECT ".$select." FROM ".$from; - if ($where) $sql.=" WHERE ".$where; - if ($sort) $sql.=" ORDER BY ".$sort; - if ($start || $count) - $sql.=" OFFSET ".$start." LIMIT ".$count; - return $sql; - } - - public function get_next($res){ - return pg_fetch_assoc($res); - } - - protected function get_new_id(){ - $res = pg_query( $this->connection, "SELECT LASTVAL() AS seq"); - $data = pg_fetch_assoc($res); - pg_free_result($res); - return $data['seq']; - } - - public function escape($data){ - //need to use oci_bind_by_name - return pg_escape_string($this->connection,$data); - } - - public function tables_list() { - $sql = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'"; - $res = pg_query($this->connection, $sql); - $tables = array(); - while ($table = pg_fetch_assoc($res)) { - $tables[] = $table['table_name']; - } - return $tables; - } - - public function fields_list($table) { - $sql = "SELECT * FROM information_schema.constraint_column_usage"; - $result = pg_query($this->connection, $sql); - $field = pg_fetch_assoc($result); - $id = $field['column_name']; - - $sql = "SELECT * FROM information_schema.columns WHERE table_name ='".$table."';"; - $result = pg_query($this->connection, $sql); - $fields = array(); - $id = ""; - while ($field = pg_fetch_assoc($result)) { - $fields[] = $field["column_name"]; - } - return array('fields' => $fields, 'key' => $id ); - } -} -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/grid_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/grid_connector.php deleted file mode 100644 index 5167528739f..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/grid_connector.php +++ /dev/null @@ -1,268 +0,0 @@ -row_attrs=array(); - $this->cell_attrs=array(); - $this->userdata=array(); - } - /*! set color of row - - @param color - color of row - */ - function set_row_color($color){ - $this->row_attrs["bgColor"]=$color; - } - /*! set style of row - - @param color - color of row - */ - function set_row_style($color){ - $this->row_attrs["style"]=$color; - } - /*! assign custom style to the cell - - @param name - name of column - @param value - css style string - */ - function set_cell_style($name,$value){ - $this->set_cell_attribute($name,"style",$value); - } - /*! assign custom class to specific cell - - @param name - name of column - @param value - css class name - */ - function set_cell_class($name,$value){ - $this->set_cell_attribute($name,"class",$value); - } - /*! set custom cell attribute - - @param name - name of column - @param attr - name of attribute - @param value - value of attribute - */ - function set_cell_attribute($name,$attr,$value){ - if (!$this->cell_attrs[$name]) $this->cell_attrs[$name]=array(); - $this->cell_attrs[$name][$attr]=$value; - } - - /*! set userdata section for the item - - @param name - name of userdata - @param value - value of userdata - */ - function set_userdata($name, $value){ - $this->userdata[$name]=$value; - } - - /*! set custom row attribute - - @param attr - name of attribute - @param value - value of attribute - */ - function set_row_attribute($attr,$value){ - $this->row_attrs[$attr]=$value; - } - - /*! return self as XML string, starting part - */ - public function to_xml_start(){ - if ($this->skip) return ""; - - $str="row_attrs as $k=>$v) - $str.=" ".$k."='".$v."'"; - $str.=">"; - for ($i=0; $i < sizeof($this->config->text); $i++){ - $str.="config->text[$i]["name"]; - if (isset($this->cell_attrs[$name])){ - $cattrs=$this->cell_attrs[$name]; - foreach ($cattrs as $k => $v) - $str.=" ".$k."='".$this->xmlentities($v)."'"; - } - $str.=">data[$name]."]]>"; - } - foreach ($this->userdata as $key => $value) - $str.=""; - - return $str; - } - /*! return self as XML string, ending part - */ - public function to_xml_end(){ - if ($this->skip) return ""; - - return ""; - } -} -/*! Connector for the dhtmlxgrid -**/ -class GridConnector extends Connector{ - protected $extra_output="";//!< extra info which need to be sent to client side - private $options=array();//!< hash of OptionsConnector - - /*! constructor - - Here initilization of all Masters occurs, execution timer initialized - @param res - db connection resource - @param type - string , which hold type of database ( MySQL or Postgre ), optional, instead of short DB name, full name of DataWrapper-based class can be provided - @param item_type - name of class, which will be used for item rendering, optional, DataItem will be used by default - @param data_type - name of class which will be used for dataprocessor calls handling, optional, DataProcessor class will be used by default. - */ - public function __construct($res,$type=false,$item_type=false,$data_type=false){ - if (!$item_type) $item_type="GridDataItem"; - if (!$data_type) $data_type="GridDataProcessor"; - parent::__construct($res,$type,$item_type,$data_type); - } - - - protected function parse_request(){ - parent::parse_request(); - - if (isset($_GET["dhx_colls"])) - $this->fill_collections($_GET["dhx_colls"]); - - if (isset($_GET["posStart"]) && isset($_GET["count"])) - $this->request->set_limit($_GET["posStart"],$_GET["count"]); - } - protected function resolve_parameter($name){ - if (intval($name).""==$name) - return $this->config->text[intval($name)]["db_name"]; - return $name; - } - - /*! replace xml unsafe characters - - @param string - string to be escaped - @return - escaped string - */ - private function xmlentities($string) { - return str_replace( array( '&', '"', "'", '<', '>', '’' ), array( '&' , '"', ''' , '<' , '>', ''' ), $string); - } - - /*! assign options collection to the column - - @param name - name of the column - @param options - array or connector object - */ - public function set_options($name,$options){ - if (is_array($options)){ - $str=""; - foreach($options as $k => $v) - $str.=""; - $options=$str; - } - $this->options[$name]=$options; - } - /*! generates xml description for options collections - - @param list - comma separated list of column names, for which options need to be generated - */ - protected function fill_collections($list){ - $names=explode(",",$list); - for ($i=0; $i < sizeof($names); $i++) { - $name = $this->resolve_parameter($names[$i]); - if (!array_key_exists($name,$this->options)){ - $this->options[$name] = new DistinctOptionsConnector($this->get_connection(),$this->names["db_class"]); - $c = new DataConfig($this->config); - $r = new DataRequestConfig($this->request); - $c->minimize($name); - - $this->options[$name]->render_connector($c,$r); - } - - $this->extra_output.=""; - if (!is_string($this->options[$name])) - $this->extra_output.=$this->options[$name]->render(); - else - $this->extra_output.=$this->options[$name]; - $this->extra_output.=""; - } - } - - /*! renders self as xml, starting part - */ - protected function xml_start(){ - if ($this->dload){ - if ($pos=$this->request->get_start()) - return ""; - else - return ""; - } - else - return ""; - } - - - /*! renders self as xml, ending part - */ - protected function xml_end(){ - return $this->extra_output.""; - } - - public function set_config($config = false){ - if (gettype($config) == 'boolean') - $config = new GridConfiguration($config); - - $this->event->attach("beforeOutput", Array($config, "attachHeaderToXML")); - } -} - -/*! DataProcessor class for Grid component -**/ -class GridDataProcessor extends DataProcessor{ - - /*! convert incoming data name to valid db name - converts c0..cN to valid field names - @param data - data name from incoming request - @return - related db_name - */ - function name_data($data){ - if ($data == "gr_id") return $this->config->id["name"]; - $parts=explode("c",$data); - if ($parts[0]=="" && intval($parts[1])==$parts[1]) - return $this->config->text[intval($parts[1])]["name"]; - return $data; - } -} - -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/scheduler_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/scheduler_connector.php deleted file mode 100644 index 82a1f4601e0..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/scheduler_connector.php +++ /dev/null @@ -1,121 +0,0 @@ -skip) return ""; - - $str=""; - $str.="data[$this->config->text[0]["name"]]."]]>"; - $str.="data[$this->config->text[1]["name"]]."]]>"; - $str.="data[$this->config->text[2]["name"]]."]]>"; - for ($i=3; $iconfig->text); $i++){ - $extra = $this->config->text[$i]["name"]; - $str.="<".$extra.">data[$extra]."]]>"; - } - return $str.""; - } -} - - -/*! Connector class for dhtmlxScheduler -**/ -class SchedulerConnector extends Connector{ - - protected $extra_output="";//!< extra info which need to be sent to client side - private $options=array();//!< hash of OptionsConnector - - - /*! assign options collection to the column - - @param name - name of the column - @param options - array or connector object - */ - public function set_options($name,$options){ - if (is_array($options)){ - $str=""; - foreach($options as $k => $v) - $str.=""; - $options=$str; - } - $this->options[$name]=$options; - } - /*! generates xml description for options collections - - @param list - comma separated list of column names, for which options need to be generated - */ - protected function fill_collections(){ - foreach ($this->options as $k=>$v) { - $name = $k; - $this->extra_output.=""; - if (!is_string($this->options[$name])) - $this->extra_output.=$this->options[$name]->render(); - else - $this->extra_output.=$this->options[$name]; - $this->extra_output.=""; - } - } - - /*! renders self as xml, ending part - */ - protected function xml_end(){ - $this->fill_collections(); - return $this->extra_output.""; - } - - - /*! constructor - - Here initilization of all Masters occurs, execution timer initialized - @param res - db connection resource - @param type - string , which hold type of database ( MySQL or Postgre ), optional, instead of short DB name, full name of DataWrapper-based class can be provided - @param item_type - name of class, which will be used for item rendering, optional, DataItem will be used by default - @param data_type - name of class which will be used for dataprocessor calls handling, optional, DataProcessor class will be used by default. - */ - public function __construct($res,$type=false,$item_type=false,$data_type=false){ - if (!$item_type) $item_type="SchedulerDataItem"; - if (!$data_type) $data_type="SchedulerDataProcessor"; - parent::__construct($res,$type,$item_type,$data_type); - } - - //parse GET scoope, all operations with incoming request must be done here - function parse_request(){ - parent::parse_request(); - if (count($this->config->text)){ - if (isset($_GET["to"])) - $this->request->set_filter($this->config->text[0]["name"],$_GET["to"],"<"); - if (isset($_GET["from"])) - $this->request->set_filter($this->config->text[1]["name"],$_GET["from"],">"); - } - } -} - -/*! DataProcessor class for Scheduler component -**/ -class SchedulerDataProcessor extends DataProcessor{ - function name_data($data){ - if ($data=="start_date") - return $this->config->text[0]["db_name"]; - if ($data=="id") - return $this->config->id["db_name"]; - if ($data=="end_date") - return $this->config->text[1]["db_name"]; - if ($data=="text") - return $this->config->text[2]["db_name"]; - - return $data; - } -} - -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tools.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tools.php deleted file mode 100644 index c5b92e6ab2b..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tools.php +++ /dev/null @@ -1,254 +0,0 @@ -events=array(); - } - /*! Method check if event with such name already exists. - @param name - name of event, case non-sensitive - @return - true if event with such name registered, false otherwise - */ - public function exist($name){ - $name=strtolower($name); - return (isset($this->events[$name]) && sizeof($this->events[$name])); - } - /*! Attach custom code to event. - - Only on event handler can be attached in the same time. If new event handler attached - old will be detached. - - @param name - name of event, case non-sensitive - @param method - function which will be attached. You can use array(class, method) if you want to attach the method of the class. - */ - public function attach($name,$method){ - $name=strtolower($name); - if (!array_key_exists($name,$this->events)) - $this->events[$name]=array(); - $this->events[$name][]=$method; - } - - public static function attach_static($name, $method){ - $name=strtolower($name); - if (!array_key_exists($name,EventMaster::$eventsStatic)) - EventMaster::$eventsStatic[$name]=array(); - EventMaster::$eventsStatic[$name][]=$method; - } - - public static function trigger_static($name, $method){ - $arg_list = func_get_args(); - $name=strtolower(array_shift($arg_list)); - - if (isset(EventMaster::$eventsStatic[$name])) - foreach(EventMaster::$eventsStatic[$name] as $method){ - if (is_array($method) && !method_exists($method[0],$method[1])) - throw new Exception("Incorrect method assigned to event: ".$method[0].":".$method[1]); - if (!is_array($method) && !function_exists($method)) - throw new Exception("Incorrect function assigned to event: ".$method); - call_user_func_array($method, $arg_list); - } - return true; - } - - /*! Detach code from event - @param name - name of event, case non-sensitive - */ - public function detach($name){ - $name=strtolower($name); - unset($this->events[$name]); - } - /*! Trigger event. - @param name - name of event, case non-sensitive - @param data - value which will be provided as argument for event function, - you can provide multiple data arguments, method accepts variable number of parameters - @return - true if event handler was not assigned , result of event hangler otherwise - */ - public function trigger($name,$data){ - $arg_list = func_get_args(); - $name=strtolower(array_shift($arg_list)); - - if (isset($this->events[$name])) - foreach($this->events[$name] as $method){ - if (is_array($method) && !method_exists($method[0],$method[1])) - throw new Exception("Incorrect method assigned to event: ".$method[0].":".$method[1]); - if (!is_array($method) && !function_exists($method)) - throw new Exception("Incorrect function assigned to event: ".$method); - call_user_func_array($method, $arg_list); - } - return true; - } -} - -/*! Class which handles access rules. -**/ -class AccessMaster{ - private $rules,$local; - /*! constructor - - Set next access right to "allowed" by default : read, insert, update, delete - Basically - all common data operations allowed by default - */ - function __construct(){ - $this->rules=array("read" => true, "insert" => true, "update" => true, "delete" => true); - $this->local=true; - } - /*! change access rule to "allow" - @param name - name of access right - */ - public function allow($name){ - $this->rules[$name]=true; - } - /*! change access rule to "deny" - - @param name - name of access right - */ - public function deny($name){ - $this->rules[$name]=false; - } - - /*! change all access rules to "deny" - */ - public function deny_all(){ - $this->rules=array(); - } - - /*! check access rule - - @param name - name of access right - @return - true if access rule allowed, false otherwise - */ - public function check($name){ - if ($this->local){ - /*! - todo - add referrer check, to prevent access from remote points - */ - } - if (!isset($this->rules[$name]) || !$this->rules[$name]){ - return false; - } - return true; - } -} - -/*! Controls error and debug logging. - Class designed to be used as static object. -**/ -class LogMaster{ - private static $_log=false;//!< logging mode flag - private static $_output=false;//!< output error infor to client flag - private static $session="";//!< all messages generated for current request - - /*! convert array to string representation ( it is a bit more readable than var_dump ) - - @param data - data object - @param pref - prefix string, used for formating, optional - @return - string with array description - */ - private static function log_details($data,$pref=""){ - if (is_array($data)){ - $str=array(""); - foreach($data as $k=>$v) - array_push($str,$pref.$k." => ".LogMaster::log_details($v,$pref."\t")); - return implode("\n",$str); - } - return $data; - } - /*! put record in log - - @param str - string with log info, optional - @param data - data object, which will be added to log, optional - */ - public static function log($str="",$data=""){ - if (LogMaster::$_log){ - $message = $str.LogMaster::log_details($data)."\n\n"; - LogMaster::$session.=$message; - error_log($message,3,LogMaster::$_log); - } - } - - /*! get logs for current request - @return - string, which contains all log messages generated for current request - */ - public static function get_session_log(){ - return LogMaster::$session; - } - - /*! error handler, put normal php errors in log file - - @param errn - error number - @param errstr - error description - @param file - error file - @param line - error line - @param context - error cntext - */ - public static function error_log($errn,$errstr,$file,$line,$context){ - LogMaster::log($errstr." at ".$file." line ".$line); - } - - /*! exception handler, used as default reaction on any error - show execution log and stop processing - - @param exception - instance of Exception - */ - public static function exception_log($exception){ - LogMaster::log("!!!Uncaught Exception\nCode: " . $exception->getCode() . "\nMessage: " . $exception->getMessage()); - if (LogMaster::$_output){ - echo "
\n";
-			echo LogMaster::get_session_log();
-			echo "\n
"; - } - die(); - } - - /*! enable logging - - @param name - path to the log file, if boolean false provided as value - logging will be disabled - @param output - flag of client side output, if enabled - session log will be sent to client side in case of an error. - */ - public static function enable_log($name,$output=false){ - LogMaster::$_log=$name; - LogMaster::$_output=$output; - if ($name){ - set_error_handler(array("LogMaster","error_log"),E_ALL); - set_exception_handler(array("LogMaster","exception_log")); - LogMaster::log("\n\n====================================\nLog started, ".date("d/m/Y h:m:s")."\n===================================="); - } - } -} - -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tree_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tree_connector.php deleted file mode 100644 index 21886548d50..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tree_connector.php +++ /dev/null @@ -1,274 +0,0 @@ -im0=false; - $this->im1=false; - $this->im2=false; - $this->check=false; - $this->attrs = array(); - $this->userdata = array(); - } - /*! get id of parent record - - @return - id of parent record - */ - function get_parent_id(){ - return $this->data[$this->config->relation_id["name"]]; - } - /*! get state of items checkbox - - @return - state of item's checkbox as int value, false if state was not defined - */ - function get_check_state(){ - return $this->check; - } - /*! set state of item's checkbox - - @param value - int value, 1 - checked, 0 - unchecked, -1 - third state - */ - function set_check_state($value){ - $this->check=$value; - } - - /*! return count of child items - -1 if there is no info about childs - @return - count of child items - */ - function has_kids(){ - return $this->kids; - } - /*! sets count of child items - @param value - count of child items - */ - function set_kids($value){ - $this->kids=$value; - } - - /*! set custom attribute - - @param name - name of the attribute - @param value - new value of the attribute - */ - function set_attribute($name, $value){ - switch($name){ - case "id": - $this->set_id($value); - break; - case "text": - $this->data[$this->config->text[0]["name"]]=$value; - break; - case "checked": - $this->set_check_state($value); - break; - case "im0": - $this->im0=$value; - break; - case "im1": - $this->im1=$value; - break; - case "im2": - $this->im2=$value; - break; - case "child": - $this->set_kids($value); - break; - default: - $this->attrs[$name]=$value; - } - } - - /*! set userdata section for the item - - @param name - name of userdata - @param value - value of userdata - */ - function set_userdata($name, $value){ - $this->userdata[$name]=$value; - } - - /*! assign image for tree's item - - @param img_folder_closed - image for item, which represents folder in closed state - @param img_folder_open - image for item, which represents folder in opened state, optional - @param img_leaf - image for item, which represents leaf item, optional - */ - function set_image($img_folder_closed,$img_folder_open=false,$img_leaf=false){ - $this->im0=$img_folder_closed; - $this->im1=$img_folder_open?$img_folder_open:$img_folder_closed; - $this->im2=$img_leaf?$img_leaf:$img_folder_closed; - } - /*! return self as XML string, starting part - */ - function to_xml_start(){ - if ($this->skip) return ""; - - $str1="has_kids()==true) $str1.="child='".$this->has_kids()."' "; - if ($this->im0) $str1.="im0='".$this->im0."' "; - if ($this->im1) $str1.="im1='".$this->im0."' "; - if ($this->im2) $str1.="im2='".$this->im0."' "; - if ($this->check) $str1.="checked='".$this->check."' "; - foreach ($this->attrs as $key => $value) - $str1.=$key."='".$this->xmlentities($value)."' "; - $str1.=">"; - foreach ($this->userdata as $key => $value) - $str1.=""; - - return $str1; - } - /*! return self as XML string, ending part - */ - function to_xml_end(){ - if ($this->skip) return ""; - return ""; - } - -} - -require_once("filesystem_item.php"); - -/*! Connector for the dhtmlxtree -**/ -class TreeConnector extends Connector{ - private $id_swap = array(); - - /*! constructor - - Here initilization of all Masters occurs, execution timer initialized - @param res - db connection resource - @param type - string , which hold type of database ( MySQL or Postgre ), optional, instead of short DB name, full name of DataWrapper-based class can be provided - @param item_type - name of class, which will be used for item rendering, optional, DataItem will be used by default - @param data_type - name of class which will be used for dataprocessor calls handling, optional, DataProcessor class will be used by default. - */ - public function __construct($res,$type=false,$item_type=false,$data_type=false){ - if (!$item_type) $item_type="TreeDataItem"; - if (!$data_type) $data_type="TreeDataProcessor"; - parent::__construct($res,$type,$item_type,$data_type); - - $this->event->attach("afterInsert",array($this,"parent_id_correction_a")); - $this->event->attach("beforeProcessing",array($this,"parent_id_correction_b")); - } - - /*! store info about ID changes during insert operation - @param dataAction - data action object during insert operation - */ - public function parent_id_correction_a($dataAction){ - $this->id_swap[$dataAction->get_id()]=$dataAction->get_new_id(); - } - /*! update ID if it was affected by previous operation - @param dataAction - data action object, before any processing operation - */ - public function parent_id_correction_b($dataAction){ - $relation = $this->config->relation_id["db_name"]; - $value = $dataAction->get_value($relation); - - if (array_key_exists($value,$this->id_swap)) - $dataAction->set_value($relation,$this->id_swap[$value]); - } - - - public function parse_request(){ - parent::parse_request(); - - if (isset($_GET["id"])) - $this->request->set_relation($_GET["id"]); - else - $this->request->set_relation("0"); - - $this->request->set_limit(0,0); //netralize default reaction on dyn. loading mode - } - - - - protected function render_set($res){ - $output=""; - $index=0; - while ($data=$this->sql->get_next($res)){ - $data = new $this->names["item_class"]($data,$this->config,$index); - $this->event->trigger("beforeRender",$data); - //there is no info about child elements, - //if we are using dyn. loading - assume that it has, - //in normal mode juse exec sub-render routine - if ($data->has_kids()===-1 && $this->dload) - $data->set_kids(true); - $output.=$data->to_xml_start(); - if ($data->has_kids()===-1 || ( $data->has_kids()==true && !$this->dload)){ - $sub_request = new DataRequestConfig($this->request); - $sub_request->set_relation($data->get_id()); - $output.=$this->render_set($this->sql->select($sub_request)); - } - $output.=$data->to_xml_end(); - $index++; - } - return $output; - } - /*! renders self as xml, starting part - */ - public function xml_start(){ - return ""; - } - - /*! renders self as xml, ending part - */ - public function xml_end(){ - return ""; - } -} - - -class TreeDataProcessor extends DataProcessor{ - - function __construct($connector,$config,$request){ - parent::__construct($connector,$config,$request); - $request->set_relation(false); - } - - /*! convert incoming data name to valid db name - converts c0..cN to valid field names - @param data - data name from incoming request - @return - related db_name - */ - function name_data($data){ - if ($data=="tr_pid") - return $this->config->relation_id["db_name"]; - if ($data=="tr_text") - return $this->config->text[0]["db_name"]; - return $data; - } -} - -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/treegrid_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/treegrid_connector.php deleted file mode 100644 index b410cb46527..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/treegrid_connector.php +++ /dev/null @@ -1,161 +0,0 @@ -im0=false; - } - /*! return id of parent record - - @return - id of parent record - */ - function get_parent_id(){ - return $this->data[$this->config->relation_id["name"]]; - } - /*! assign image to treegrid's item - longer description - @param img - relative path to the image - */ - function set_image($img){ - $this->set_cell_attribute($this->config->text[0]["name"],"image",$img); - } - - /*! return count of child items - -1 if there is no info about childs - @return - count of child items - */ - function has_kids(){ - return $this->kids; - } - /*! sets count of child items - @param value - count of child items - */ - function set_kids($value){ - $this->kids=$value; - if ($value) - $this->set_row_attribute("xmlkids",$value); - } -} -/*! Connector for dhtmlxTreeGrid -**/ -class TreeGridConnector extends GridConnector{ - private $id_swap = array(); - - /*! constructor - - Here initilization of all Masters occurs, execution timer initialized - @param res - db connection resource - @param type - string , which hold type of database ( MySQL or Postgre ), optional, instead of short DB name, full name of DataWrapper-based class can be provided - @param item_type - name of class, which will be used for item rendering, optional, DataItem will be used by default - @param data_type - name of class which will be used for dataprocessor calls handling, optional, DataProcessor class will be used by default. - */ - public function __construct($res,$type=false,$item_type=false,$data_type=false){ - if (!$item_type) $item_type="TreeGridDataItem"; - if (!$data_type) $data_type="TreeGridDataProcessor"; - parent::__construct($res,$type,$item_type,$data_type); - - $this->event->attach("afterInsert",array($this,"parent_id_correction_a")); - $this->event->attach("beforeProcessing",array($this,"parent_id_correction_b")); - } - - /*! store info about ID changes during insert operation - @param dataAction - data action object during insert operation - */ - public function parent_id_correction_a($dataAction){ - $this->id_swap[$dataAction->get_id()]=$dataAction->get_new_id(); - } - /*! update ID if it was affected by previous operation - @param dataAction - data action object, before any processing operation - */ - public function parent_id_correction_b($dataAction){ - $relation = $this->config->relation_id["db_name"]; - $value = $dataAction->get_value($relation); - - if (array_key_exists($value,$this->id_swap)) - $dataAction->set_value($relation,$this->id_swap[$value]); - } - - /*! process treegrid specific options in incoming request - */ - public function parse_request(){ - parent::parse_request(); - - if (isset($_GET["id"])) - $this->request->set_relation($_GET["id"]); - else - $this->request->set_relation("0"); - - $this->request->set_limit(0,0); //netralize default reaction on dyn. loading mode - } - - /*! process treegrid specific options in incoming request - */ - protected function render_set($res){ - $output=""; - $index=0; - while ($data=$this->sql->get_next($res)){ - $data = new $this->names["item_class"]($data,$this->config,$index); - $this->event->trigger("beforeRender",$data); - //there is no info about child elements, - //if we are using dyn. loading - assume that it has, - //in normal mode juse exec sub-render routine - if ($data->has_kids()===-1 && $this->dload) - $data->set_kids(true); - $output.=$data->to_xml_start(); - if ($data->has_kids()===-1 || ( $data->has_kids()==true && !$this->dload)){ - $sub_request = new DataRequestConfig($this->request); - $sub_request->set_relation($data->get_id()); - $output.=$this->render_set($this->sql->select($sub_request)); - } - $output.=$data->to_xml_end(); - $index++; - } - return $output; - } - - /*! renders self as xml, starting part - */ - protected function xml_start(){ - return ""; - } -} - -/*! DataProcessor class for Grid component -**/ -class TreeGridDataProcessor extends GridDataProcessor{ - - function __construct($connector,$config,$request){ - parent::__construct($connector,$config,$request); - $request->set_relation(false); - } - - /*! convert incoming data name to valid db name - converts c0..cN to valid field names - @param data - data name from incoming request - @return - related db_name - */ - function name_data($data){ - - if ($data=="gr_pid") - return $this->config->relation_id["name"]; - else return parent::name_data($data); - } -} -?> \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/update.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/update.php deleted file mode 100644 index 014a326b051..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/update.php +++ /dev/null @@ -1,262 +0,0 @@ -config=$config; - $this->data=$data; - $this->index=$index; - $this->skip=false; - $this->child = new $type($data, $config, $index); - } - - /*! returns parent_id (for Tree and TreeGrid components) - */ - public function get_parent_id(){ - if (method_exists($this->child, 'get_parent_id')) { - return $this->child->get_parent_id(); - } else { - return ''; - } - } - - - /*! generate XML on the data hash base - */ - public function to_xml(){ - $str= "data['type'].'" '; - $str .= 'id="'.$this->data['dataId'].'" '; - $str .= 'parent="'.$this->get_parent_id().'"'; - $str .= '>'; - $str .= $this->child->to_xml(); - $str .= ''; - return $str; - } - - /*! return starting tag for XML string - */ - public function to_xml_start(){ - $str="data['type'].'" '; - $str .= 'id="'.$this->data['dataId'].'" '; - $str .= 'parent="'.$this->get_parent_id().'"'; - $str .= '>'; - $str .= $this->child->to_xml_start(); - return $str; - } - - /*! return ending tag for XML string - */ - public function to_xml_end(){ - $str = $this->child->to_xml_end(); - $str .= ''; - return $str; - } - - /*! returns false for outputing only current item without child items - */ - public function has_kids(){ - return false; - } - - /*! sets count of child items - @param value - count of child items - */ - public function set_kids($value){ - if (method_exists($this->child, 'set_kids')) { - $this->child->set_kids($value); - } - } - - /*! sets attribute for item - */ - public function set_attribute($name, $value){ - if (method_exists($this->child, 'set_attribute')) { - LogMaster::log("setting attribute: \nname = {$name}\nvalue = {$value}"); - $this->child->set_attribute($name, $value); - } else { - LogMaster::log("set_attribute method doesn't exists"); - } - } -} - - -class DataUpdate{ - - protected $table; //!< table , where actions are stored - protected $url; //!< url for notification service, optional - protected $sql; //!< DB wrapper object - protected $config; //!< DBConfig object - protected $request; //!< DBRequestConfig object - protected $event; - protected $item_class; - protected $demu; - - //protected $config;//!< DataConfig instance - //protected $request;//!< DataRequestConfig instance - - /*! constructor - - @param connector - Connector object - @param config - DataConfig object - @param request - DataRequestConfig object - */ - function __construct($sql, $config, $request, $table, $url){ - $this->config= $config; - $this->request= $request; - $this->sql = $sql; - $this->table=$table; - $this->url=$url; - $this->demu = false; - } - - public function set_demultiplexor($path){ - $this->demu = $path; - } - - public function set_event($master, $name){ - $this->event = $master; - $this->item_class = $name; - } - - private function select_update($actions_table, $join_table, $id_field_name, $version, $user) { - $sql = "SELECT * FROM {$actions_table}"; - $sql .= " LEFT OUTER JOIN {$join_table} ON "; - $sql .= "{$actions_table}.DATAID = {$join_table}.{$id_field_name} "; - $sql .= "WHERE {$actions_table}.ID > '{$version}' AND {$actions_table}.USER <> '{$user}'"; - return $sql; - } - - private function get_update_max_version() { - $sql = "SELECT MAX(id) as VERSION FROM {$this->table}"; - $res = $this->sql->query($sql); - $data = $this->sql->get_next($res); - - if ($data == false || $data['VERSION'] == false) - return 1; - else - return $data['VERSION']; - } - - private function log_update_action($actions_table, $dataId, $status, $user) { - $sql = "INSERT INTO {$actions_table} (DATAID, TYPE, USER) VALUES ('{$dataId}', '{$status}', '{$user}')"; - $this->sql->query($sql); - if ($this->demu) - file_get_contents($this->demu); - } - - - - - /*! records operations in actions_table - @param action - DataAction object - */ - public function log_operations($action) { - $type = $this->sql->escape($action->get_status()); - $dataId = $this->sql->escape($action->get_new_id()); - $user = $this->sql->escape($this->request->get_user()); - if ($type!="error" && $type!="invalid" && $type !="collision") { - $this->log_update_action($this->table, $dataId, $type, $user); - } - } - - - /*! return action version in XMl format - */ - public function get_version() { - $version = $this->get_update_max_version(); - return "".$version.""; - } - - - /*! adds action version in output XML as userdata - */ - public function version_output() { - echo $this->get_version(); - } - - - /*! create update actions in XML-format and sends it to output - */ - public function get_updates() { - $sub_request = new DataRequestConfig($this->request); - $version = $this->request->get_version(); - $user = $this->request->get_user(); - - $sub_request->parse_sql($this->select_update($this->table, $this->request->get_source(), $this->config->id['db_name'], $version, $user)); - $sub_request->set_relation(false); - - $output = $this->render_set($this->sql->select($sub_request), $this->item_class); - - ob_clean(); - header("Content-type:text/xml"); - - echo $this->updates_start(); - echo $this->get_version(); - echo $output; - echo $this->updates_end(); - } - - - protected function render_set($res, $name){ - $output=""; - $index=0; - while ($data=$this->sql->get_next($res)){ - $data = new DataItemUpdate($data,$this->config,$index, $name); - $this->event->trigger("beforeRender",$data); - $output.=$data->to_xml(); - $index++; - } - return $output; - } - - /*! returns update start string - */ - protected function updates_start() { - $start = ''; - return $start; - } - - /*! returns update end string - */ - protected function updates_end() { - $start = ''; - return $start; - } - - /*! checks if action version given by client is deprecated - @param action - DataAction object - */ - public function check_collision($action) { - $version = $this->sql->escape($this->request->get_version()); - //$user = $this->sql->escape($this->request->get_user()); - $last_version = $this->get_update_max_version(); - if (($last_version > $version)&&($action->get_status() == 'update')) { - $action->error(); - $action->set_status('collision'); - } - } -} - -?> \ No newline at end of file -- cgit v1.2.3