[IMP] on the mini fly. With gzip openerp 7 js is around 500kb.
[odoo/odoo.git] / addons / web_calendar / static / lib / dhtmlxScheduler / codebase / connector / crosslink_connector.php
1 <?php\r
2 \r
3 class DelayedConnector extends Connector{\r
4         protected $init_flag=false;//!< used to prevent rendering while initialization\r
5         private $data_mode=false;//!< flag to separate xml and data request modes\r
6         private $data_result=false;//<! store results of query\r
7         \r
8         public function dataMode($name){\r
9                 $this->data_mode = $name;\r
10                 $this->data_result=array();\r
11         }\r
12         public function getDataResult(){\r
13                 return $this->data_result;\r
14         }\r
15         \r
16         public function render(){\r
17                 if (!$this->init_flag){\r
18                         $this->init_flag=true;\r
19                         return "";\r
20                 }\r
21                 return parent::render();\r
22         }\r
23         \r
24         protected function output_as_xml($res){\r
25                 if ($this->data_mode){\r
26                         while ($data=$this->sql->get_next($res)){\r
27                                 $this->data_result[]=$data[$this->data_mode];\r
28                         }\r
29                 }\r
30                 else \r
31                         return parent::output_as_xml($res);\r
32         }\r
33         protected function end_run(){\r
34                 if (!$this->data_mode)\r
35                         parent::end_run();\r
36         }\r
37 }\r
38         \r
39 class CrossOptionsConnector extends Connector{\r
40         public $options, $link;\r
41         private $master_name, $link_name, $master_value;\r
42         \r
43         public function __construct($res,$type=false,$item_type=false,$data_type=false){\r
44                 $this->options = new OptionsConnector($res,$type,$item_type,$data_type);\r
45                 $this->link = new DelayedConnector($res,$type,$item_type,$data_type);\r
46                 \r
47                 EventMaster::attach_static("connectorInit",array($this, "handle"));\r
48         }\r
49         public function handle($conn){\r
50                 if ($conn instanceof DelayedConnector) return;\r
51                 if ($conn instanceof OptionsConnector) return;\r
52                 \r
53                 $this->master_name = $this->link->get_config()->id["db_name"];\r
54                 $this->link_name = $this->options->get_config()->id["db_name"];\r
55         \r
56                 $this->link->event->attach("beforeFilter",array($this, "get_only_related"));\r
57                 \r
58                 if (isset($_GET["dhx_crosslink_".$this->link_name])){\r
59                         $this->get_links($_GET["dhx_crosslink_".$this->link_name]);\r
60                         die();\r
61                 }\r
62                 \r
63                 if (!$this->dload){\r
64                         $conn->event->attach("beforeRender", array($this, "getOptions"));\r
65                         $conn->event->attach("beforeRenderSet", array($this, "prepareConfig"));\r
66                 }\r
67                 \r
68                 \r
69                 $conn->event->attach("afterProcessing", array($this, "afterProcessing"));\r
70         }\r
71         public function prepareConfig($conn, $res, $config){\r
72                 $config->add_field($this->link_name);\r
73         }\r
74         public function getOptions($data){\r
75                 $this->link->dataMode($this->link_name);\r
76 \r
77                 $this->get_links($data->get_value($this->master_name));\r
78                 \r
79                 $data->set_value($this->link_name, implode(",",$this->link->getDataResult()));\r
80         }\r
81         public function get_links($id){\r
82                 $this->master_value = $id;\r
83                 $this->link->render();\r
84         }\r
85         public function get_only_related($filters){\r
86                 $index = $filters->index($this->master_name);\r
87                 if ($index!==false){\r
88                         $filters->rules[$index]["value"]=$this->master_value;\r
89                 } else\r
90                         $filters->add($this->master_name, $this->master_value, "=");\r
91         }\r
92         public function afterProcessing($action){\r
93                 $status = $action->get_status();\r
94                 \r
95                 $master_key = $action->get_value($this->master_name);   \r
96                 $link_key = $action->get_value($this->link_name);\r
97                 $link_key = explode(',', $link_key);\r
98                 \r
99                 if ($status == "inserted")\r
100                         $master_key = $action->get_new_id();\r
101                         \r
102                 switch ($status){\r
103                         case "deleted":\r
104                                 $this->link->delete($master_key);\r
105                                 break;\r
106                         case "updated":\r
107                                 $this->link->delete($master_key);\r
108                         case "inserted":\r
109                                 for ($i=0; $i < sizeof($link_key); $i++)\r
110                                         if ($link_key[$i]!="")\r
111                                                 $this->link->insert(array(\r
112                                                         $this->link_name => $link_key[$i],\r
113                                                         $this->master_name => $master_key\r
114                                                 ));\r
115                                 break;\r
116                 }\r
117         }\r
118 }\r
119 \r
120 ?>