/[cvs]/nfo/php/libs/com.newsblob.phphtmllib/widgets/data_list/DefaultGUIDataList.inc
ViewVC logotype

Annotation of /nfo/php/libs/com.newsblob.phphtmllib/widgets/data_list/DefaultGUIDataList.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations)
Mon Feb 3 16:34:27 2003 UTC (21 years, 7 months ago) by jonen
Branch: MAIN
Changes since 1.1: +42 -0 lines
+ added 'form_close()' tag and the end of 'build_simple_search_form()',
   so conflicts with other forms on the current page will be avoided
+ added function 'get_hidden_fields()' which must be overwritten by child class
+ added usage of 'get_hidden_fields()' at end of 'build_simple_search_form',
   so current wanted e.g. page control $_GET vars will become hidden fields at search form

1 jonen 1.1 <?php
2    
3     /**
4     *
5     * This file contains the Default DataList child
6     * that has its specific GUI layout/look/feel
7     *
8     * @author Walter A. Boring IV <waboring@buildabetterweb.com>
9     * @package phpHtmlLib
10     *
11     */
12    
13    
14     /**
15     * This class is the Default phpHtmlLib GUI interface
16     * child of the DataList class. This child simply does
17     * the job of rendering the html/layout for a DataList.
18     * You can use this as an example of how to build your
19     * own look/feel for your DataList.
20     *
21     * @author Walter A. Boring IV <waboring@buildabetterweb.com>
22     * @package phpHtmlLib
23     *
24     */
25     class DefaultGUIDatalist extends DataList {
26    
27     function gui_init() {
28     $container = container();
29     $container->add( $this->build_tool_link("first"),
30     $this->build_tool_link("prev"),
31     $this->build_tool_link("next"),
32     $this->build_tool_link("last"),
33     $this->build_tool_link("all"),
34     $this->get_page_info() );
35    
36     $this->_data_table = html_table($this->get_width(),0,0,0,"center");
37     $this->_data_table->set_class("datalist_border");
38    
39     $this->_tool_td = html_td("datalist_title", "right", $container);
40     $this->_tool_td->set_style("padding-top: 5px; padding-right: 5px;");
41     $this->_tool_td->set_tag_attribute("colspan", count($this->_columns)-1);
42    
43     $title = new TDtag(array("align" => "left",
44     "class" => "datalist_title",
45     "style" => "padding-left: 5px;"),
46     $this->get_title() );
47    
48     //add the header tr reference
49     //it will get populated later
50     $this->_header_tr = new TRtag;
51     $this->_data_table->add( new TRtag(array(), $title, $this->_tool_td) );
52     $this->_data_table->add_reference($this->_header_tr);
53    
54     //initialize the first date row
55     $this->_data_row = new TRtag;
56    
57     //enable search
58     $this->search_enable();
59     $this->set_simple_search_modifier();
60    
61     }
62    
63     function child_build_column_header($name, $col, $cnt) {
64     $td = $this->build_column_header($name, $col, $cnt);
65     $this->_header_tr->add( $td );
66     }
67    
68     function child_add_row_cell($obj, $col_name, $last_in_row_flag) {
69     $td = $this->wrap_column_item($obj, $col_name);
70    
71     $this->_data_row->add( $td );
72     if ($last_in_row_flag) {
73     $this->_data_table->add_row( $this->_data_row );
74     $this->_data_row = new TRtag;
75     }
76     }
77    
78     function child_get_gui() {
79     return $this->_data_table;
80     }
81    
82     /**
83     * This function builds the object/text
84     * to be used for a column header. It can
85     * either be an href because its sortable,
86     * or it can just be text, because its not
87     * sortable.
88     *
89     * @param string $col_name - the column name
90     * to build from
91     * the headers.
92     * @param array $col_data - the column's data.
93     * @param int the column # we are working on.
94     * @return mixed - either an Atag object or
95     * raw text.
96     */
97     function build_column_header($col_name, $col_data, $col_num) {
98    
99     $td = new TDtag(array("class"=>"datalist_col_head",
100     "width" => $col_data["size"]));
101    
102     if ($this->_columns[$col_name]["sortable"]) {
103     $col_url = $this->build_column_url($col_name);
104    
105     $td->set_tag_attribute("title","Sort By ".$col_name);
106    
107     $td->push(html_a($col_url, $col_name,"form_link"));
108    
109     if ($this->_columns[$col_name]["data_name"] == $this->orderby()) {
110    
111     if ($this->reverseorder() == "false") {
112     $alt_title = "Sorted in Ascending Order";
113     $img = html_img($this->get_image_path()."/picto_down.gif",11,11,'',$alt_title);
114     $img->set_tag_attribute("style", "padding-left: 5px;margin-left:5px;vertical-align:middle;");
115     $td->push($img);
116     } else {
117     $alt_title = "Sorted in Descending Order";
118     $img = html_img($this->get_image_path()."/picto_up.gif",11,11,'',$alt_title);
119     $img->set_tag_attribute("style", "padding-left: 5px;margin-left:5px;vertical-align:middle;");
120     $td->push($img);
121     }
122     }
123    
124     // we want to highlight the td on mouse over
125     $td->set_tag_attribute("onMouseOver",
126     "javascript:style.cursor='hand';this.className='datalist_col_head_hover';");
127     $td->set_tag_attribute("onMouseOut",
128     "javascript:this.className='datalist_col_head'");
129     $td->set_tag_attribute("onMouseDown",
130     "javascript:this.className='datalist_col_head_clicked'");
131    
132    
133     if ($this->get_form_method() == "POST") {
134     $td->set_tag_attribute("onClick", $col_url);
135     }
136     else {
137     $td->set_tag_attribute("onClick", "javascript:document.location='".$col_url."';");
138     }
139     } else {
140     $td->push($col_name);
141     $td->set_tag_attribute("style", $style."padding-left:5px;padding-right:5px;white-space:nowrap;");
142     }
143    
144     return $td;
145     }
146    
147     /**
148     * This function ensures that the data we place
149     * in a column is aligned according to what the
150     * user wants.
151     *
152     * @param mixed - $obj - the data for the td.
153     * @param string - $col_name - the name of the column header
154     * for this row to render.
155     * @param int - $odd_row - tells us if this cell lives in
156     * an odd # row (for alternating row colors)
157     * @param int - the column # we are working on.
158     * @return TDtag object
159     */
160     function wrap_column_item($obj, $col_name) {
161    
162     //make sure its set to something.
163     if ($obj == '') {
164     $obj = "&nbsp;";
165     }
166 jonen 1.2 // if item is an Array we will replace it with an link or contained form object
167     elseif( is_array($obj) ) {
168     $cur_row_index = $this->_datasource->get_cur_data_index();
169     $parent_guid = $this->_datasource->_data[$cur_row_index]['guid'];
170     foreach($obj as $key => $value) {
171     if(is_numeric($key)) {
172     $guid = $value['guid'];
173     $list[$key] = $guid;
174     }
175     }
176     if(is_array($list) ) {
177     $container = container(
178     form_open($obj[guid], $_SERVER["PHP_SELF"] ),
179     form_select("guid", $list),
180     form_hidden("ap", "oview"),
181     form_hidden("parent", $parent_guid),
182     form_submit("submit","view" ),
183     form_close()
184     );
185     $obj = $container;
186     } else {
187     $obj = html_a($_SERVER["PHP_SELF"] . "?ap=oview&guid=" . $obj['guid'] . "&parent=" . $parent_guid, "view");
188     }
189     }
190    
191 jonen 1.1
192     //make sure we don't put a right border on the last
193     //column we are working on.
194     $style = "padding-left: 3px;padding-right:3px;border-top: 1px solid #dddddd;";
195    
196     if ($this->_columns[$col_name]["data_name"] == $this->orderby()) {
197     $style .= "background-color: #f4f4f4;";
198     } else {
199     $style .= "background-color: #ffffff;";
200     }
201    
202     $align = $this->_columns[$col_name]["align"];
203     $td = new TDtag(array("align" => $align,
204     "style" => $style,
205     "class" => "font10"));
206    
207     if (is_object($obj) && $obj->_tag == "td") {
208     return $obj;
209     } else {
210     $td->add( $obj );
211     }
212     return $td;
213     }
214    
215     /**
216     * This builds the table that holds the search
217     * capability.
218     *
219     * @return TABLEtag object.
220     */
221     function child_build_search_table() {
222     //the search capability is enabled.
223     //lets try and build the table.
224     $td_attributes = array("style" => "padding-left: 5px;padding-bottom:4px;".
225     "padding-right:40px;padding-top:4px;".
226     "background-color: #eeeeee;",
227     "align" => "left",
228     "class" => "font10");
229    
230     $table = html_table($this->get_width(),0,0,0,"center");
231    
232     //test to see if they want to render the outer borders
233     $table->set_tag_attribute("style", "border-left: 1px solid #a1a1a1;".
234     "border-right: 1px solid #a1a1a1;");
235    
236     $td = new TDtag($td_attributes);
237    
238     if ($this->search_type() == "advanced") {
239     $td->push($this->_build_advanced_search_form());
240     } else {
241     $td->push($this->_build_simple_search_form());
242     }
243     $table->push_row($td);
244    
245     return container($this->_build_search_title(), $table);
246     }
247    
248     /**
249     * This function builds the search title table
250     *
251     * @return TABLEtag object
252     */
253     function _build_search_title() {
254     //build the title stacked table
255     $title = html_table($this->get_width(), 0, 0, 0, "center");
256    
257     //test to see if they want to render the outer borders
258     $title->set_tag_attribute("style","border: 1px solid #a1a1a1;");
259     $title->push_row(new TDtag(array("class" => "datalist_title",
260     "style" => "color: ".$this->_title_fcolor.";".
261     "background-color: ".$this->_title_color.";"), "&nbsp;Search"));
262    
263     return $title;
264     }
265    
266    
267     /**
268     * This function builds the simple search TD
269     *
270     * @return ContainerWidget
271     */
272     function _build_simple_search_form() {
273    
274     //if there is only 1 item enabled for search
275     //then the search looks simple.
276     $fields = $this->_get_searchable_fields();
277     $cnt = count($fields);
278     if ($cnt == 0) {
279     return NULL;
280     }
281    
282     $container = new ContainerWidget;
283    
284     if ($cnt == 1) {
285     //user only has 1 field to show.
286     list($name, $field) = each($fields);
287     $container->push("Find ".$name."&nbsp;&nbsp;");
288     } else {
289     //user has many fields to show.
290     $container->push("Find ",
291     form_select($this->_search_fieldVar, $fields, $this->search_field()));
292     }
293    
294     if ($this->get_simple_search_modifier()) {
295     //the user wants the search modifier turned on.
296     $container->push($this->_build_simple_search_modifier());
297     }
298    
299     $container->push(form_text($this->_search_valueVar, $this->search_value_filter($this->search_value()), "20", "100", array("style"=>"vertical-align:middle;")),
300     form_submit($this->get_form_name(), "Search", array("style"=>"vertical-align:middle;")));
301    
302     if ($this->is_advanced_search_enabled()) {
303     $span = html_span(html_a("ass","Advanced Search", "title"));
304     $container->push("&nbsp;", $span);
305     }
306    
307     if ($cnt == 1) {
308     $container->push(form_hidden($this->_search_fieldVar, $field));
309     }
310 jonen 1.2
311     $hidden_fields = $this->get_hidden_fields();
312     if(is_array($hidden_fields)) {
313     foreach($hidden_fields as $key => $value) {
314     $container->push(form_hidden($key, $value));
315     }
316     }
317    
318     $container->push(form_close() );
319 jonen 1.1
320     return $container;
321     }
322 jonen 1.2
323    
324     function get_hidden_fields() {
325     user_error("DefaulGUIDataList::get_hidden_fields() - ".
326     "child class must override this method ".
327     "this function should return a hash for hidden fields, if not needed just return" );
328     }
329    
330 jonen 1.1 }
331    
332     /**
333     * This class defines the css used by the
334     * FooterNav Object.
335     *
336     * @author Walter A. Boring IV <waboring@buildabetterweb.com>
337     * @package phpHtmlLib
338     */
339     class DefaultGUIDataListCSS extends CSSBuilder {
340    
341     function user_setup() {
342     $this->add_entry(".datalist_col_head", "",
343     array("font-family" => "arial, helvetica, sans-serif",
344     "font-size" => "10pt",
345     "font-weight" => "bold",
346     "color" => "#000000",
347     "background-color" => "#CCCCCC",
348     "text-align" => "left",
349     "white-space" => "nowrap",
350     "height" => "20px",
351     "vertical-align" => "middle",
352     "border-left" => "1px solid white",
353     "border-top" => "1px solid white",
354     "border-right" => "1px solid gray",
355     "border-bottom" => "1px solid gray",
356     "padding-left" => "3px",
357     "padding-right" => "3px") );
358    
359     $this->add_entry(".datalist_col_head", "a.form_link:active,a.form_link:visited,a.form_link:link",
360     array("color" => "#000000",
361     "text-decoration" => "none"));
362    
363     $this->add_entry(".datalist_col_head_hover", "",
364     array("font-family" => "arial, helvetica, sans-serif",
365     "font-size" => "10pt",
366     "font-weight" => "bold",
367     "color" => "#000000",
368     "background-color" => "#dcdcdc",
369     "text-align" => "left",
370     "white-space" => "nowrap",
371     "height" => "20px",
372     "vertical-align" => "middle",
373     "border-left" => "1px solid white",
374     "border-top" => "1px solid white",
375     "border-right" => "1px solid gray",
376     "border-bottom" => "1px solid gray",
377     "padding-left" => "3px",
378     "padding-right" => "3px") );
379    
380     $this->add_entry(".datalist_col_head_clicked", "",
381     array("font-family" => "arial, helvetica, sans-serif",
382     "font-size" => "10pt",
383     "font-weight" => "bold",
384     "color" => "#000000",
385     "background-color" => "#dddddd",
386     "text-align" => "left",
387     "white-space" => "nowrap",
388     "height" => "20px",
389     "vertical-align" => "middle",
390     "border-left" => "1px solid white",
391     "border-top" => "1px solid white",
392     "border-right" => "1px solid gray",
393     "border-bottom" => "1px solid gray",
394     "padding-left" => "3px",
395     "padding-right" => "3px") );
396    
397     $this->add_entry( ".datalist_border", "",
398     array("border" => "1px solid #999999"));
399    
400     $this->add_entry( ".datalist_title", "",
401     array("font-family" => "arial",
402     "font-size" => "10pt",
403     "font-weight" => "bold",
404     "color" => "#FFFFFF",
405     "background-color" => "#999999",
406     "white-space" =>"nowrap"));
407     }
408     }
409     ?>

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