summaryrefslogtreecommitdiffstats
path: root/codebase
diff options
context:
space:
mode:
authorDmitry <dmitry@dhtmlx.com>2012-05-10 16:51:23 +0200
committerDmitry <dmitry@dhtmlx.com>2012-05-10 16:51:23 +0200
commitc6f8ad6c0b6a5c6d7c512805dcc93a0f7bc52146 (patch)
treebc857bf3796fee56d59cd2c433b32364af3238ce /codebase
parent5ea73eba6ea84547d3e325f075df60ef729168b3 (diff)
downloadconnector-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.php57
-rw-r--r--codebase/strategy.php70
-rw-r--r--codebase/tree_connector.php36
-rw-r--r--codebase/treedatamultitable_connector.php145
-rw-r--r--codebase/treegrid_connector.php40
-rw-r--r--codebase/treegridmultitable_connector.php11
-rw-r--r--codebase/treemultitable_connector.php20
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);
}
}