event->attach("beforeProcessing", Array($this, 'id_translate_before'));
$this->event->attach("afterProcessing", Array($this, 'id_translate_after'));
}
public function render(){
$this->parse_request();
$this->dload = true;
if ((isset($_GET["editing"]))||(isset($_POST["ids"]))) {
$this->editing=true;
} else {
$this->editing = false;
}
if ($this->editing){
$dp = new $this->names["data_class"]($this,$this->config,$this->request);
$dp->process($this->config,$this->request);
} else {
$wrap = new SortInterface($this->request);
$this->event->trigger("beforeSort",$wrap);
$wrap->store();
$wrap = new FilterInterface($this->request);
$this->event->trigger("beforeFilter",$wrap);
$wrap->store();
if (isset($_GET['id'])) {
$this->output_as_xml( $this->sql->select($this->request) );
} else {
$this->request->set_relation(false);
$this->output_as_xml( $this->sql->select($this->request) );
}
}
$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.'%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 "";
} else {
return "";
}
}
public function get_level() {
if (!isset($_GET['id'])) {
if (isset($_POST['ids'])) {
$ids = explode(",",$_POST["ids"]);
$id = $this->parseId($ids[0]);
$this->level--;
}
$this->request->set_relation(false);
} else {
$id = $this->parseId($_GET['id']);
$_GET['id'] = $id;
}
return $this->level;
}
public function parseId($id, $set_level = true) {
$result = Array();
preg_match('/^(.+)((#)|(%23))/', $id, $result);
if ($set_level === true) {
$this->level = $result[1] + 1;
}
preg_match('/^(.+)((#)|(%23))(.*)$/', $id, $result);
$id = $result[5];
return $id;
}
/*! set maximum level of tree
@param max_level
maximum level
*/
public function setMaxLevel($max_level) {
$this->max_level = $max_level;
}
/*! remove level prefix from id, parent id and set new id before processing
@param action
DataAction object
*/
public function id_translate_before($action) {
$this->request->set_relation(false);
$id = $action->get_id();
$id = $this->parseId($id, false);
$action->set_id($id);
$action->set_value('gr_id', $id);
$action->set_new_id($id);
$pid = $action->get_value($this->config->relation_id['db_name']);
$pid = $this->parseId($pid, false);
$action->set_value($this->config->relation_id['db_name'], $pid);
}
/*! add level prefix in id and new id after processing
@param action
DataAction object
*/
public function id_translate_after($action) {
$id = $action->get_id();
$action->set_id(($this->level).'%23'.$id);
$id = $action->get_new_id();
$action->success(($this->level).'%23'.$id);
}
}
class TreeGridMultitableDataProcessor extends DataProcessor {
function name_data($data){
if ($data=="gr_pid")
return $this->config->relation_id["name"];
preg_match('/^c(\d+)$/', $data, $data_num);
$data_num = $data_num[1];
if (isset($this->config->data[$data_num]["db_name"])) {
return $this->config->data[$data_num]["db_name"];
}
return $data;
}
}
?>