summaryrefslogtreecommitdiffstats
path: root/codebase
diff options
context:
space:
mode:
authorDmitry <dmitry@dhtmlx.com>2012-05-08 14:58:11 +0200
committerDmitry <dmitry@dhtmlx.com>2012-05-08 14:58:11 +0200
commit711583417091002845079cb20082a68152054640 (patch)
tree8e8debe51e30ee8f05832efdbf6e08ff09c27678 /codebase
parent78bc7500e7c9afb2be508c2ad1ee37f94bff70ef (diff)
downloadconnector-php-711583417091002845079cb20082a68152054640.zip
connector-php-711583417091002845079cb20082a68152054640.tar.gz
connector-php-711583417091002845079cb20082a68152054640.tar.bz2
implements RenderStrategy logic
Diffstat (limited to 'codebase')
-rw-r--r--codebase/base_connector.php21
-rw-r--r--codebase/data_connector.php64
-rw-r--r--codebase/grid_connector.php5
-rw-r--r--codebase/scheduler_connector.php34
-rw-r--r--codebase/strategy.php200
-rw-r--r--codebase/tree_connector.php29
-rw-r--r--codebase/treedatamultitable_connector.php64
-rw-r--r--codebase/treegrid_connector.php33
-rw-r--r--codebase/treegridgroup_connector.php44
-rw-r--r--codebase/treegridmultitable_connector.php37
-rw-r--r--codebase/treegroup_connector.php43
-rw-r--r--codebase/treemultitable_connector.php44
12 files changed, 300 insertions, 318 deletions
diff --git a/codebase/base_connector.php b/codebase/base_connector.php
index 451c61d..69f538e 100644
--- a/codebase/base_connector.php
+++ b/codebase/base_connector.php
@@ -6,6 +6,7 @@
require_once("tools.php");
require_once("db_common.php");
require_once("dataprocessor.php");
+require_once("strategy.php");
require_once("update.php");
//enable buffering to catch and ignore any custom output before XML generation
@@ -290,18 +291,20 @@ class Connector {
@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){
+ public function __construct($db,$type=false, $item_type=false, $data_type=false, $render_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";
+ if (!$render_type) $render_type="RenderStrategy";
$this->names=array(
"db_class"=>$type,
"item_class"=>$item_type,
"data_class"=>$data_type,
+ "render_class"=>$render_type
);
$this->config = new DataConfig();
@@ -312,6 +315,7 @@ class Connector {
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->render = new $this->names["render_class"]();
$this->db=$db;//saved for options connectors, if any
@@ -332,7 +336,7 @@ class Connector {
}
public function get_request(){
- return new DataRequestConfig($this->config);
+ return new DataRequestConfig($this->request);
}
@@ -551,18 +555,7 @@ class Connector {
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().$this->data_separator;
- $index++;
- }
- return $output;
+ return $this->render->render_set($res, $this, $this->names["item_class"], $this->dload, $this->data_separator);
}
/*! output fetched data as XML
diff --git a/codebase/data_connector.php b/codebase/data_connector.php
index 6f376a4..5b11cfa 100644
--- a/codebase/data_connector.php
+++ b/codebase/data_connector.php
@@ -87,10 +87,11 @@ class DataConnector extends Connector{
@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){
+ public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){
if (!$item_type) $item_type="CommonDataItem";
if (!$data_type) $data_type="CommonDataProcessor";
- parent::__construct($res,$type,$item_type,$data_type);
+ if (!$render_type) $render_type="RenderStrategy";
+ parent::__construct($res,$type,$item_type,$data_type,$render_type);
}
protected function parse_request_mode(){
@@ -299,10 +300,11 @@ class TreeCommonDataItem extends CommonDataItem{
class TreeDataConnector extends DataConnector{
protected $id_swap = array();
- 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="TreeCommonDataItem";
if (!$data_type) $data_type="CommonDataProcessor";
- parent::__construct($res,$type,$item_type,$data_type);
+ 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"));
@@ -341,73 +343,25 @@ class TreeDataConnector extends DataConnector{
$this->request->set_relation("0");
}
- 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 just 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;
- }
-
}
class JSONTreeDataConnector extends TreeDataConnector{
- 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){
if (!$item_type) $item_type="JSONTreeCommonDataItem";
if (!$data_type) $data_type="CommonDataProcessor";
- parent::__construct($res,$type,$item_type,$data_type);
+ 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 render_set($res){
- $output=array();
- $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 just exec sub-render routine
- if ($data->has_kids()===-1 && $this->dload)
- $data->set_kids(true);
- $record = &$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());
- $temp = &$this->render_set($this->sql->select($sub_request));
- if (sizeof($temp))
- $record["data"] = $temp;
- }
- $output[] = $record;
- $index++;
- }
- return $output;
- }
-
protected function output_as_xml($res){
$data = array();
$data["parent"] = $this->request->get_relation();
$data["data"] = $this->render_set($res);
-
$out = new OutputWriter(json_encode($data), "");
$out->set_type("json");
$this->event->trigger("beforeOutput", $this, $out);
diff --git a/codebase/grid_connector.php b/codebase/grid_connector.php
index 2fe043e..229e9ff 100644
--- a/codebase/grid_connector.php
+++ b/codebase/grid_connector.php
@@ -145,10 +145,11 @@ class GridConnector extends Connector{
@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){
+ public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){
if (!$item_type) $item_type="GridDataItem";
if (!$data_type) $data_type="GridDataProcessor";
- parent::__construct($res,$type,$item_type,$data_type);
+ if (!$render_type) $render_type="RenderStrategy";
+ parent::__construct($res,$type,$item_type,$data_type,$render_type);
}
diff --git a/codebase/scheduler_connector.php b/codebase/scheduler_connector.php
index 4ee0bd1..f9921b1 100644
--- a/codebase/scheduler_connector.php
+++ b/codebase/scheduler_connector.php
@@ -86,11 +86,14 @@ class SchedulerConnector 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 be used for rendering.
*/
- 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="SchedulerDataItem";
if (!$data_type) $data_type="SchedulerDataProcessor";
- parent::__construct($res,$type,$item_type,$data_type);
+ if (!$render_type) $render_type="RenderStrategy";
+ parent::__construct($res,$type,$item_type,$data_type,$render_type);
}
//parse GET scoope, all operations with incoming request must be done here
@@ -159,32 +162,13 @@ class JSONSchedulerConnector extends SchedulerConnector {
@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){
+ public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){
if (!$item_type) $item_type="JSONSchedulerDataItem";
if (!$data_type) $data_type="SchedulerDataProcessor";
- parent::__construct($res,$type,$item_type,$data_type);
+ if (!$render_type) $render_type="JSONRenderStrategy";
+ parent::__construct($res,$type,$item_type,$data_type,$render_type);
}
-
- /*! render from DB resultset
- @param res
- DB resultset
- process commands, output requested data as XML
- */
- protected function render_set($res){
- $output=array();
- $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 json_encode($output);
- }
-
+
protected function xml_start() {
return '{ "data":';
}
diff --git a/codebase/strategy.php b/codebase/strategy.php
new file mode 100644
index 0000000..506a5e6
--- /dev/null
+++ b/codebase/strategy.php
@@ -0,0 +1,200 @@
+<?php
+
+class RenderStrategy {
+
+ /*! render from DB resultset
+ @param res
+ DB resultset
+ process commands, output requested data as XML
+ */
+ public function render_set($res, $conn, $name, $dload, $sep){
+ $output="";
+ $index=0;
+ $conn->event->trigger("beforeRenderSet",$conn,$res,$conn->get_config());
+ while ($data=$conn->sql->get_next($res)){
+ $data = new $name($data,$conn->get_config(),$index);
+ if ($data->get_id()===false)
+ $data->set_id($conn->uuid());
+ $conn->event->trigger("beforeRender",$data);
+ $output.=$data->to_xml().$sep;
+ $index++;
+ }
+ return $output;
+ }
+
+}
+
+class JSONRenderStrategy {
+
+ /*! render from DB resultset
+ @param res
+ DB resultset
+ process commands, output requested data as json
+ */
+ public function render_set($res, $conn, $name, $dload, $sep){
+ $output=array();
+ $index=0;
+ $conn->event->trigger("beforeRenderSet",$conn,$res,$conn->get_config());
+ while ($data=$conn->sql->get_next($res)){
+ $data = new $name($data,$conn->get_config(),$index);
+ if ($data->get_id()===false)
+ $data->set_id($conn->uuid());
+ $conn->event->trigger("beforeRender",$data);
+ $output[]=$data->to_xml();
+ $index++;
+ }
+ return json_encode($output);
+ }
+
+}
+
+class TreeRenderStrategy extends RenderStrategy {
+
+ public function render_set($res, $conn, $name, $dload, $sep){
+ $output="";
+ $index=0;
+ while ($data=$conn->sql->get_next($res)){
+ $data = new $name($data,$conn->get_config(),$index);
+ $conn->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 && $dload)
+ $data->set_kids(true);
+ $output.=$data->to_xml_start();
+ if ($data->has_kids()===-1 || ( $data->has_kids()==true && !$dload)){
+ $sub_request = new DataRequestConfig($conn->get_request());
+ $sub_request->set_relation($data->get_id());
+ $output.=$this->render_set($conn->sql->select($sub_request), $conn, $name, $dload, $sep);
+ }
+ $output.=$data->to_xml_end();
+ $index++;
+ }
+ return $output;
+ }
+
+}
+
+
+
+class JSONTreeRenderStrategy extends RenderStrategy {
+
+ public function render_set($res, $conn, $name, $dload, $sep){
+ $output=array();
+ $index=0;
+ while ($data=$conn->sql->get_next($res)){
+ $data = new $name($data,$conn->get_config(),$index);
+ $conn->event->trigger("beforeRender",$data);
+ //there is no info about child elements,
+ //if we are using dyn. loading - assume that it has,
+ //in normal mode just exec sub-render routine
+ if ($data->has_kids()===-1 && $dload)
+ $data->set_kids(true);
+ $record = $data->to_xml_start();
+ if ($data->has_kids()===-1 || ( $data->has_kids()==true && !$dload)){
+ $sub_request = new DataRequestConfig($conn->get_request());
+ $sub_request->set_relation($data->get_id());
+ $temp = $this->render_set($conn->sql->select($sub_request), $conn, $name, $dload, $sep);
+ if (sizeof($temp))
+ $record["data"] = $temp;
+ }
+ $output[] = $record;
+ $index++;
+ }
+ return $output;
+ }
+
+}
+
+
+class MultitableRenderStrategy extends RenderStrategy {
+
+ public function render_set($res, $conn, $name, $dload, $sep){
+ $output="";
+ $index=0;
+ $config = $conn->get_config();
+ while ($data=$conn->sql->get_next($res)){
+ $data[$config->id['name']] = $conn->level_id($data[$config->id['name']]);
+ $data = new $name($data,$config,$index);
+ $conn->event->trigger("beforeRender",$data);
+ if (($conn->getMaxLevel() !== null)&&($conn->get_level() == $conn->getMaxLevel())) {
+ $data->set_kids(false);
+ } else {
+ if ($data->has_kids()===-1)
+ $data->set_kids(true);
+ }
+ $output.=$data->to_xml_start();
+ $output.=$data->to_xml_end();
+ $index++;
+ }
+ return $output;
+ }
+
+}
+
+
+class JSONMultitableRenderStrategy extends MultitableRenderStrategy {
+
+ public function render_set($res, $conn, $name, $dload, $sep){
+ $output=array();
+ $index=0;
+ $config = $conn->get_config();
+ while ($data=$conn->sql->get_next($res)){
+ $data[$config->id['name']] = $conn->level_id($data[$config->id['name']]);
+ $data = new $name($data,$config,$index);
+ $conn->event->trigger("beforeRender",$data);
+
+ if ($conn->is_max_level()) {
+ $data->set_kids(false);
+ } else {
+ if ($data->has_kids()===-1)
+ $data->set_kids(true);
+ }
+ $record = $data->to_xml_start($output);
+ $output[] = $record;
+ $index++;
+ }
+ return $output;
+ }
+
+}
+
+
+class GroupRenderStrategy extends RenderStrategy {
+
+ public function render_set($res, $conn, $name, $dload, $sep){
+ $output="";
+ $index=0;
+ $config = $conn->get_config();
+ while ($data=$conn->sql->get_next($res)){
+ if (isset($data[$config->id['name']])) {
+ $has_kids = false;
+ } else {
+ $data[$config->id['name']] = $data['value'].$conn->get_id_postfix();
+ $data[$config->text[0]['name']] = $data['value'];
+ $has_kids = true;
+ }
+ $data = new $name($data,$config,$index);
+ $conn->event->trigger("beforeRender",$data);
+ if ($has_kids === false) {
+ $data->set_kids(false);
+ }
+
+ if ($data->has_kids()===-1 && $dload)
+ $data->set_kids(true);
+ $output.=$data->to_xml_start();
+ if (($data->has_kids()===-1 || ( $data->has_kids()==true && !$dload))&&($has_kids == true)){
+ $sub_request = new DataRequestConfig($conn->get_request());
+ $sub_request->set_relation(str_replace($conn->get_id_postfix(), "", $data->get_id()));
+ $output.=$this->render_set($conn->sql->select($sub_request), $conn, $name, $dload, $sep);
+ }
+ $output.=$data->to_xml_end();
+ $index++;
+ }
+ return $output;
+ }
+
+}
+
+
+?> \ No newline at end of file
diff --git a/codebase/tree_connector.php b/codebase/tree_connector.php
index dff0867..d002304 100644
--- a/codebase/tree_connector.php
+++ b/codebase/tree_connector.php
@@ -174,10 +174,11 @@ class TreeConnector extends Connector{
@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){
+ 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";
- parent::__construct($res,$type,$item_type,$data_type);
+ 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"));
@@ -213,31 +214,7 @@ class TreeConnector extends Connector{
$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(){
diff --git a/codebase/treedatamultitable_connector.php b/codebase/treedatamultitable_connector.php
index f7bd43f..af00b88 100644
--- a/codebase/treedatamultitable_connector.php
+++ b/codebase/treedatamultitable_connector.php
@@ -10,9 +10,10 @@ class TreeDataMultitableConnector extends TreeDataConnector{
protected $level = 0;
protected $max_level = null;
- public function __construct($res,$type=false,$item_type=false,$data_type=false){
- $data_type="TreeDataProcessor";
- parent::__construct($res,$type,$item_type,$data_type);
+ 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";
+ 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'));
}
@@ -64,27 +65,6 @@ class TreeDataMultitableConnector extends TreeDataConnector{
$this->end_run();
}
- protected function render_set($res){
- $output="";
- $index=0;
- while ($data=$this->sql->get_next($res)){
- $data[$this->config->id['name']] = $this->level_id($data[$this->config->id['name']]);
- $data = new $this->names["item_class"]($data,$this->config,$index);
- $this->event->trigger("beforeRender",$data);
-
- if ($this->is_max_level()) {
- $data->set_kids(false);
- } else {
- if ($data->has_kids()===-1)
- $data->set_kids(true);
- }
- $output.=$data->to_xml_start();
- $output.=$data->to_xml_end();
- $index++;
- }
- return $output;
- }
-
public function xml_start(){
if (isset($_GET['parent'])) {
return "<data parent='".$_GET['parent']."'>";
@@ -131,13 +111,19 @@ class TreeDataMultitableConnector extends TreeDataConnector{
}
- protected function is_max_level() {
+ /*! gets maximum level of tree data
+ */
+ public function getMaxLevel() {
+ return $this->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
@@ -178,28 +164,8 @@ class JSONTreeDataMultitableConnector extends TreeDataMultitableConnector{
public function __construct($res,$type=false,$item_type=false,$data_type=false){
if (!$item_type) $item_type="JSONTreeCommonDataItem";
if (!$data_type) $data_type="CommonDataProcessor";
- parent::__construct($res,$type,$item_type,$data_type);
- }
-
- protected function render_set($res){
- $output=array();
- $index=0;
- while ($data=$this->sql->get_next($res)){
- $data[$this->config->id['name']] = $this->level_id($data[$this->config->id['name']]);
- $data = new $this->names["item_class"]($data,$this->config,$index);
- $this->event->trigger("beforeRender",$data);
-
- if ($this->is_max_level()) {
- $data->set_kids(false);
- } else {
- if ($data->has_kids()===-1)
- $data->set_kids(true);
- }
- $record = $data->to_xml_start($output);
- $output[] = $record;
- $index++;
- }
- return $output;
+ if (!$render_type) $render_type="JSONMultitableRenderStrategy";
+ parent::__construct($res,$type,$item_type,$data_type,$render_type);
}
protected function output_as_xml($res){
diff --git a/codebase/treegrid_connector.php b/codebase/treegrid_connector.php
index 308fcf4..f1270bf 100644
--- a/codebase/treegrid_connector.php
+++ b/codebase/treegrid_connector.php
@@ -66,10 +66,11 @@ class TreeGridConnector extends GridConnector{
@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){
+ 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";
- parent::__construct($res,$type,$item_type,$data_type);
+ 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"));
@@ -106,32 +107,8 @@ class TreeGridConnector extends GridConnector{
$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(){
diff --git a/codebase/treegridgroup_connector.php b/codebase/treegridgroup_connector.php
index b8c725e..4140c2c 100644
--- a/codebase/treegridgroup_connector.php
+++ b/codebase/treegridgroup_connector.php
@@ -9,12 +9,18 @@ class TreeGridGroupConnector extends TreeGridConnector{
private $id_postfix = '__{group_param}';
- public function __construct($res,$type=false,$item_type=false,$data_type=false){
- parent::__construct($res,$type,$item_type,$data_type);
+ public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){
+ if (!$render_type) $render_type="GroupRenderStrategy";
+ parent::__construct($res,$type,$item_type,$data_type,$render_type);
$this->event->attach("beforeProcessing", Array($this, 'check_id'));
}
+ public function get_id_postfix() {
+ return $this->id_postfix;
+ }
+
+
public function render(){
if (isset($_GET['id'])) {
$_GET['id'] = str_replace($this->id_postfix, "", $_GET['id']);
@@ -55,40 +61,6 @@ class TreeGridGroupConnector extends TreeGridConnector{
$this->end_run();
}
-
- protected function render_set($res){
- $output="";
- $index=0;
- $records = Array();
- while ($data=$this->sql->get_next($res)){
- if (isset($data[$this->config->id['name']])) {
- $has_kids = false;
- } else {
- $data[$this->config->id['name']] = $data['value'].$this->id_postfix;
- $data[$this->config->text[0]['name']] = $data['value'];
- $has_kids = true;
- }
- $data = new $this->names["item_class"]($data,$this->config,$index);
- $this->event->trigger("beforeRender",$data);
- if ($has_kids === false) {
- $data->set_kids(false);
- }
-
- 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))&&($has_kids == true)){
- $sub_request = new DataRequestConfig($this->request);
- $sub_request->set_relation(str_replace($this->id_postfix, "", $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(){
diff --git a/codebase/treegridmultitable_connector.php b/codebase/treegridmultitable_connector.php
index 29e0dbd..4e7f38a 100644
--- a/codebase/treegridmultitable_connector.php
+++ b/codebase/treegridmultitable_connector.php
@@ -10,9 +10,10 @@ class TreeGridMultitableConnector extends TreeGridConnector{
private $level = 0;
private $max_level = null;
- 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){
$data_type="TreeGridMultitableDataProcessor";
- parent::__construct($res,$type,$item_type,$data_type);
+ if (!$render_type) $render_type="MultitableRenderStrategy";
+ 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'));
}
@@ -49,28 +50,6 @@ class TreeGridMultitableConnector extends TreeGridConnector{
}
- protected function render_set($res){
- $output="";
- $index=0;
- $records = Array();
- while ($data=$this->sql->get_next($res)){
- $data[$this->config->id['name']] = $this->level.'%23'.$data[$this->config->id['name']];
- $data = new $this->names["item_class"]($data,$this->config,$index);
- $this->event->trigger("beforeRender",$data);
- if (($this->max_level !== null)&&($this->level == $this->max_level)) {
- $data->set_kids(false);
- } else {
- if ($data->has_kids()===-1)
- $data->set_kids(true);
- }
- $output.=$data->to_xml_start();
- $output.=$data->to_xml_end();
- $index++;
- }
- return $output;
- }
-
-
public function xml_start(){
if (isset($_GET['id'])) {
return "<rows parent='".($this->level - 1).'%23'.$_GET['id']."'>";
@@ -81,6 +60,7 @@ class TreeGridMultitableConnector extends TreeGridConnector{
public function get_level() {
+ if ($this->level) return $this->level;
if (!isset($_GET['id'])) {
if (isset($_POST['ids'])) {
$ids = explode(",",$_POST["ids"]);
@@ -109,7 +89,7 @@ class TreeGridMultitableConnector extends TreeGridConnector{
public function level_id($id) {
- return $this->level.'#'.$id;
+ return $this->level.'%23'.$id;
}
@@ -122,6 +102,13 @@ class TreeGridMultitableConnector extends TreeGridConnector{
}
+ /*! gets maximum level of tree
+ */
+ public function getMaxLevel() {
+ return $this->max_level;
+ }
+
+
/*! remove level prefix from id, parent id and set new id before processing
@param action
DataAction object
diff --git a/codebase/treegroup_connector.php b/codebase/treegroup_connector.php
index 16db63c..80a15f1 100644
--- a/codebase/treegroup_connector.php
+++ b/codebase/treegroup_connector.php
@@ -9,12 +9,18 @@ class TreeGroupConnector extends TreeConnector{
private $id_postfix = '__{group_param}';
- public function __construct($res,$type=false,$item_type=false,$data_type=false){
- parent::__construct($res,$type,$item_type,$data_type);
+ public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){
+ if (!$render_type) $render_type="GroupRenderStrategy";
+ parent::__construct($res,$type,$item_type,$data_type,$render_type);
$this->event->attach("beforeProcessing", Array($this, 'check_id'));
}
+ public function get_id_postfix() {
+ return $this->id_postfix;
+ }
+
+
public function render(){
if (isset($_GET['id'])) {
$_GET['id'] = str_replace($this->id_postfix, "", $_GET['id']);
@@ -55,38 +61,9 @@ class TreeGroupConnector extends TreeConnector{
$this->end_run();
}
- protected function render_set($res){
- $output="";
- $index=0;
- $records = Array();
- while ($data=$this->sql->get_next($res)){
- if (isset($data[$this->config->id['name']])) {
- $has_kids = false;
- } else {
- $data[$this->config->id['name']] = $data['value'].$this->id_postfix;
- $data[$this->config->text[0]['name']] = $data['value'];
- $has_kids = true;
- }
- $data = new $this->names["item_class"]($data,$this->config,$index);
- $this->event->trigger("beforeRender",$data);
- if ($has_kids === false) {
- $data->set_kids(false);
- }
-
- 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))&&($has_kids == true)){
- $sub_request = new DataRequestConfig($this->request);
- $sub_request->set_relation(str_replace($this->id_postfix, "", $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(){
if (isset($_GET['id'])) {
return "<tree id='".$_GET['id'].$this->id_postfix."'>";
diff --git a/codebase/treemultitable_connector.php b/codebase/treemultitable_connector.php
index 0493f4c..8e96a83 100644
--- a/codebase/treemultitable_connector.php
+++ b/codebase/treemultitable_connector.php
@@ -9,10 +9,10 @@ class TreeMultitableConnector extends TreeConnector{
private $level = 0;
private $max_level = null;
-
- public function __construct($res,$type=false,$item_type=false,$data_type=false){
- $data_type="TreeDataProcessor";
- parent::__construct($res,$type,$item_type,$data_type);
+ 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";
+ 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'));
}
@@ -49,27 +49,6 @@ class TreeMultitableConnector extends TreeConnector{
$this->end_run();
}
- protected function render_set($res){
- $output="";
- $index=0;
- $records = Array();
- while ($data=$this->sql->get_next($res)){
- $data[$this->config->id['name']] = $this->level_id($data[$this->config->id['name']]);
- $data = new $this->names["item_class"]($data,$this->config,$index);
- $this->event->trigger("beforeRender",$data);
- if (($this->max_level !== null)&&($this->level == $this->max_level)) {
- $data->set_kids(false);
- } else {
- if ($data->has_kids()===-1)
- $data->set_kids(true);
- }
- $output.=$data->to_xml_start();
- $output.=$data->to_xml_end();
- $index++;
- }
- return $output;
- }
-
public function xml_start(){
if (isset($_GET['id'])) {
return "<tree id='".($this->level - 1).'#'.$_GET['id']."'>";
@@ -80,6 +59,7 @@ class TreeMultitableConnector extends TreeConnector{
public function get_level() {
+ if ($this->level) return $this->level;
if (!isset($_GET['id'])) {
if (isset($_POST['ids'])) {
$ids = explode(",",$_POST["ids"]);
@@ -125,6 +105,20 @@ class TreeMultitableConnector extends TreeConnector{
}
+ /*! gets maximum level of tree
+ */
+ public function getMaxLevel() {
+ return $this->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