diff options
Diffstat (limited to 'codebase/Dhtmlx/Connector/Data')
-rw-r--r-- | codebase/Dhtmlx/Connector/Data/DataItemUpdate.php | 4 | ||||
-rw-r--r-- | codebase/Dhtmlx/Connector/Data/DataRequestConfig.php | 12 | ||||
-rw-r--r-- | codebase/Dhtmlx/Connector/Data/DataUpdate.php | 16 | ||||
-rw-r--r-- | codebase/Dhtmlx/Connector/Data/JSONDataItemUpdate.php | 15 | ||||
-rw-r--r-- | codebase/Dhtmlx/Connector/Data/JSONDataUpdate.php | 62 | ||||
-rw-r--r-- | codebase/Dhtmlx/Connector/Data/JSONGanttDataUpdate.php | 58 |
6 files changed, 161 insertions, 6 deletions
diff --git a/codebase/Dhtmlx/Connector/Data/DataItemUpdate.php b/codebase/Dhtmlx/Connector/Data/DataItemUpdate.php index c77451c..3dcee14 100644 --- a/codebase/Dhtmlx/Connector/Data/DataItemUpdate.php +++ b/codebase/Dhtmlx/Connector/Data/DataItemUpdate.php @@ -47,7 +47,7 @@ class DataItemUpdate extends DataItem { */ public function to_xml(){ $str= "<update "; - $str .= 'status="'.$this->data['type'].'" '; + $str .= 'status="'.$this->data['action_table_type'].'" '; $str .= 'id="'.$this->data['dataId'].'" '; $str .= 'parent="'.$this->get_parent_id().'"'; $str .= '>'; @@ -60,7 +60,7 @@ class DataItemUpdate extends DataItem { */ public function to_xml_start(){ $str="<update "; - $str .= 'status="'.$this->data['type'].'" '; + $str .= 'status="'.$this->data['action_table_type'].'" '; $str .= 'id="'.$this->data['dataId'].'" '; $str .= 'parent="'.$this->get_parent_id().'"'; $str .= '>'; diff --git a/codebase/Dhtmlx/Connector/Data/DataRequestConfig.php b/codebase/Dhtmlx/Connector/Data/DataRequestConfig.php index e2b709c..91752fe 100644 --- a/codebase/Dhtmlx/Connector/Data/DataRequestConfig.php +++ b/codebase/Dhtmlx/Connector/Data/DataRequestConfig.php @@ -5,6 +5,8 @@ use \Exception; /*! manager of data request **/ class DataRequestConfig { + + private $action_mode = ""; private $filters; //!< array of filtering rules private $relation=false; //!< ID or other element used for linking hierarchy private $sort_by; //!< sorting field @@ -49,6 +51,7 @@ class DataRequestConfig { $this->relation =$proto->get_relation(); $this->user = $proto->user; $this->version = $proto->version; + $this->action_mode = $proto->action_mode; } /*! convert self to string ( for logs ) @@ -66,6 +69,15 @@ class DataRequestConfig { return $str; } + public function set_action_mode($action_mode) { + $this->action_mode = $action_mode; + return $this; + } + + public function get_action_mode() { + return $this->action_mode; + } + /*! returns set of filtering rules @return set of filtering rules diff --git a/codebase/Dhtmlx/Connector/Data/DataUpdate.php b/codebase/Dhtmlx/Connector/Data/DataUpdate.php index 7db2261..7c00297 100644 --- a/codebase/Dhtmlx/Connector/Data/DataUpdate.php +++ b/codebase/Dhtmlx/Connector/Data/DataUpdate.php @@ -24,13 +24,14 @@ class DataUpdate { @param request DataRequestConfig object */ - function __construct($sql, $config, $request, $table, $url){ + function __construct($sql, $config, $request, $table, $url, $options){ $this->config= $config; $this->request= $request; $this->sql = $sql; $this->table=$table; $this->url=$url; $this->demu = false; + $this->options = $options; } public function set_demultiplexor($path){ @@ -42,15 +43,15 @@ class DataUpdate { $this->item_class = $name; } - private function select_update($actions_table, $join_table, $id_field_name, $version, $user) { - $sql = "SELECT * FROM {$actions_table}"; + protected function select_update($actions_table, $join_table, $id_field_name, $version, $user) { + $sql = "SELECT $join_table.*, {$actions_table}.id, {$actions_table}.dataId, {$actions_table}.type as action_table_type, {$actions_table}.user 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() { + protected 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); @@ -68,6 +69,9 @@ class DataUpdate { file_get_contents($this->demu); } + public function get_table() { + return $this->table; + } @@ -80,6 +84,10 @@ class DataUpdate { $dataId = $this->sql->escape($action->get_new_id()); $user = $this->sql->escape($this->request->get_user()); if ($type!="error" && $type!="invalid" && $type !="collision") { + $action_mode = $this->request->get_action_mode(); + if(!empty($action_mode)) + $type .= "#".$action_mode; + $this->log_update_action($this->table, $dataId, $type, $user); } } diff --git a/codebase/Dhtmlx/Connector/Data/JSONDataItemUpdate.php b/codebase/Dhtmlx/Connector/Data/JSONDataItemUpdate.php new file mode 100644 index 0000000..bb6ec47 --- /dev/null +++ b/codebase/Dhtmlx/Connector/Data/JSONDataItemUpdate.php @@ -0,0 +1,15 @@ +<?php +namespace Dhtmlx\Connector\Data; + +class JSONDataItemUpdate extends DataItemUpdate { + + public function to_xml() { + return array( + "status" => $this->data["action_table_type"], + "id" => $this->data["dataId"], + "parent" => $this->get_parent_id(), + "data" => $this->child->to_xml() + ); + } + +}
\ No newline at end of file diff --git a/codebase/Dhtmlx/Connector/Data/JSONDataUpdate.php b/codebase/Dhtmlx/Connector/Data/JSONDataUpdate.php new file mode 100644 index 0000000..ea84e8d --- /dev/null +++ b/codebase/Dhtmlx/Connector/Data/JSONDataUpdate.php @@ -0,0 +1,62 @@ +<?php +namespace Dhtmlx\Connector\Data; + +class JSONDataUpdate extends DataUpdate { + + /*! adds action version in output XML as userdata +*/ + public function version_output($conn, $out) { + $outJson = json_decode($out->__toString(), true); + if(!isset($outJson["userdata"])) + $outJson["userdata"] = array(); + + $outJson["userdata"] = array_merge($outJson["userdata"], $this->get_version()); + $out->reset(); + $out->add(json_encode($outJson)); + } + + /*! return action version in XMl format + */ + public function get_version() { + $version = array("version" => $this->get_update_max_version()); + return $version; + } + + 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); + + if(!isset($output["userdata"])) + $output["userdata"] = array(); + + $output["userdata"] = array_merge($output["userdata"], $this->get_version()); + $this->output(json_encode($output)); + } + + protected function render_set($res, $name){ + $output = array(); + $index = 0; + while($data = $this->sql->get_next($res)) { + $data = new JSONDataItemUpdate($data, $this->config, $index, $name); + $this->event->trigger("beforeRender", $data); + array_push($output, $data->to_xml()); + $index++; + } + + return array("updates" => $output); + } + + protected function output($res){ + $out = new OutputWriter($res, ""); + $out->set_type("json"); + $this->event->trigger("beforeOutput", $this, $out); + $out->output("", true, $this->encoding); + } + +}
\ No newline at end of file diff --git a/codebase/Dhtmlx/Connector/Data/JSONGanttDataUpdate.php b/codebase/Dhtmlx/Connector/Data/JSONGanttDataUpdate.php new file mode 100644 index 0000000..eba380f --- /dev/null +++ b/codebase/Dhtmlx/Connector/Data/JSONGanttDataUpdate.php @@ -0,0 +1,58 @@ +<?php +namespace Dhtmlx\Connector\Data; + +class JSONGanttDataUpdate extends JSONDataUpdate { + + public function get_updates() { + $updates = $this->get_data_updates(); + //ToDo: Add rendering for data. + } + + + private function get_data_updates() { + $actions_table = $this->table; + $version = $this->request->get_version(); + $user = $this->request->get_user(); + + $select_actions = "SELECT DATAID, TYPE, USER FROM {$actions_table}"; + $select_actions .= " WHERE {$actions_table}.ID > '{$version}' AND {$actions_table}.USER <> '{$user}'"; + + + $output = array(); + $index = 0; + $actions_query = $this->sql->query($select_actions); + while($action_data=$this->sql->get_next($actions_query)){ + $action_type = $action_data["TYPE"]; + $type_parts = explode("#", $action_type); + $action_mode = $type_parts[1]; + if($action_mode == "links") { + $data = $this->select_links_for_action($action_data["DATAID"]); + $data = new DataItemUpdate($data, $this->config, $index, $this->item_class); + } + else { + $data = $this->select_task_for_action($action_data["DATAID"]); + $data = new DataItemUpdate($data, $this->config, $index, $this->item_class); + } + + array_push($output, $data); + $index++; + } + + return $output; + } + + protected function select_task_for_action($taskId) { + $tasks_table = $this->request->get_source(); + $field_task_id = $this->config->id['db_name']; + $select_actions_tasks = "SELECT * FROM {$tasks_table} WHERE {$taskId} = {$tasks_table}.{$field_task_id}"; + return $this->sql->get_next($this->sql->query($select_actions_tasks)); + } + + protected function select_links_for_action($taskId) { + $links_connector_options = $this->options["connector"]->get_options(); + $links_table = $links_connector_options["links"]->get_request()->get_source(); + $field_task_id = $this->config->id['db_name']; + $select_actions_tasks = "SELECT * FROM {$links_table} WHERE {$taskId} = {$links_table}.{$field_task_id}"; + return $this->sql->get_next($this->sql->query($select_actions_tasks)); + } +}
\ No newline at end of file |