/[cvs]/nfo/php/libs/org.netfrag.app/WebExplorer/AbstractExplorer.php
ViewVC logotype

Annotation of /nfo/php/libs/org.netfrag.app/WebExplorer/AbstractExplorer.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (hide annotations)
Mon Apr 7 22:31:51 2003 UTC (21 years, 4 months ago) by jonen
Branch: MAIN
Changes since 1.10: +55 -47 lines
+ added switch of ecom label (e.g. nav, chooser) at ecom type switch 'nav'
- removed recent added ecom type chooser

1 jonen 1.1 <?
2     /*
3     ## -----------------------------------------------------------------------------
4 jonen 1.11 ## $Id: AbstractExplorer.php,v 1.10 2003/04/05 20:32:04 joko Exp $
5 jonen 1.1 ## -----------------------------------------------------------------------------
6     ## $Log: AbstractExplorer.php,v $
7 jonen 1.11 ## Revision 1.10 2003/04/05 20:32:04 joko
8     ## added Chooser
9     ##
10 joko 1.10 ## Revision 1.9 2003/04/04 02:22:37 joko
11     ## minor fix: querySchema now issues argument
12     ##
13 joko 1.9 ## Revision 1.8 2003/04/04 01:16:03 jonen
14     ## + integrated different mode's for 'DataItem'
15     ##
16 jonen 1.8 ## Revision 1.7 2003/03/29 07:49:55 joko
17     ## show boxes in DEBUG-mode only!
18     ##
19 joko 1.7 ## Revision 1.6 2003/03/28 06:42:37 joko
20     ## fix: propagating rpc-debugging-options to constants here
21     ##
22 joko 1.6 ## Revision 1.5 2003/03/27 01:24:29 jonen
23     ## + enabled navigation ecom (only list yet)
24     ##
25 jonen 1.5 ## Revision 1.4 2003/03/20 08:02:11 jonen
26     ## + purged code
27     ##
28 jonen 1.4 ## Revision 1.3 2003/03/20 07:54:52 jonen
29     ## + added docu
30     ##
31 jonen 1.3 ## Revision 1.2 2003/03/20 07:44:31 jonen
32     ## + removed dumper
33     ##
34 jonen 1.2 ## Revision 1.1 2003/03/20 03:48:46 jonen
35     ## + initial commit
36     ##
37 jonen 1.1 ## Revision 1.1 2003/03/08 02:36:17 cvsmax
38     ## + moved from *.inc
39     ## + mungled namespace with WebExplorer
40     ##
41     ## Revision 1.3 2003/03/03 22:25:21 joko
42     ## fixed minor typos
43     ## namespace mungling
44     ##
45     ## Revision 1.2 2003/03/02 00:48:49 cvsmax
46     ## + set up gui module registry
47     ## - purged old/sample code
48     ##
49     ## Revision 1.1 2003/03/01 22:57:32 cvsmax
50     ## + inital commit
51     ##
52     ##
53     ## -----------------------------------------------------------------------------
54     */
55 jonen 1.3
56     /**
57     * WebExplorer::AbstractExplorer - this can be simple compared to a container,
58     * which modular GUI classes can be register, manipulated and rendered...
59     *
60     * @author Sebastian Utz <seut@tunemedia.de>
61     * @package org.netfrag.app
62     * @name WebExplorer::AbstractExplorer
63     */
64 jonen 1.1
65    
66     class WebExplorer_AbstractExplorer {
67    
68     /**
69     * container holds meta information of data locators
70     */
71     var $_data_locators = array();
72    
73     /**
74     * container for registered modules
75     */
76     var $_module = array();
77    
78     /**
79     * container holds references to each ecom
80     */
81     var $_ecom = array();
82    
83     /**
84     * holds the whole page state
85     */
86     var $_state = array();
87    
88     /**
89     * holds state variables only needed for explorer
90     */
91     var $_e_state = array();
92    
93    
94     function WebExplorer_AbstractExplorer($data_locators=array()) {
95     $this->_data_locators = $data_locators;
96 jonen 1.11 $this->init_default_gui_modules();
97 jonen 1.1 $this->set_e_state();
98 jonen 1.11
99     //debug
100 jonen 1.2 //print "State: " . Dumper($this->_state) ."<br>";
101 joko 1.6 $div = html_div();
102     $div->add( html_b(get_class($this)), html_hr(), "Explorer_State: " . Dumper($this->_e_state));
103     $div->set_style('background: #adadad; border: 2px black groove; width:640px; padding:10px; margin:40px;');
104 joko 1.7 if (constants::get('DEBUG')) {
105     print $div->render();
106     }
107 jonen 1.1 }
108    
109    
110     function add_data_locator($label, $args) {
111     $this->_data_locators[$label] = $args;
112     }
113    
114     function set_data_locator($label, $new_args=array() ) {
115     global $app;
116     //print Dumper($app) . "<br>";
117     if($label == "rpc") {
118     $rpcinfo = $app->getConfig("rpcinfo");
119     define('RPC_HOSTNAME', $rpcinfo[Host]);
120     define('RPC_PORT', $rpcinfo[Port]);
121 joko 1.6 define('RPC_DEBUG', $rpcinfo[DEBUG]);
122     define('RPC_TRACE', $rpcinfo[TRACE]);
123     define('RPC_DISCONNECT_ON_ERROR', $rpcinfo[DISCONNECT_ON_ERROR]);
124 jonen 1.1 } else {
125     user_error("AbstractExplorer::set_data_locator - data_locator_key label $label not found!");
126     }
127     }
128    
129     function get_data_locator($label) {
130     }
131    
132     function get_page_state() {
133     $requestTracker = mkObject("Application::Request::Tracker");
134     $this->_state = $requestTracker->getPointer();
135     }
136    
137     function set_e_state() {
138     $this->get_page_state();
139     $this->_e_state = $this->_state[options][options];
140     }
141    
142    
143     function set_page_state() {
144     user_error("AbstractExplorer::set_page_state - please implement me....");
145     }
146    
147    
148     function init_default_gui_modules() {
149     //$this->register_gui_module("n_tree", "nav", array( 'name' => "NavigationTree", 'type' => "tree") );
150 jonen 1.11 $this->register_gui_module("nav", "nav", "list", "WebExplorer::Module::NavigationList" );
151     $this->register_gui_module("content", "data", "list", "WebExplorer::Module::DataList" );
152     $this->register_gui_module("content", "data", "item", "WebExplorer::Module::DataItem" );
153 joko 1.10 // 2003-04-05 - Chooser
154 jonen 1.11 $this->register_gui_module("chooser", "nav", "list", "WebExplorer::Module::Chooser");
155 jonen 1.1 }
156    
157     function register_source_module($label, $args) {
158     $this->_module['source'][$label] = $args;
159     }
160    
161 jonen 1.11 function register_gui_module($label, $ecom_type, $abstract_type, $module_name) {
162     $this->_module['gui'][$label][$ecom_type][$abstract_type] = $module_name;
163 jonen 1.1 }
164    
165 jonen 1.11
166 jonen 1.1 function &get_ecom($label) {
167     //return "Hello World";
168     $this->_load_ecom($label);
169     return $this->_ecom[$label];
170     }
171 jonen 1.11
172    
173 jonen 1.1
174     function _load_ecoms() {
175 joko 1.10 //trace("_load_ecoms: " . Dumper($this->_e_state[ecoms]) . "<br/>");
176 jonen 1.1 foreach($this->_e_state[ecoms] as $label => $val) {
177     $this->_load_ecom($label);
178     }
179     }
180 jonen 1.11
181    
182 jonen 1.1
183     function _load_ecom($label) {
184 jonen 1.11 // fetch values from state
185 jonen 1.1 $val = $this->_e_state['ecoms'][$label];
186 jonen 1.11 debug::info("_load_ecom($label): " . Dumper($val) . "<br/>");
187    
188     // find right ecom gui module
189     $ecom_type = $val['ecom_type'];
190 jonen 1.1 $abstract_type = $val['ecom_abstract_type'];
191 jonen 1.11 $gui_module = $this->_module['gui'][$label][$ecom_type][$abstract_type];
192     //print Dumper($gui_module);
193 jonen 1.1 if(!$gui_module) {
194 joko 1.10 user_error("AbstractExplorer::_load_component - No GUI module found. [label='$label', abstract type='$val[ecom_abstract_type]', ecom type='$val[ecom_type]']");
195 jonen 1.1 return;
196     }
197 jonen 1.11
198     // get arguments needed for ecom gui module
199 jonen 1.1 $args = $this->_prepare_component_args($label);
200     //print Dumper($args);
201    
202 jonen 1.11 // get ecom GUI module
203 jonen 1.1 $ecom = php::mkComponent($gui_module, $args);
204     //print Dumper($ecom);
205    
206 jonen 1.11 // load phphtmllib GUI object
207 jonen 1.1 $gui_ecom = &$ecom->get();
208    
209     // add hidden vars, needed for explorer control
210     $hidden_items = $this->_get_hidden_items($label);
211 jonen 1.8 if(is_array($hidden_items) ) {
212     $ecom->add_hidden_items($hidden_items);
213     //print "Hidden: " . Dumper($hidden_items);
214     }
215 jonen 1.1
216 jonen 1.11 // attempt:
217     //$gui_ecom->make_transparent();
218    
219     // store phphtmllib GUI object
220 jonen 1.1 $this->_ecom[$label] = &$gui_ecom;
221     }
222    
223 jonen 1.11
224    
225 jonen 1.1 function _get_hidden_items($label) {
226     $ecom_state = $this->_e_state['ecoms'][$label];
227 jonen 1.5 if($ecom_state['ecom_type'] == "data") {
228     if($ecom_state['ecom_abstract_type'] == "list") {
229     $hidden_items = array(
230 jonen 1.1 'ecl' => $label,
231 jonen 1.8 'ecat' => "item",
232     'ecmod' => "view",
233 jonen 1.1 );
234 jonen 1.5 }
235 jonen 1.8 elseif($ecom_state['ecom_abstract_type'] == "item") {
236     $hidden_items = array(
237     'ecl' => $label,
238     'ecat' => "item",
239     'ecmod' => "view",
240     );
241     /*
242     if($ecom_state['ecom_mode'] == "view") {
243     $hidden_items['ecmod'] = "edit";
244     }
245     elseif($ecom_state['ecom_mode'] == "edit") {
246     $hidden_items['ecmod'] = "edit";
247     }
248     */
249     }
250 jonen 1.5 $hidden_items['ap'] = "explorer";
251 jonen 1.1 }
252     return $hidden_items;
253     }
254    
255 jonen 1.11
256    
257 jonen 1.1 function _prepare_component_args($label) {
258     $val = $this->_e_state['ecoms'][$label];
259     $this->set_data_locator($val['ecom_data_locator_key']);
260 joko 1.10
261     // detect and execute 'selectSource' action
262     // FIXME: this is a HACK!!! move to a module 'BackendAction' or s.th.l.th.
263     //print Dumper($this->_e_state['sources']);
264     if ($source = $this->_e_state['main']['ecom_data_source_key']) {
265     //print "selectSource: $source<br/>";
266     //global $app;
267     //print Dumper($backend);
268     //$app->backend->do();
269     }
270    
271 jonen 1.5 // switch component type
272     if($val['ecom_type'] == "data") {
273     // switch abstract type
274     if($val['ecom_abstract_type'] == "list") {
275     if($val['ecom_data_locator_key'] == "rpc") {
276     //$data_locator_meta = array( datasource => 'rpc', metatype => 'data', vartype => 'objects', classname => $val['ecom_data_ident']);
277     $data_locator_meta = array( datasource => 'rpc', metatype => 'data', abstract_type => 'list', classname => $val['ecom_data_ident']);
278     } else {
279     user_error("AbstractExplorer::_prepare_component_args - Cannot build query for data_locator_key $val[ecom_data_locator_key] !");
280     }
281     $args = array(
282 jonen 1.11 'caption' => $val['ecom_data_ident'],
283 jonen 1.1 'orderby' => "Guid",
284     'options' => array(
285     'data_locator_meta' => $data_locator_meta,
286     'decode' => 1,
287     'decode_args' => array(
288     'seperator' => "_",
289     'form' => 1,
290     ),
291     ),
292     );
293 jonen 1.5 // switch abstract type
294     } elseif ($val['ecom_abstract_type'] == "item") {
295 jonen 1.8 if($val['ecom_data_locator_key'] == "rpc") {
296     //$data_locator_meta = array( datasource => 'rpc', metatype => 'data', vartype => 'objects', classname => $val['ecom_data_ident']);
297     $data_locator_meta = array( datasource => 'rpc', metatype => 'data', abstract_type => 'item', ident => $val['ecom_data_ident'], classname => $val['ecom_data_meta']);
298     } else {
299     user_error("AbstractExplorer::_prepare_component_args - Cannot build query for data_locator_key $val[ecom_data_locator_key] !");
300     }
301     if(!$val['ecom_mode']) { $val['ecom_mode'] = "view"; }
302     print "Mode: $val[ecom_mode]<br>";
303     $args = array(
304 jonen 1.11 'caption' => $val['ecom_data_meta'],
305 jonen 1.8 'mode' => $val['ecom_mode'],
306     'options' => array(
307     'data_locator_meta' => $data_locator_meta,
308     'decode' => 1,
309     'decode_args' => array(
310     'seperator' => "_",
311     ),
312     ),
313     );
314     if($val['ecom_mode'] == "edit") { $args['adapter'] = 'FormProcessor'; }
315 jonen 1.5 }
316 joko 1.10
317 jonen 1.5 // switch component type
318     } elseif ($val['ecom_type'] == "nav") {
319     // switch abstract type
320     if($val['ecom_abstract_type'] == "list") {
321 jonen 1.11 $args = array();
322 jonen 1.5 if($val['ecom_data_locator_key'] == "rpc") {
323 jonen 1.11 // switch component label
324     if($label == "nav") {
325     $data_locator_meta = array( datasource => 'rpc', metatype => 'schema', filter => 'nodes.root:concrete' );
326     $args['caption'] = "Objekt Typen";
327     }
328     // NEW [2003-04-05]: DataSource.Chooser
329     elseif ($label == "chooser") {
330     $data_locator_meta = array( datasource => 'rpc', metatype => 'schema', filter => 'sources.all' );
331     $args['caption'] = "Datenquellen";
332     }
333     $args['options']['data_locator_meta'] = $data_locator_meta;
334 jonen 1.5 } else {
335 joko 1.10 user_error("AbstractExplorer::_prepare_component_args - Cannot build schema query for data_locator_key $val[ecom_data_locator_key] !");
336 jonen 1.5 }
337     } elseif ($val['ecom_abstract_type'] == "tree") {
338     $args = array();
339     }
340 joko 1.10
341    
342 jonen 1.1 }
343     return $args;
344     }
345    
346 jonen 1.11
347    
348 jonen 1.1 function get_msg($label) {
349     if($label == "welcome") {
350     $msg = "Welcome to the Explorer.";
351     }
352     return $msg;
353     }
354 jonen 1.11
355    
356 jonen 1.1
357     function render() {
358     user_error("AbstractExplorer::render - please implement me....");
359     }
360    
361     }
362    
363    
364     ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed