diff options
author | Dmitry <dmitry@dhtmlx.com> | 2012-05-10 16:51:23 +0200 |
---|---|---|
committer | Dmitry <dmitry@dhtmlx.com> | 2012-05-10 16:51:23 +0200 |
commit | c6f8ad6c0b6a5c6d7c512805dcc93a0f7bc52146 (patch) | |
tree | bc857bf3796fee56d59cd2c433b32364af3238ce /codebase | |
parent | 5ea73eba6ea84547d3e325f075df60ef729168b3 (diff) | |
download | connector-php-c6f8ad6c0b6a5c6d7c512805dcc93a0f7bc52146.zip connector-php-c6f8ad6c0b6a5c6d7c512805dcc93a0f7bc52146.tar.gz connector-php-c6f8ad6c0b6a5c6d7c512805dcc93a0f7bc52146.tar.bz2 |
minimize duplicating using TreeRenderStrategy
Diffstat (limited to 'codebase')
-rw-r--r-- | codebase/data_connector.php | 57 | ||||
-rw-r--r-- | codebase/strategy.php | 70 | ||||
-rw-r--r-- | codebase/tree_connector.php | 36 | ||||
-rw-r--r-- | codebase/treedatamultitable_connector.php | 145 | ||||
-rw-r--r-- | codebase/treegrid_connector.php | 40 | ||||
-rw-r--r-- | codebase/treegridmultitable_connector.php | 11 | ||||
-rw-r--r-- | codebase/treemultitable_connector.php | 20 |
7 files changed, 122 insertions, 257 deletions
diff --git a/codebase/data_connector.php b/codebase/data_connector.php index 5b11cfa..ca814a9 100644 --- a/codebase/data_connector.php +++ b/codebase/data_connector.php @@ -299,50 +299,46 @@ class TreeCommonDataItem extends CommonDataItem{ class TreeDataConnector extends DataConnector{ - protected $id_swap = array(); + protected $parent_name = 'parent'; + + /*! 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. + * @param render_type + * name of class which will provides data rendering + */ public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){ if (!$item_type) $item_type="TreeCommonDataItem"; if (!$data_type) $data_type="CommonDataProcessor"; if (!$render_type) $render_type="TreeRenderStrategy"; parent::__construct($res,$type,$item_type,$data_type,$render_type); - - $this->event->attach("afterInsert",array($this,"parent_id_correction_a")); - $this->event->attach("beforeProcessing",array($this,"parent_id_correction_b")); - } - - protected function xml_start(){ - return "<data parent='".$this->request->get_relation()."'>"; - } - - /*! 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]); } //parse GET scoope, all operations with incoming request must be done here protected function parse_request(){ parent::parse_request(); - if (isset($_GET["parent"])) - $this->request->set_relation($_GET["parent"]); + if (isset($_GET[$this->parent_name])) + $this->request->set_relation($_GET[$this->parent_name]); else $this->request->set_relation("0"); + + $this->request->set_limit(0,0); //netralize default reaction on dyn. loading mode } + /*! renders self as xml, starting part + */ + protected function xml_start(){ + return "<data parent='".$this->request->get_relation()."'>"; + } } @@ -353,9 +349,6 @@ class JSONTreeDataConnector extends TreeDataConnector{ if (!$data_type) $data_type="CommonDataProcessor"; if (!$render_type) $render_type="JSONTreeRenderStrategy"; parent::__construct($res,$type,$item_type,$data_type,$render_type); - - $this->event->attach("afterInsert",array($this,"parent_id_correction_a")); - $this->event->attach("beforeProcessing",array($this,"parent_id_correction_b")); } protected function output_as_xml($res){ diff --git a/codebase/strategy.php b/codebase/strategy.php index da1f68e..e09d82f 100644 --- a/codebase/strategy.php +++ b/codebase/strategy.php @@ -58,6 +58,14 @@ class JSONRenderStrategy { class TreeRenderStrategy extends RenderStrategy { + protected $id_swap = array(); + + public function __construct($conn) { + parent::__construct($conn); + $conn->event->attach("afterInsert",array($this,"parent_id_correction_a")); + $conn->event->attach("beforeProcessing",array($this,"parent_id_correction_b")); + } + public function render_set($res, $name, $dload, $sep){ $output=""; $index=0; @@ -82,6 +90,25 @@ class TreeRenderStrategy extends RenderStrategy { return $output; } + /*! 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->conn->get_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]); + } } @@ -117,10 +144,17 @@ class JSONTreeRenderStrategy extends RenderStrategy { } -class MultitableRenderStrategy extends RenderStrategy { +class MultitableTreeRenderStrategy extends TreeRenderStrategy { private $level = 0; private $max_level = null; + protected $sep = "#"; + + public function __construct($conn) { + parent::__construct($conn); + $conn->event->attach("beforeProcessing", Array($this, 'id_translate_before')); + $conn->event->attach("afterProcessing", Array($this, 'id_translate_after')); + } public function render_set($res, $name, $dload, $sep){ $output=""; @@ -146,7 +180,7 @@ class MultitableRenderStrategy extends RenderStrategy { public function level_id($id, $level = null) { - return ($level === null ? $this->level : $level).'%23'.$id; + return ($level === null ? $this->level : $level).$this->sep.$id; } @@ -178,9 +212,9 @@ class MultitableRenderStrategy extends RenderStrategy { } - public function get_level() { + public function get_level($parent_name) { if ($this->level) return $this->level; - if (!isset($_GET['id'])) { + if (!isset($_GET[$parent_name])) { if (isset($_POST['ids'])) { $ids = explode(",",$_POST["ids"]); $id = $this->parse_id($ids[0]); @@ -188,42 +222,38 @@ class MultitableRenderStrategy extends RenderStrategy { } $this->conn->get_request()->set_relation(false); } else { - $id = $this->parse_id($_GET['id']); - $_GET['id'] = $id; + $id = $this->parse_id($_GET[$parent_name]); + $_GET[$parent_name] = $id; } return $this->level; } public function is_max_level() { - if (($this->max_level !== null) && ($this->level() >= $this->max_level)) + if (($this->max_level !== null) && ($this->level >= $this->max_level)) return true; return false; } - public function set_max_level($max_level) { $this->max_level = $max_level; } - public function parse_id($id, $set_level = true) { - $result = Array(); - preg_match('/^(.+)((#)|(%23))/', $id, $result); - if ($set_level === true) { - $this->level = isset($result[1]) ? $result[1] + 1 : 0; - } - preg_match('/^(.+)(#|%23)(.*)$/', $id, $result); - if (isset($result[3])) { - $id = $result[3]; + $parts = explode($this->sep, urldecode($id)); + if (count($parts) === 2) { + $level = $parts[0] + 1; + $id = $parts[1]; } else { + $level = 0; $id = ''; } + if ($set_level) $this->level = $level; return $id; } - + } -class JSONMultitableRenderStrategy extends MultitableRenderStrategy { +class JSONMultitableTreeRenderStrategy extends MultitableTreeRenderStrategy { public function render_set($res, $name, $dload, $sep){ $output=array(); @@ -231,7 +261,7 @@ class JSONMultitableRenderStrategy extends MultitableRenderStrategy { $conn = $this->conn; $config = $conn->get_config(); while ($data=$conn->sql->get_next($res)){ - $data[$config->id['name']] = $conn->level_id($data[$config->id['name']]); + $data[$config->id['name']] = $this->level_id($data[$config->id['name']]); $data = new $name($data,$config,$index); $conn->event->trigger("beforeRender",$data); diff --git a/codebase/tree_connector.php b/codebase/tree_connector.php index d002304..850de0d 100644 --- a/codebase/tree_connector.php +++ b/codebase/tree_connector.php @@ -160,8 +160,8 @@ require_once("filesystem_item.php"); /*! Connector for the dhtmlxtree **/ class TreeConnector extends Connector{ - private $id_swap = array(); - + protected $parent_name = 'id'; + /*! constructor Here initilization of all Masters occurs, execution timer initialized @@ -173,42 +173,22 @@ class TreeConnector extends Connector{ 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. + * @param render_type + * name of class which will provides data rendering */ public function __construct($res,$type=false,$item_type=false,$data_type=false, $render_type=false){ if (!$item_type) $item_type="TreeDataItem"; if (!$data_type) $data_type="TreeDataProcessor"; if (!$render_type) $render_type="TreeRenderStrategy"; parent::__construct($res,$type,$item_type,$data_type,$render_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]); - } - - + + //parse GET scoope, all operations with incoming request must be done here public function parse_request(){ parent::parse_request(); - if (isset($_GET["id"])) - $this->request->set_relation($_GET["id"]); + if (isset($_GET[$this->parent_name])) + $this->request->set_relation($_GET[$this->parent_name]); else $this->request->set_relation("0"); diff --git a/codebase/treedatamultitable_connector.php b/codebase/treedatamultitable_connector.php index af00b88..79cc9a4 100644 --- a/codebase/treedatamultitable_connector.php +++ b/codebase/treedatamultitable_connector.php @@ -3,103 +3,35 @@ @author dhtmlx.com @license GPL, see license.txt */ -require_once("tree_connector.php"); +require_once("data_connector.php"); class TreeDataMultitableConnector extends TreeDataConnector{ - protected $level = 0; - protected $max_level = null; + protected $parent_name = 'parent'; public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){ if (!$data_type) $data_type="TreeDataProcessor"; - if (!$render_type) $render_type="MultitableRenderStrategy"; + if (!$render_type) $render_type="MultitableTreeRenderStrategy"; parent::__construct($res,$type,$item_type,$data_type,$render_type); - $this->event->attach("beforeProcessing", Array($this, 'id_translate_before')); - $this->event->attach("afterProcessing", Array($this, 'id_translate_after')); - } - - - //parse GET scoope, all operations with incoming request must be done here - protected function parse_request(){ - parent::parse_request(); - - if (isset($_GET["parent"])) - $this->request->set_relation($this->parse_id($_GET["parent"], true)); - else - $this->request->set_relation("0"); } public function render(){ - $this->event->trigger("onInit", $this); - EventMaster::trigger_static("connectorInit",$this); - - $this->parse_request(); $this->dload = true; - - 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 { - if (!$this->access->check("read")){ - LogMaster::log("Access control: read operation blocked"); - echo "Access denied"; - die(); - } - $wrap = new SortInterface($this->request); - $this->event->trigger("beforeSort",$wrap); - $wrap->store(); - - $wrap = new FilterInterface($this->request); - $this->event->trigger("beforeFilter",$wrap); - $wrap->store(); - - if (!isset($_GET['parent'])) - $this->request->set_relation(false); - $this->output_as_xml( $this->sql->select($this->request) ); - } - } - $this->end_run(); + return parent::render(); } - public function xml_start(){ - if (isset($_GET['parent'])) { - return "<data parent='".$_GET['parent']."'>"; - } else { - return "<data parent='0'>"; - } + /*! sets relation for rendering */ + protected function set_relation() { + if (!isset($_GET[$this->parent_name])) + $this->request->set_relation(false); } - - public function get_level() { - if (isset($_GET['parent'])) - $this->parse_id($_GET['parent']); - else if (isset($_POST['ids'])) { - $ids = explode(",",$_POST["ids"]); - if (isset($ids[0])) $this->parse_id($ids[0]); - $this->level -= 1; - } - return $this->level; - } - - public function parse_id($id, $set_level = true) { - $parts = explode('#', $id); - if (count($parts) === 2) { - $level = $parts[0] + 1; - $id = $parts[1]; + public function xml_start(){ + if (isset($_GET[$this->parent_name])) { + return "<data parent='".$this->render->level_id($_GET[$this->parent_name], $this->render->get_level() - 1)."'>"; } else { - $level = 0; - $id = ''; + return "<data parent='0'>"; } - if ($set_level) $this->level = $level; - return $id; - } - - public function level_id($id) { - return $this->level.'#'.$id; } /*! set maximum level of tree @@ -107,49 +39,11 @@ class TreeDataMultitableConnector extends TreeDataConnector{ maximum level */ public function setMaxLevel($max_level) { - $this->max_level = $max_level; - } - - - /*! gets maximum level of tree data - */ - public function getMaxLevel() { - return $this->max_level; + $this->render->set_max_level($max_level); } - - public function is_max_level() { - if (($this->max_level !== null) && ($this->level >= $this->max_level)) - return true; - return false; - } - - - /*! remove level prefix from id, parent id and set new id before processing - @param action - DataAction object - */ - public function id_translate_before($action) { - $id = $action->get_id(); - $id = $this->parse_id($id, false); - $action->set_id($id); - $action->set_value('tr_id', $id); - $action->set_new_id($id); - $pid = $action->get_value($this->config->relation_id['db_name']); - $pid = $this->parse_id($pid, false); - $action->set_value($this->config->relation_id['db_name'], $pid); - } - - - /*! add level prefix in id and new id after processing - @param action - DataAction object - */ - public function id_translate_after($action) { - $id = $action->get_id(); - $action->set_id($this->level_id($id)); - $id = $action->get_new_id(); - $action->success($this->level_id($id)); + public function get_level() { + return $this->render->get_level($this->parent_name); } } @@ -161,16 +55,19 @@ class TreeDataMultitableConnector extends TreeDataConnector{ class JSONTreeDataMultitableConnector extends TreeDataMultitableConnector{ - public function __construct($res,$type=false,$item_type=false,$data_type=false){ + public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){ if (!$item_type) $item_type="JSONTreeCommonDataItem"; if (!$data_type) $data_type="CommonDataProcessor"; - if (!$render_type) $render_type="JSONMultitableRenderStrategy"; + if (!$render_type) $render_type="JSONMultitableTreeRenderStrategy"; parent::__construct($res,$type,$item_type,$data_type,$render_type); } protected function output_as_xml($res){ $data = array(); - $data["parent"] = isset($_GET['parent']) ? $_GET['parent'] : '0'; + if (isset($_GET['parent'])) + $data["parent"] = $this->render->level_id($_GET[$this->parent_name], $this->render->get_level() - 1); + else + $data["parent"] = "0"; $data["data"] = $this->render_set($res); $out = new OutputWriter(json_encode($data), ""); diff --git a/codebase/treegrid_connector.php b/codebase/treegrid_connector.php index f1270bf..f074879 100644 --- a/codebase/treegrid_connector.php +++ b/codebase/treegrid_connector.php @@ -52,8 +52,8 @@ class TreeGridDataItem extends GridDataItem{ /*! Connector for dhtmlxTreeGrid **/ class TreeGridConnector extends GridConnector{ - private $id_swap = array(); - + protected $parent_name = 'id'; + /*! constructor Here initilization of all Masters occurs, execution timer initialized @@ -65,50 +65,28 @@ class TreeGridConnector extends GridConnector{ 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. + * @param render_type + * name of class which will provides data rendering */ public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){ if (!$item_type) $item_type="TreeGridDataItem"; if (!$data_type) $data_type="TreeGridDataProcessor"; if (!$render_type) $render_type="TreeRenderStrategy"; parent::__construct($res,$type,$item_type,$data_type,$render_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 - */ + /*! process treegrid specific options in incoming request */ public function parse_request(){ parent::parse_request(); - - if (isset($_GET["id"])) - $this->request->set_relation($_GET["id"]); + + if (isset($_GET[$this->parent_name])) + $this->request->set_relation($_GET[$this->parent_name]); else $this->request->set_relation("0"); - + $this->request->set_limit(0,0); //netralize default reaction on dyn. loading mode } - /*! renders self as xml, starting part */ protected function xml_start(){ diff --git a/codebase/treegridmultitable_connector.php b/codebase/treegridmultitable_connector.php index ec75fcd..c092382 100644 --- a/codebase/treegridmultitable_connector.php +++ b/codebase/treegridmultitable_connector.php @@ -10,10 +10,8 @@ class TreeGridMultitableConnector extends TreeGridConnector{ private $max_level = null; public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){ $data_type="TreeGridMultitableDataProcessor"; - if (!$render_type) $render_type="MultitableRenderStrategy"; + if (!$render_type) $render_type="MultitableTreeRenderStrategy"; parent::__construct($res,$type,$item_type,$data_type,$render_type); - $this->event->attach("beforeProcessing", Array($this->render, 'id_translate_before')); - $this->event->attach("afterProcessing", Array($this->render, 'id_translate_after')); } public function render(){ @@ -27,11 +25,6 @@ class TreeGridMultitableConnector extends TreeGridConnector{ $this->request->set_relation(false); } - /*! gets resource for rendering */ - protected function get_resource() { - return $this->sql->select($this->request); - } - public function xml_start(){ if (isset($_GET['id'])) { return "<rows parent='".$this->render->level_id($_GET['id'], $this->render->get_level() - 1)."'>"; @@ -49,7 +42,7 @@ class TreeGridMultitableConnector extends TreeGridConnector{ } public function get_level() { - return $this->render->get_level(); + return $this->render->get_level($this->parent_name); } diff --git a/codebase/treemultitable_connector.php b/codebase/treemultitable_connector.php index a26d2cf..c33f4a7 100644 --- a/codebase/treemultitable_connector.php +++ b/codebase/treemultitable_connector.php @@ -7,13 +7,12 @@ require_once("tree_connector.php"); class TreeMultitableConnector extends TreeConnector{ - private $max_level = null; + protected $parent_name = 'id'; + public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){ if (!$data_type) $data_type="TreeDataProcessor"; - if (!$render_type) $render_type="MultitableRenderStrategy"; + if (!$render_type) $render_type="MultitableTreeRenderStrategy"; parent::__construct($res,$type,$item_type,$data_type,$render_type); - $this->event->attach("beforeProcessing", Array($this->render, 'id_translate_before')); - $this->event->attach("afterProcessing", Array($this->render, 'id_translate_after')); } public function render(){ @@ -23,18 +22,13 @@ class TreeMultitableConnector extends TreeConnector{ /*! sets relation for rendering */ protected function set_relation() { - if (!isset($_GET['id'])) + if (!isset($_GET[$this->parent_name])) $this->request->set_relation(false); } - /*! gets resource for rendering */ - protected function get_resource() { - return $this->sql->select($this->request); - } - public function xml_start(){ - if (isset($_GET['id'])) { - return "<tree id='".($this->render->level_id($_GET['id'], $this->render->get_level() - 1))."'>"; + if (isset($_GET[$this->parent_name])) { + return "<tree id='".($this->render->level_id($_GET[$this->parent_name], $this->render->get_level() - 1))."'>"; } else { return "<tree id='0'>"; } @@ -49,7 +43,7 @@ class TreeMultitableConnector extends TreeConnector{ } public function get_level() { - return $this->render->get_level(); + return $this->render->get_level($this->parent_name); } } |