summaryrefslogtreecommitdiffstats
path: root/codebase/strategy.php
diff options
context:
space:
mode:
Diffstat (limited to 'codebase/strategy.php')
-rw-r--r--codebase/strategy.php68
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;
+ }
+
}