diff options
Diffstat (limited to 'codebase/strategy.php')
-rw-r--r-- | codebase/strategy.php | 68 |
1 files changed, 56 insertions, 12 deletions
diff --git a/codebase/strategy.php b/codebase/strategy.php index 506a5e6..302e34a 100644 --- a/codebase/strategy.php +++ b/codebase/strategy.php @@ -2,14 +2,21 @@ class RenderStrategy { + protected $conn = null; + + public function __construct($conn) { + $this->conn = $conn; + } + /*! render from DB resultset @param res DB resultset process commands, output requested data as XML */ - public function render_set($res, $conn, $name, $dload, $sep){ + public function render_set($res, $name, $dload, $sep){ $output=""; $index=0; + $conn = $this->conn; $conn->event->trigger("beforeRenderSet",$conn,$res,$conn->get_config()); while ($data=$conn->sql->get_next($res)){ $data = new $name($data,$conn->get_config(),$index); @@ -31,9 +38,10 @@ class JSONRenderStrategy { DB resultset process commands, output requested data as json */ - public function render_set($res, $conn, $name, $dload, $sep){ + public function render_set($res, $name, $dload, $sep){ $output=array(); $index=0; + $conn = $this->conn; $conn->event->trigger("beforeRenderSet",$conn,$res,$conn->get_config()); while ($data=$conn->sql->get_next($res)){ $data = new $name($data,$conn->get_config(),$index); @@ -50,9 +58,10 @@ class JSONRenderStrategy { class TreeRenderStrategy extends RenderStrategy { - public function render_set($res, $conn, $name, $dload, $sep){ + public function render_set($res, $name, $dload, $sep){ $output=""; $index=0; + $conn = $this->conn; while ($data=$conn->sql->get_next($res)){ $data = new $name($data,$conn->get_config(),$index); $conn->event->trigger("beforeRender",$data); @@ -65,7 +74,7 @@ class TreeRenderStrategy extends RenderStrategy { 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.=$this->render_set($conn->sql->select($sub_request), $name, $dload, $sep); } $output.=$data->to_xml_end(); $index++; @@ -79,9 +88,10 @@ class TreeRenderStrategy extends RenderStrategy { class JSONTreeRenderStrategy extends RenderStrategy { - public function render_set($res, $conn, $name, $dload, $sep){ + public function render_set($res, $name, $dload, $sep){ $output=array(); $index=0; + $conn = $this->conn; while ($data=$conn->sql->get_next($res)){ $data = new $name($data,$conn->get_config(),$index); $conn->event->trigger("beforeRender",$data); @@ -94,7 +104,7 @@ class JSONTreeRenderStrategy extends RenderStrategy { 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); + $temp = $this->render_set($conn->sql->select($sub_request), $name, $dload, $sep); if (sizeof($temp)) $record["data"] = $temp; } @@ -109,9 +119,10 @@ class JSONTreeRenderStrategy extends RenderStrategy { class MultitableRenderStrategy extends RenderStrategy { - public function render_set($res, $conn, $name, $dload, $sep){ + public function render_set($res, $name, $dload, $sep){ $output=""; $index=0; + $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']]); @@ -135,9 +146,10 @@ class MultitableRenderStrategy extends RenderStrategy { class JSONMultitableRenderStrategy extends MultitableRenderStrategy { - public function render_set($res, $conn, $name, $dload, $sep){ + public function render_set($res, $name, $dload, $sep){ $output=array(); $index=0; + $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']]); @@ -162,15 +174,18 @@ class JSONMultitableRenderStrategy extends MultitableRenderStrategy { class GroupRenderStrategy extends RenderStrategy { - public function render_set($res, $conn, $name, $dload, $sep){ + private $id_postfix = '__{group_param}'; + + public function render_set($res, $name, $dload, $sep){ $output=""; $index=0; + $conn = $this->conn; $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->id['name']] = $data['value'].$this->id_postfix; $data[$config->text[0]['name']] = $data['value']; $has_kids = true; } @@ -185,8 +200,8 @@ class GroupRenderStrategy extends RenderStrategy { $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); + $sub_request->set_relation(str_replace($this->id_postfix, "", $data->get_id())); + $output.=$this->render_set($conn->sql->select($sub_request), $name, $dload, $sep); } $output.=$data->to_xml_end(); $index++; @@ -194,6 +209,35 @@ class GroupRenderStrategy extends RenderStrategy { return $output; } + public function check_id($action) { + if (isset($_GET['editing'])) { + $config = $this->conn->get_config(); + $id = $action->get_id(); + $pid = $action->get_value($config->relation_id['name']); + $pid = str_replace($this->id_postfix, "", $pid); + $action->set_value($config->relation_id['name'], $pid); + if (!empty($pid)) { + return $action; + } else { + $action->error(); + $action->set_response_text("This record can't be updated!"); + return $action; + } + } else { + return $action; + } + } + + public function replace_postfix() { + if (isset($_GET['id'])) { + $_GET['id'] = str_replace($this->id_postfix, "", $_GET['id']); + } + } + + public function get_postfix() { + return $this->id_postfix; + } + } |