row_attrs=array(); $this->cell_attrs=array(); $this->userdata=array(); } /*! set color of row @param color color of row */ function set_row_color($color){ $this->row_attrs["bgColor"]=$color; } /*! set style of row @param color color of row */ function set_row_style($color){ $this->row_attrs["style"]=$color; } /*! assign custom style to the cell @param name name of column @param value css style string */ function set_cell_style($name,$value){ $this->set_cell_attribute($name,"style",$value); } /*! assign custom class to specific cell @param name name of column @param value css class name */ function set_cell_class($name,$value){ $this->set_cell_attribute($name,"class",$value); } /*! set custom cell attribute @param name name of column @param attr name of attribute @param value value of attribute */ function set_cell_attribute($name,$attr,$value){ if (!$this->cell_attrs[$name]) $this->cell_attrs[$name]=array(); $this->cell_attrs[$name][$attr]=$value; } /*! set userdata section for the item @param name name of userdata @param value value of userdata */ function set_userdata($name, $value){ $this->userdata[$name]=$value; } /*! set custom row attribute @param attr name of attribute @param value value of attribute */ function set_row_attribute($attr,$value){ $this->row_attrs[$attr]=$value; } /*! return self as XML string, starting part */ public function to_xml_start(){ if ($this->skip) return ""; $str="row_attrs as $k=>$v) $str.=" ".$k."='".$v."'"; $str.=">"; for ($i=0; $i < sizeof($this->config->text); $i++){ $str.="config->text[$i]["name"]; if (isset($this->cell_attrs[$name])){ $cattrs=$this->cell_attrs[$name]; foreach ($cattrs as $k => $v) $str.=" ".$k."='".$this->xmlentities($v)."'"; } $str.=">data[$name]."]]>"; } foreach ($this->userdata as $key => $value) $str.=""; return $str; } /*! return self as XML string, ending part */ public function to_xml_end(){ if ($this->skip) return ""; return ""; } } /*! Connector for the dhtmlxgrid **/ class GridConnector extends Connector{ protected $extra_output="";//!< extra info which need to be sent to client side private $options=array();//!< hash of OptionsConnector /*! 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){ if (!$item_type) $item_type="GridDataItem"; if (!$data_type) $data_type="GridDataProcessor"; parent::__construct($res,$type,$item_type,$data_type); } protected function parse_request(){ parent::parse_request(); if (isset($_GET["dhx_colls"])) $this->fill_collections($_GET["dhx_colls"]); if (isset($_GET["posStart"]) && isset($_GET["count"])) $this->request->set_limit($_GET["posStart"],$_GET["count"]); } protected function resolve_parameter($name){ if (intval($name).""==$name) return $this->config->text[intval($name)]["db_name"]; return $name; } /*! replace xml unsafe characters @param string string to be escaped @return escaped string */ private function xmlentities($string) { return str_replace( array( '&', '"', "'", '<', '>', '’' ), array( '&' , '"', ''' , '<' , '>', ''' ), $string); } /*! 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.=""; $options=$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){ $names=explode(",",$list); for ($i=0; $i < sizeof($names); $i++) { $name = $this->resolve_parameter($names[$i]); if (!array_key_exists($name,$this->options)){ $this->options[$name] = new DistinctOptionsConnector($this->get_connection(),$this->names["db_class"]); $c = new DataConfig($this->config); $r = new DataRequestConfig($this->request); $c->minimize($name); $this->options[$name]->render_connector($c,$r); } $this->extra_output.=""; if (!is_string($this->options[$name])) $this->extra_output.=$this->options[$name]->render(); else $this->extra_output.=$this->options[$name]; $this->extra_output.=""; } } /*! renders self as xml, starting part */ protected function xml_start(){ if ($this->dload){ if ($pos=$this->request->get_start()) return ""; else return ""; } else return ""; } /*! renders self as xml, ending part */ protected function xml_end(){ return $this->extra_output.""; } public function set_config($config = false){ if (gettype($config) == 'boolean') $config = new GridConfiguration($config); $this->event->attach("beforeOutput", Array($config, "attachHeaderToXML")); } } /*! DataProcessor class for Grid component **/ class GridDataProcessor extends DataProcessor{ /*! convert incoming data name to valid db name converts c0..cN to valid field names @param data data name from incoming request @return related db_name */ function name_data($data){ if ($data == "gr_id") return $this->config->id["name"]; $parts=explode("c",$data); if ($parts[0]=="" && intval($parts[1])==$parts[1]) return $this->config->text[intval($parts[1])]["name"]; return $data; } } ?>