/[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.8 - (hide annotations)
Fri Apr 4 01:16:03 2003 UTC (21 years, 4 months ago) by jonen
Branch: MAIN
Changes since 1.7: +45 -5 lines
+  integrated different mode's for 'DataItem'

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

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