Umfragen
matrix.class.php
Go to the documentation of this file.
1 <?php
2 
3 if(!isset($matrix_included)){
4  die("matrixOption oder matrixQuestion class is not loaded ... please load it before checkBoxList");
5 }
6 
8  public $typ = "matrix";
9  public $child_widgets_whitelist = array("matrixQuestion");
10  public $child_options_whitelist = array("matrixOption");
11 
12  public $direct_result = false;
13  public $question_list = array();
14 
15  public function set_default_values($db){
16  $this->set_dispName("-");
17 
18  if( (isset($this->pollID)) AND (isset($this->ID)) AND (!empty($this->pollID)) AND (!empty($this->ID)) AND ($this->pollID != -1) AND ($this->ID != -1) ){
19  $this->widget_list = new object_list($this->pollID,$this->ID);
20  $this->option_list = new object_list($this->pollID,$this->ID);
21 
22  for($i=1;$i<=3;++$i){
23  $opt = new matrixOption();
24  $opt->set_default_values($db);
25  $opt->set_dispName("");
26  $opt->set_value("Option$i");
27  $this->insert_option(-1,$opt);
28  $db->insert_widget($opt,POLLTYPE_SIMPLE);
29  }
30  $quest = new matrixQuestion();
31  $quest->set_dispName("Frage1");
32  $this->insert_widget(-1,$quest);
33  $db->insert_widget($quest,POLLTYPE_SIMPLE);
34  }
35 
36  }
37 
38 
39 
40  /*
41  * DISPLAY
42  * */
43 
44  private function get_best_display_cell_width(){
45  $len = 0;
46  $len_tot = 0;
47  $len_count = 0;
48  foreach( $this->option_list as $option){
49  if( strlen($option->value) > $len){
50  $len = strlen($option->value);
51  }
52  if( strlen($option->dispName) > $len){
53  $len = strlen($option->dispName);
54  }
55  $len_tot = $len_tot + strlen($option->dispName) + strlen($option->value);
56  if( $option->dispName != "" ){
57  ++$len_count; // dispNames
58  }
59  ++$len_count; // values
60  }
61  if( $len_count != 0 ){ // division by 0
62  $av_len = ($len_count + ($len_tot/$len_count))/2;
63  }else{
64  $av_len = $len_tot;
65  }
66  return $av_len;
67  }
68 
69 
70  public function display_option_list_edit($polltype){
71  echo "<table class='table_1' > ";
72  echo "<tr> <th>ID</th> <th>Antwort</th> <th>Beschreibung</th> <th style='max-width:2em'>Bearbeiten</th> </tr>";
73  if( sizeof($this->option_list) != 0 ){
74  foreach($this->option_list as $opt){
75  $opt->display_option_edit();
76  }
77  }else{
78  echo "<td></td> <td></td>
79  <td> <input type='submit' name='add_option_ID{$this->ID}' title='Option Einfügen' value='' style='padding:0px;margin:0px;background-color:transparent;background-image:url( ".APP_ROOT."/icons/22/list-add.png );background-repeat:no-repeat;width:26px;height:26px;' /> </td>";
80  }
81  echo "</table>";
82  }
83 
84  public function handle_option_list_edit(){
85  // format: option_IDxx_name option_IDxx_value etc
86  $all_errs = "";
87  $options_seen = array();
88  // loop POST variable
89  $post_keys = array_keys($_POST);
90  foreach($post_keys as $post){
91  // if post array index beginns with "option_ID"
92  if( substr($post,0,strlen("option_ID")) == "option_ID"){
93  // get properety
94  if( substr($post,-1*strlen("name")) == "name"){
95  $prop = "name";
96  }else if( substr($post,-1*strlen("value")) == "value" ){
97  $prop = "value";
98  }
99  /*else if( substr($post,-1*strlen("linebr")) == "linebr" ){
100  $prop = "linebr";
101  }else if( substr($post,-1*strlen("max")) == "max" ){
102  $prop = "max";
103  }*/
104  }
105  if (isset($prop)){
106  // get id
107  $id = substr( $post , strlen("option_ID") , strlen($post)-strlen("option_ID")-strlen("_".$prop) );
108  // handle option edit only once .. here we have 3 times this Id
109  if( ($id != false) AND (is_numeric($id)) AND (!in_array(intval($id),$options_seen) ) ){
110  $option = $this->get_option_by_id( intval($id) );
111  $err_reason = $option->handle_option_edit();
112  if($err_reason !== true){
113  $all_errs = $all_errs."<br/>".$err_reason;
114  }
115  $options_seen[] = $id;
116  }
117  }
118  }
119  if($all_errs !== ""){
120  return $all_errs;
121  }else{
122  return true;
123  }
124  }
125 
126 
127  public function display_question_list_edit($polltype){
128  echo "<table class='table_1' > ";
129  if( $polltype == POLLTYPE_ADVANCED ){
130  echo "<tr> <th>ID</th> <th>Frage</th> <th>Datenbank Name</th> <th style='max-width:2em' >Pflicht</th> <th style='max-width:2em'>Bearbeiten</th> </tr>";
131  }else{
132  echo "<tr> <th>ID</th> <th>Frage</th> <th style='max-width:2em' >Pflicht</th> <th style='max-width:2em'>Bearbeiten</th> </tr>";
133  }
134  if( sizeof($this->widget_list) != 0 ){
135  foreach($this->widget_list as $opt){
136  $opt->display_option_edit($polltype);
137  }
138  }else{
139  echo "<td></td>
140  <td> <input type='submit' name='addq_option_ID{$this->ID}' title='Option Einfügen' value='' style='padding:0px;margin:0px;background-color:transparent;background-image:url( ".APP_ROOT."/icons/22/list-add.png );background-repeat:no-repeat;width:26px;height:26px;' /> </td>";
141  }
142  echo "</table>";
143  }
144 
145  public function handle_question_list_edit(){
146  // format: option_IDxx_name option_IDxx_value etc
147  $all_errs = "";
148  $options_seen = array();
149  // loop POST variable
150  $post_keys = array_keys($_POST);
151  foreach($post_keys as $post){
152  // if post array index beginns with "option_ID"
153  if( substr($post,0,strlen("question_ID")) == "question_ID"){
154  // get properety
155  if( substr($post,-1*strlen("name")) == "name"){
156  $prop = "name";
157  }else if( substr($post,-1*strlen("name2")) == "name2" ){
158  $prop = "name2";
159  }else if( substr($post,-1*strlen("required")) == "required" ){
160  $prop = "required";
161  }
162  }
163  if (isset($prop)){
164  // get id
165  $id = substr( $post , strlen("question_ID") , strlen($post)-strlen("question_ID")-strlen("_".$prop) );
166  // handle option edit only once .. here we have 3 times this Id
167  if( ($id != false) AND (is_numeric($id)) AND (!in_array(intval($id),$options_seen) ) ){
168  $child = $this->get_widget_by_id( intval($id) );
169  $err_reason = $child->handle_option_edit();
170  if($err_reason !== true){
171  $all_errs = $all_errs."<br/>".$err_reason;
172  }
173  $options_seen[] = $id;
174  }
175  }
176  }
177  if($all_errs !== ""){
178  return $all_errs;
179  }else{
180  return true;
181  }
182  }
183 
184 
185  public function display_chartType_edit(){
186  $allowed = array("barChart","barChart2","pieChart");
187  $allowed_names = array("Säulendiagramm Fragen","Säulendiagramm Antworten","Kreisdiagramm pro Frage");
188  $this->display_chartType_edit_generic($allowed,$allowed_names);
189  }
190 
191  public function handle_chartType_edit(){
192  $allowed = array("barChart","barChart2","pieChart");
193  return $this->handle_chartType_edit_generic($allowed);
194  }
195 
196 
197  public function display_show_charts_edit(){
198  $cnf = $this->get_config("showCharts");
199  $ckd = "";
200  if($cnf == true ){ $ckd = "checked='checked'"; }
201  echo "<input type='checkbox' name='show_charts' value='true' id='show_charts' $ckd/>
202  <label for='show_charts'>Aswertung der Frage nach dem Ausfüllen der Umfrage anzeigen</label>";
203  }
204 
205  public function handle_show_charts_edit(){
206  if( (isset($_POST["show_charts"])) AND ($_POST["show_charts"]=="true") ){
207  $r = $this->set_config("showCharts",true);
208  if($r !== true){
209  return $r;
210  }else{
211  return true;
212  }
213 
214  }else{
215  $r = $this->set_config("showCharts",false);
216  return $r;
217  }
218  }
219 
220  public function display_dispName_edit(){
221  if( $this->dispName == "-" ){
222  $value = "";
223  }else{
225  }
226  echo "<label for='widget_dispname'>Gemeinsame Beschreibung der Antworten</label> <br/>
227  <input type='text' name='widget_dispname' id='widget_dispname' value='{$value}' placeholder='Optionaler Beschreibungstext für alle Antworten' size='40' style='margin-left:1.5em' />";
228  }
229 
230  public function handle_dispName_edit(){
231  if( (isset($_POST["widget_dispname"])) AND ($_POST["widget_dispname"] != "") ){
232  $r = $this->set_dispName($_POST["widget_dispname"]);
233  if($r !== true){
234  return $r;
235  }else{
236  return true;
237  }
238  }else{
239  $this->set_dispName("-");
240  return true;
241  }
242  }
243 
244 
245  public function display_numberQuestion_edit(){
246  $conf = $this->get_config("numberQuestion");
247  if( $conf ){
248  $checked = "checked='checked'";
249  }else{
250  $checked = "";
251  }
252  echo "<input type='checkbox' name='widget_numberQuestion' id='widget_numberQuestion' value='true' $checked /> <label for='bumberQuestion'>Fragen numerieren</label>";
253  }
254 
255  public function handle_numberQuestion_edit(){
256  if( isset($_POST["widget_numberQuestion"]) AND ($_POST["widget_numberQuestion"] == "true") ){
257  return $this->set_config("numberQuestion",true);
258  }else{
259  return $this->set_config("numberQuestion",false);
260  }
261  }
262 
263 
264  private function display_question($question,$option_len,$bold=""){
265  $required = "";
266  if($question->is_required){
267  $required = "<span class='required_asterisk'>*</span>";
268  }
269  echo "<td style='$bold' class='matrix_question_question' >$required {$question->dispName}</td>";
270 
271  foreach( $this->option_list as $option){
272  $selected = "";
273  if( $option->value == $question->value ){
274  $selected = "checked='checked'";
275  }
276  echo "<td style='min-width:{$option_len}em;max-width:{$option_len};text-align:center' onclick='set_matrix_radioButton(\"{$question->ID}_{$option->ID}\");'>";
277  echo "<label for='{$question->ID}_{$option->ID}' style='width:100%;height:100%'>";
278  echo "<input type='radio' name='{$question->name}' id='{$question->ID}_{$option->ID}' value='{$option->value}' $selected /> ";
279  echo "</label>";
280  echo "</td>";
281  }
282  }
283 
284 
285  public function display_edit(){
286  $font_bold= $this->get_config("font-bold");
287  if( $font_bold == true){ $font_bold = "font-weight:bold"; }else{ $font_bold=""; }
288 
289  $this->display_edit_begin();
290  $len = $this->get_best_display_cell_width() * 0.7 ;
291  echo "<table style='' class='matrix_table' >";
292 
293  // answer description
294  if( $this->dispName != "-" ){
295  $colspan = sizeof($this->option_list);
296  $w = $len*$colspan;
297  echo "<tr><td colspan='2'></td> <td colspan='$colspan' style='max-width:{$w}em;word-wrap:break-word;border-bottom:1px solid #CCCCCC'>{$this->dispName}</td></tr>";
298  }
299  echo "<tr class='matrix_answer_desc_row'> <td colspan='2'></td>";
300  foreach( $this->option_list as $option ){
301  echo "<td style='max-width:{$len}em'>{$option->dispName}</td>";
302  }
303  echo "</tr>";
304 
305  // answer values
306  echo "<tr> <td colspan='2'></td>";
307  foreach( $this->option_list as $option ){
308  echo "<td style='max-width:{$len}em' class='matrix_option_val_td' >{$option->value}</td>";
309  }
310  echo "</tr>";
311 
312  //questions
313  $c = 0;
314  foreach( $this->widget_list as $question ){
315  $r = $c%2;
316  echo "<tr class='matrix_question_row row$r' >";
317  if( $this->get_config("numberQuestion")) {
318  $l = $c+1;
319  echo "<td>{$l}.</td>";
320  }else{
321  echo "<td></td>";
322  }
323  $this->display_question($question,$len,$font_bold);
324  echo "</tr>";
325  ++$c;
326  }
327  echo "</table>";
328  echo "</div>";
329  }
330 
331 
332  public function display(){
333  $font_family= $this->get_config("font-family");
334  $font_size= $this->get_config("font-size");
335  $font_bold= $this->get_config("font-bold");
336 
337  if( $font_family != ""){ $font_family = "font-family:".$font_family; }
338  if( $font_size != ""){ $font_size = "font-size:".$font_size; }
339  if( $font_bold == true){ $font_bold = "font-weight:bold"; }else{ $font_bold=""; }
340 
341  echo "<div class='widget_container matrix_widget' style='$font_family;$font_size'>";
342  $len = $this->get_best_display_cell_width() * 0.7 ;
343  echo "<table style='' class='matrix_table' >";
344 
345  // answer description
346  if( $this->dispName != "-" ){
347  $colspan = sizeof($this->option_list);
348  $w = $len*$colspan;
349  echo "<tr><td colspan='2'></td> <td colspan='$colspan' style='max-width:{$w}em;word-wrap:break-word;border-bottom:1px solid #CCCCCC'>{$this->dispName}</td></tr>";
350  }
351  echo "<tr class='matrix_answer_desc_row'> <td colspan='2'></td>";
352  foreach( $this->option_list as $option ){
353  echo "<td style='max-width:{$len}em'>{$option->dispName}</td>";
354  }
355  echo "</tr>";
356 
357  // answer values
358  echo "<tr> <td colspan='2'></td>";
359  foreach( $this->option_list as $option ){
360  echo "<td style='max-width:{$len}em' class='matrix_option_val_td' >{$option->value}</td>";
361  }
362  echo "</tr>";
363 
364  //questions
365  $c = 0;
366  foreach( $this->widget_list as $question ){
367  $r = $c%2;
368  echo "<tr class='matrix_question_row row$r' >";
369  if( $this->get_config("numberQuestion")) {
370  $l = $c+1;
371  echo "<td>{$l}.</td>";
372  }else{
373  echo "<td></td>";
374  }
375  $this->display_question($question,$len,$font_bold);
376  echo "</tr>";
377  ++$c;
378  }
379  echo "</table>";
380  echo "</div>";
381  }
382 
383  public function handle_inpt(){
384  $err = array();
385  foreach( $this->widget_list as $question ){
386  // check questions required
387  $req = $question->check_required();
388  if( $question->value != "" ){
389  $req = true; // do not trigger required error when we have a value
390  }
391  if( $req !== true ){
392  $err[] = $req;
393  }
394 
395  // check value
396  $value = -1;
397  for ($i=0 ; $i<sizeof($this->option_list) ; ++$i){
398  if ( isset($_POST[$question->name]) ){
399  // if option selected AND NOT changed do nothing
400  if( ($question->value != "") AND ($question->value == $_POST[$question->name]) AND ($this->option_list[$i]->value == $_POST[$question->name]) ){
401  continue;
402  // option selected
403  }else if ($this->option_list[$i]->value == $_POST[$question->name]) {
404  $value = $i;
405  }
406  } // end if isset post
407  } // end for
408 
409  // set value
410  if ($value != -1){
411  $question->value = $this->option_list[$value]->value;
412  }
413  }
414 
415  if( sizeof($err) == 0){
416  return true;
417  }else{
418  return $err;
419  }
420 
421  }
422 
423  /*--------------------------------------------------------
424  * ** COUNT **
425  * -------------------------------------------------------*/
426  public function count($db){
427  foreach( $this->widget_list as $child ){
428  foreach( $this->option_list as $opt ){
429  $this->set_data("count_".$opt->ID,0);
430  }
431  }
432 
433  foreach( $this->widget_list as $child ){
434  $pollID = $this->pollID; $ID = $this->ID; $name = $child->name;
435  $sql = "
436  SELECT `{$pollID}_results`.`$name`,
437  `$pollID`.`parent`,
438  `$pollID`.`ID`,
439  count(`ID`) as count
440  FROM `{$pollID}_results`
441  JOIN `$pollID` ON
442  `$pollID`.`value`=`{$pollID}_results`.`$name`
443  AND `$pollID`.`parent`='$ID'
444  GROUP BY `$pollID`.`ID`;";
445  $res = $db->get_sql_all_assoc($sql);
446 
447  // write data
448  if( is_array($res) ){
449  foreach( $res as $row ){
450  $opt = $this->get_option_by_id( intval($row["ID"]) );
451  if( isset($opt) ){
452  $child->set_data("count_{$opt->ID}",intval($row["count"]));
453  } // end if found option
454  } // end foreach row
455  }else{
456  return false;
457  } // end if result
458  } // end foreach question
459  return true;
460  }
461 
462 
463  /*--------------------------------------------------------
464  * ** CHART **
465  * -------------------------------------------------------*/
466  public function chart_make(){
467  $required_classes = array("pieChart","barChart");
468  foreach($required_classes as $c ){
469  if( !class_exists($c) ){
470  throw new exception("Chart classes not loaded. Please include chart.class.php");
471  }
472  }
473  $type = $this->get_config("chartType");
474  $data = $this->chart_format_data();
475  if( $type == "barChart" ){
476  $this->chart = new barchart($data);
477 
478  }else if( $type == "barChart2" ){
479  $this->chart = new barchart($data);
480 
481  }else if( $type == "pieChart" ){
482  $this->chart_list = array();
483  foreach( $data[0] as $d ){
484  $chart = new pieChart( $d );
485  $chart->set_config("width",200);
486  $chart->set_config("height",200);
487  $this->chart_list[] = $chart;
488  }
489  $this->charted_widget_list = $data[1];
490  $this->chart = new chart();
491  }else{
492  $this->chart = new barchart($data);
493  }
494  }
495 
500  private function chart_format_data_barChart( ){
501  $data = array( "labels" => array() , "datasets" => array( array() ) );
502 
503  $i = 0;
504  foreach( $this->widget_list as $question){
505  $data["labels"][] = "Frage".($i+1);
506  $ii =0;
507  foreach( $this->option_list as $option ){
508  $data["datasets"][$ii][] = $question->get_data("count_{$option->ID}");
509  ++$ii;
510  }
511  ++$i;
512  }
513  return $data;
514  }
515 
520  private function chart_format_data_barChart2( ){
521  $data = array( "labels" => array() , "datasets" => array( array() ) );
522 
523  $i = 0;
524  foreach( $this->option_list as $option){
525  $data["labels"][] = "Antwort".($i+1);
526  $ii =0;
527  foreach( $this->widget_list as $question ){
528  $data["datasets"][$ii][] = $question->get_data("count_{$option->ID}");
529  ++$ii;
530  }
531  ++$i;
532  }
533  return $data;
534  }
535 
540  private function chart_format_data_pieChart( ){
541  $data = array();
542  $widget_list = array();
543  foreach( $this->widget_list as $question ){
544  $dd = array();
545  foreach( $this->option_list as $option){
546  $dd[] = $question->get_data("count_{$option->ID}");
547  }
548  $data[] = $dd;
549  $charted_widget_list[] = $question;
550  }
551  return array($data,$charted_widget_list);
552  }
553 
554 
555  public function chart_format_data(){
556  $type = $this->get_config("chartType");
557 
558  $data = array();
559  if( $type == "barChart" ){
561  }else if( $type == "barChart2" ){
563  }else if( $type == "pieChart" ){
565  }else{
566  $data = $this->chart_format_data_barChart();
567  }
568 
569  return $data;
570  }
571 
572 
576  private function chart_display_legend_barChart(){
577  if( isset($this->chart) ){
578  echo "<table style='border-collapse:collapse'>";
579  $c=0;
580  echo "<tr><th colspan='2'>Legende Fragen (v.l.n.r.)</th></tr>";
581  if( $this->dispName != "-" ){
582  echo "<tr style='border-bottom:1px solid #949494'> <td> </td><td style='padding-right:1em' >{$this->dispName}</td></tr>";
583  }
584  foreach( $this->widget_list as $question ){
585  echo "<tr style='border-bottom:1px solid #D0D0D0'>";
586  $n = $c+1;
587  echo "<td style='border-right:1px solid #949494;padding-right:1em'>Frage$n</td>";
588  echo "<td style='padding-left:1em'>{$question->dispName}</td>";
589  echo "</tr>";
590  ++$c;
591  }
592  echo "</table>";
593  echo "<br/>";
594  echo "<table style='border-collapse:collapse'>";
595  echo "<tr><th colspan='2'>Legende Antworten</th></tr>";
596  $c = 0;
597  foreach( $this->option_list as $option ){
598  echo "<tr style='border-bottom:1px solid #D0D0D0;'>";
599  $color = $this->chart->colors->getRGBA($c,"1");
600  echo "<td style='background-color:$color;width:1em;height:1em;border: 2px solid white'> &nbsp; </td>";
601  echo "<td >{$option->value}</td>";
602  echo "</tr>";
603  ++$c;
604  }
605  echo "</table>";
606  } // end if chart loaded
607  }
608 
612  private function chart_display_legend_barChart2(){
613  if( isset($this->chart) ){
614  $c=0;
615  /*if( $this->dispName != "-" ){
616  echo "<tr><td colspan='2'>{$this->dispName}</td></tr>";
617  }*/
618  echo "<table style='border-collapse:collapse'>";
619  echo "<tr><th colspan='2'>Legende Antworten (v.l.n.r.)</th></tr>";
620  foreach( $this->option_list as $option ){
621  echo "<tr style='border-bottom:1px solid #D0D0D0'>";
622  $n = $c+1;
623  echo "<td style='border-right:1px solid #949494;padding-right:1em'>Antwort$n</td>";
624  echo "<td style='padding-left:1em'>{$option->value}</td>";
625  echo "</tr>";
626  ++$c;
627  }
628  echo "</table>";
629  echo "<br/>";
630  $c = 0;
631  echo "<table style='border-collapse:collapse'>";
632  echo "<tr><th colspan='2'>Legende Fragen</th></tr>";
633  foreach( $this->widget_list as $question ){
634  echo "<tr style='border-bottom:1px solid #D0D0D0;'>";
635  $color = $this->chart->colors->getRGBA($c,"1");
636  echo "<td style='background-color:$color;width:1em;height:1em;border: 2px solid white'> &nbsp; </td>";
637  echo "<td>{$question->dispName}</td>";
638  echo "</tr>";
639  ++$c;
640  }
641  echo "</table>";
642  }
643  }
644 
645 
651  echo "<table style='border-collapse:collapse'>";
652  $c=0;
653  echo "<tr><th colspan='2'>Legende</th></tr>";
654  foreach( $this->option_list as $option ){
655  echo "<tr style='border-bottom:1px solid #D0D0D0;'>";
656  $color = $this->chart->colors->getRGBA($c,"1");
657  $n = $c+1;
658  echo "<td style='background-color:$color;width:1em;height:1em;border: 2px solid white'> &nbsp; </td>";
659  echo "<td>{$option->value} <span style='color:#810000'>({$widget->get_data("count_".$option->ID)})</span></td>";
660  echo "</tr>";
661  ++$c;
662  }
663  echo "</table>";
664  }
665 
666  public function chart_display_legend(){
667  $chartType = $this->get_config("chartType");
668  if( isset($this->chart) ){
669  if( $chartType == "barChart" ){
671 
672  }else if( $chartType == "barChart2" ){
674 
675  }else{
677  }
678  } // end if chart set
679  }
680 
681 
682  public function chart_display_chart(){
683  if( !isset($this->chart) ){
684  $this->chart_make();
685  }
686  if( isset($this->chart) ){
687  $this->chart->display();
688  }
689  }
690 
691  public function chart_display(){
692  if( !isset($this->chart) ){
693  $this->chart_make();
694  }
695 
696  $chartType = $this->get_config("chartType");
697  if( $chartType != "pieChart" ){
698  if( isset($this->chart) ){
699  echo "<h3>Fragenmatrix ID{$this->ID}</h3>";
700  echo "<table><tr>";
701  echo "<td>";
702  $this->chart->display();
703  echo "</td>";
704  echo "<td style='padding-left:30px'>";
705  $this->chart_display_legend();
706  echo "</td>";
707  echo "</tr></table>";
708  }
709  }else{
710  echo "<h3>Fragenmatrix ID{$this->ID}</h3>";
711  echo "<table>";
712  $c=0;
713  foreach( $this->chart_list as $chart ){
714  echo "<tr> <td colspan='2'> <h4>{$this->charted_widget_list[$c]->dispName}</h4> </td> </tr>";
715  echo "<tr>";
716  echo "<td>";
717  $chart->display();
718  echo "</td>";
719  echo "<td style='padding-left:30px'>";
720  $this->chart_display_legend_pieChart($this->charted_widget_list[$c]);
721  echo "</td>";
722  echo "</tr>";
723  ++$c;
724  }
725  echo "</table>";
726  }
727 
728  }
729 
730 
731 }
732 // ! no ending newLine
733 ?>