Added a couple of test files for experimentation with rendering of tables.
[timetracker.git] / table_test.php
1 <?php
2 // +----------------------------------------------------------------------+
3 // | Anuko Time Tracker
4 // +----------------------------------------------------------------------+
5 // | Copyright (c) Anuko International Ltd. (https://www.anuko.com)
6 // +----------------------------------------------------------------------+
7 // | LIBERAL FREEWARE LICENSE: This source code document may be used
8 // | by anyone for any purpose, and freely redistributed alone or in
9 // | combination with other software, provided that the license is obeyed.
10 // |
11 // | There are only two ways to violate the license:
12 // |
13 // | 1. To redistribute this code in source form, with the copyright
14 // |    notice or license removed or altered. (Distributing in compiled
15 // |    forms without embedded copyright notices is permitted).
16 // |
17 // | 2. To redistribute modified versions of this code in *any* form
18 // |    that bears insufficient indications that the modifications are
19 // |    not the work of the original author(s).
20 // |
21 // | This license applies to this document only, not any other software
22 // | that it may be combined with.
23 // |
24 // +----------------------------------------------------------------------+
25 // | Contributors:
26 // | https://www.anuko.com/time_tracker/credits.htm
27 // +----------------------------------------------------------------------+
28
29 require_once('initialize.php');
30 import('form.Form');
31 import('form.DefaultCellRenderer');
32 import('form.Table');
33 import('form.TextField');
34
35 $durations_with_labels = array(
36   array( // Row 0.
37     'id' => 'something goes here too', // Row ideentifier.
38     'label' => 'This is a label for row 0',
39     'day_0' => array('id' => '0_0', 'duration' => '00:00'),
40     'day_1' => array('id' => '0_1', 'duration' => '01:00'),
41     'day_2' => array('id' => '0_2', 'duration' => '02:00'),
42     'day_3' => array('id' => '0_3', 'duration' => null),
43     'day_4' => array('id' => '0_4', 'duration' => '04:00')
44   ),
45   array( // Row 1.
46     'label' => 'This is a label for row 1',
47     'day_0' => array('id' => '1_0', 'duration' => '00:30'),
48     'day_1' => array('id' => '1_1', 'duration' => '01:30'),
49     'day_2' => array('id' => '1_2', 'duration' => '02:30'),
50   )
51 );
52
53 $totals = array(
54     'label' => 'Total:',
55     'day_0' => '00:30',
56     'day_1' => '02:30',
57     'day_2' => '04:30',
58     'day_3' => null,
59     'day_4' => '04:00',
60     'day_5' => null,
61     'day_6' => null
62 );
63
64 // Define rendering class for a label field to the left of durations.
65 class LabelCellRenderer extends DefaultCellRenderer {
66   function render(&$table, $value, $row, $column, $selected = false) {
67     $this->setOptions(array('width'=>200,'valign'=>'middle'));
68     $this->setValue(htmlspecialchars($value));
69     return $this->toString();
70   }
71 }
72
73 // Define rendering class for a single cell for time entry in week view table.
74 class TimeCellRenderer extends DefaultCellRenderer {
75   function render(&$table, $value, $row, $column, $selected = false) {
76     $field_name = $table->getValueAtName($row,$column)['id']; // Our text field names (and ids) are like x_y (row_column).
77     $field = new TextField($field_name);
78     $field->setFormName($table->getFormName());
79     $field->setSize(2);
80     $field->setValue($table->getValueAt($row,$column)['duration']);
81     $this->setValue($field->getHtml());
82     return $this->toString();
83   }
84 }
85
86 // Elements of weekTimeForm.
87 $form = new Form('weekTimeForm');
88
89 // Create week_durations table.
90 $table = new Table('week_durations');
91 // $table->setIAScript('markModified'); // TODO: write a script to mark table or particular cells as modified.
92 $table->setTableOptions(array('width'=>'100%','cellspacing'=>'1','cellpadding'=>'3','border'=>'0'));
93 $table->setRowOptions(array('valign'=>'top','class'=>'tableHeader'));
94 $table->setData($durations_with_labels);
95 // Add columns to table.
96 $table->addColumn(new TableColumn('label', '', new LabelCellRenderer(), $totals['label']));
97 $table->addColumn(new TableColumn('day_0', 'day 0', new TimeCellRenderer(), $totals['day_0']));
98 $table->addColumn(new TableColumn('day_1', 'day 1', new TimeCellRenderer(), $totals['day_1']));
99 $table->addColumn(new TableColumn('day_2', 'day 2', new TimeCellRenderer(), $totals['day_2']));
100 $table->addColumn(new TableColumn('day_3', 'day 3', new TimeCellRenderer(), $totals['day_3']));
101 $table->addColumn(new TableColumn('day_4', 'day 4', new TimeCellRenderer(), $totals['day_4']));
102 $table->addColumn(new TableColumn('day_5', 'day 5', new TimeCellRenderer()));
103 $table->addColumn(new TableColumn('day_6', 'day 6', new TimeCellRenderer()));
104 $table->setInteractive(false);
105 $form->addInputElement($table);
106
107 $form->addInput(array('type'=>'submit','name'=>'btn_submit','value'=>$i18n->getKey('button.submit')));
108
109 // Submit.
110 if ($request->isPost()) {
111   if ($request->getParameter('btn_submit')) {
112   }
113 }
114
115 $smarty->assign('forms', array($form->getName()=>$form->toArray()));
116 $smarty->assign('title', $i18n->getKey('title.time'));
117 $smarty->assign('content_page_name', 'table_test.tpl');
118 $smarty->display('index.tpl');