diff options
author | dmitry-radyno <dmitry.radyno@gmail.com> | 2013-04-15 13:21:10 +0200 |
---|---|---|
committer | dmitry-radyno <dmitry.radyno@gmail.com> | 2013-04-15 13:21:10 +0200 |
commit | 9b84df409d37cf5a172fda15b3e9daf8af8f6e18 (patch) | |
tree | 97a7af9b13e71943fe21e4a68d85ccab52b45550 /codebase | |
parent | 2b095bc184f2db05f9895db11c270c95361296e7 (diff) | |
download | connector-php-9b84df409d37cf5a172fda15b3e9daf8af8f6e18.zip connector-php-9b84df409d37cf5a172fda15b3e9daf8af8f6e18.tar.gz connector-php-9b84df409d37cf5a172fda15b3e9daf8af8f6e18.tar.bz2 |
adding gant connector
Diffstat (limited to 'codebase')
-rw-r--r-- | codebase/gantt_connector.php | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/codebase/gantt_connector.php b/codebase/gantt_connector.php new file mode 100644 index 0000000..e722731 --- /dev/null +++ b/codebase/gantt_connector.php @@ -0,0 +1,230 @@ +<?php +/* + @author dhtmlx.com + @license GPL, see license.txt +*/ +require_once("base_connector.php"); +require_once("data_connector.php"); + +/*! DataItem class for Gantt component +**/ +class GanttDataItem extends DataItem{ + /*! return self as XML string + */ + function to_xml(){ + if ($this->skip) return ""; + + $str="<task id='".$this->get_id()."' >"; + $str.="<start_date><![CDATA[".$this->data[$this->config->text[0]["name"]]."]]></start_date>"; + $str.="<duration><![CDATA[".$this->data[$this->config->text[1]["name"]]."]]></duration>"; + $str.="<text><![CDATA[".$this->data[$this->config->text[2]["name"]]."]]></text>"; + for ($i=3; $i<sizeof($this->config->text); $i++){ + $extra = $this->config->text[$i]["name"]; + $str.="<".$extra."><![CDATA[".$this->data[$extra]."]]></".$extra.">"; + } + if ($this->userdata !== false) + foreach ($this->userdata as $key => $value) + $str.="<".$key."><![CDATA[".$value."]]></".$key.">"; + + return $str."</task>"; + } +} + + +/*! Connector class for dhtmlxGantt +**/ +class GanttConnector extends Connector{ + + protected $extra_output="";//!< extra info which need to be sent to client side + protected $options=array();//!< hash of OptionsConnector + + + /*! assign options collection to the column + + @param name + name of the column + @param options + array or connector object + */ + public function set_options($name,$options){ + if (is_array($options)){ + $str=""; + foreach($options as $k => $v) + $str.="<item value='".$this->xmlentities($k)."' label='".$this->xmlentities($v)."' />"; + $options=$str; + } + $this->options[$name]=$options; + } + + + /*! 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 be used for rendering. + */ + public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){ + if (!$item_type) $item_type="GanttDataItem"; + if (!$data_type) $data_type="GanttDataProcessor"; + 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 + function parse_request(){ + parent::parse_request(); + if (count($this->config->text)){ + if (isset($_GET["to"])) + $this->request->set_filter($this->config->text[0]["name"],$_GET["to"],"<"); + if (isset($_GET["from"])) + $this->request->set_filter($this->config->text[1]["name"],$_GET["from"],">"); + } + } +} + +/*! DataProcessor class for Gantt component +**/ +class GanttDataProcessor extends DataProcessor{ + function name_data($data){ + if ($data=="start_date") + return $this->config->text[0]["db_name"]; + if ($data=="id") + return $this->config->id["db_name"]; + if ($data=="duration") + return $this->config->text[1]["db_name"]; + if ($data=="text") + return $this->config->text[2]["db_name"]; + + return $data; + } +} + + +class JSONGanttDataItem extends GanttDataItem{ + /*! return self as XML string + */ + function to_xml(){ + if ($this->skip) return ""; + + $obj = array(); + $obj['id'] = $this->get_id(); + $obj['start_date'] = $this->data[$this->config->text[0]["name"]]; + $obj['duration'] = $this->data[$this->config->text[1]["name"]]; + $obj['text'] = $this->data[$this->config->text[2]["name"]]; + for ($i=3; $i<sizeof($this->config->text); $i++){ + $extra = $this->config->text[$i]["name"]; + $obj[$extra]=$this->data[$extra]; + } + + if ($this->userdata !== false) + foreach ($this->userdata as $key => $value) + $obj[$key]=$value; + + return $obj; + } +} + + +class JSONGanttConnector extends GanttConnector { + + protected $data_separator = ","; + + /*! 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. + */ + public function __construct($res,$type=false,$item_type=false,$data_type=false,$render_type=false){ + if (!$item_type) $item_type="JSONGanttDataItem"; + if (!$data_type) $data_type="GanttDataProcessor"; + if (!$render_type) $render_type="JSONRenderStrategy"; + parent::__construct($res,$type,$item_type,$data_type,$render_type); + } + + protected function xml_start() { + return '{ "data":'; + } + + protected function xml_end() { + $this->fill_collections(); + $end = (!empty($this->extra_output)) ? ', "collections": {'.$this->extra_output.'}' : ''; + foreach ($this->attributes as $k => $v) + $end.=", \"".$k."\":\"".$v."\""; + $end .= '}'; + return $end; + } + + /*! assign options collection to the column + + @param name + name of the column + @param options + array or connector object + */ + public function set_options($name,$options){ + if (is_array($options)){ + $str=array(); + foreach($options as $k => $v) + $str[]='{"id":"'.$this->xmlentities($k).'", "value":"'.$this->xmlentities($v).'"}'; + $options=implode(",",$str); + } + $this->options[$name]=$options; + } + + + /*! generates xml description for options collections + + @param list + comma separated list of column names, for which options need to be generated + */ + protected function fill_collections($list=""){ + $options = array(); + foreach ($this->options as $k=>$v) { + $name = $k; + $option="\"{$name}\":["; + if (!is_string($this->options[$name])){ + $data = json_encode($this->options[$name]->render()); + $option.=substr($data,1,-1); + } else + $option.=$this->options[$name]; + $option.="]"; + $options[] = $option; + } + $this->extra_output .= implode($this->data_separator, $options); + } + + + /*! output fetched data as XML + @param res + DB resultset + */ + protected function output_as_xml($res){ + $result = $this->render_set($res); + if ($this->simple) return $result; + + $data=$this->xml_start().json_encode($result).$this->xml_end(); + + if ($this->as_string) return $data; + + $out = new OutputWriter($data, ""); + $out->set_type("json"); + $this->event->trigger("beforeOutput", $this, $out); + $out->output("", true, $this->encoding); + } +} +?>
\ No newline at end of file |