Skip to content

Commit 7e9b290

Browse files
committed
Added proper IDs to week view controls.
1 parent 7845326 commit 7e9b290

3 files changed

Lines changed: 28 additions & 26 deletions

File tree

WEB-INF/lib/ttTimeHelper.class.php

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,7 @@ static function getRecordsForInterval($user_id, $start_date, $end_date) {
767767
// 'day_6' => array('control_id' => '1_day_6', 'duration' => null)
768768
// )
769769
// );
770-
static function getDataForWeekView($user_id, $start_date, $end_date) {
770+
static function getDataForWeekView($user_id, $start_date, $end_date, $dayHeaders) {
771771
// Start by obtaining all records in interval.
772772
$records = ttTimeHelper::getRecordsForInterval($user_id, $start_date, $end_date);
773773

@@ -790,9 +790,14 @@ static function getDataForWeekView($user_id, $start_date, $end_date) {
790790
if ($pos < 0) {
791791
$dataArray[] = array('row_id' => $record_id,'label' => ttTimeHelper::makeRecordLabel($record)); // Insert row.
792792
$pos = ttTimeHelper::findRow($record_id, $dataArray);
793+
// Insert empty cells with proper control ids.
794+
for ($i = 0; $i < 7; $i++) {
795+
$control_id = $pos.'_'. $dayHeaders[$i];
796+
$dataArray[$pos][$dayHeaders[$i]] = array('control_id' => $control_id, 'tt_log_id' => null,'duration' => null);
797+
}
793798
}
794-
// Insert cell data from $record.
795-
$dataArray[$pos][$day_header] = array('id' => $record['id'],'duration' => $record['duration']);
799+
// Insert actual cell data from $record (one cell only).
800+
$dataArray[$pos][$day_header] = array('control_id' => $pos.'_'. $day_header, 'tt_log_id' => $record['id'],'duration' => $record['duration']);
796801
}
797802
return $dataArray;
798803
}
@@ -878,21 +883,21 @@ static function makeRecordLabel($record) {
878883
static function getDayHeadersForWeek($start_date) {
879884
$dayHeaders = array();
880885
$objDate = new DateAndTime(DB_DATEFORMAT, $start_date);
881-
$dayHeaders['day_header_0'] = (string) $objDate->getDate(); // It returns an int on first call.
882-
if (strlen($dayHeaders['day_header_0']) == 1) // Which is an implementation detail of DateAndTime class.
883-
$dayHeaders['day_header_0'] = '0'.$dayHeaders['day_header_0']; // Add a 0 for single digit day.
886+
$dayHeaders[] = (string) $objDate->getDate(); // It returns an int on first call.
887+
if (strlen($dayHeaders[0]) == 1) // Which is an implementation detail of DateAndTime class.
888+
$dayHeaders[0] = '0'.$dayHeaders[0]; // Add a 0 for single digit day.
884889
$objDate->incDay();
885-
$dayHeaders['day_header_1'] = $objDate->getDate(); // After incDay it returns a string with leading 0, when necessary.
890+
$dayHeaders[] = $objDate->getDate(); // After incDay it returns a string with leading 0, when necessary.
886891
$objDate->incDay();
887-
$dayHeaders['day_header_2'] = $objDate->getDate();
892+
$dayHeaders[] = $objDate->getDate();
888893
$objDate->incDay();
889-
$dayHeaders['day_header_3'] = $objDate->getDate();
894+
$dayHeaders[] = $objDate->getDate();
890895
$objDate->incDay();
891-
$dayHeaders['day_header_4'] = $objDate->getDate();
896+
$dayHeaders[] = $objDate->getDate();
892897
$objDate->incDay();
893-
$dayHeaders['day_header_5'] = $objDate->getDate();
898+
$dayHeaders[] = $objDate->getDate();
894899
$objDate->incDay();
895-
$dayHeaders['day_header_6'] = $objDate->getDate();
900+
$dayHeaders[] = $objDate->getDate();
896901
unset($objDate);
897902
return $dayHeaders;
898903
}

WEB-INF/templates/footer.tpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<br>
1313
<table cellspacing="0" cellpadding="4" width="100%" border="0">
1414
<tr>
15-
<td align="center">&nbsp;Anuko Time Tracker 1.13.0.3698 | Copyright &copy; <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
15+
<td align="center">&nbsp;Anuko Time Tracker 1.13.0.3699 | Copyright &copy; <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
1616
<a href="https://www.anuko.com/lp/tt_4.htm" target="_blank">{$i18n.footer.credits}</a> |
1717
<a href="https://www.anuko.com/lp/tt_5.htm" target="_blank">{$i18n.footer.license}</a> |
1818
<a href="https://www.anuko.com/lp/tt_7.htm" target="_blank">{$i18n.footer.improve}</a>

week.php

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -110,31 +110,32 @@
110110
// Get column headers, which are day numbers in month.
111111
$dayHeaders = ttTimeHelper::getDayHeadersForWeek($startDate->toString(DB_DATEFORMAT));
112112
// Build data array for the table. Format is described in the function..
113-
$dataArray = ttTimeHelper::getDataForWeekView($user->getActiveUser(), $startDate->toString(DB_DATEFORMAT), $endDate->toString(DB_DATEFORMAT));
113+
$dataArray = ttTimeHelper::getDataForWeekView($user->getActiveUser(), $startDate->toString(DB_DATEFORMAT), $endDate->toString(DB_DATEFORMAT), $dayHeaders);
114114
// Build day totals (total durations for each day in week).
115115
$dayTotals = ttTimeHelper::getDayTotals($dataArray, $dayHeaders);
116116

117117
// TODO: refactoring ongoing down from here.
118118

119+
// 1) Start coding modification of existing records.
120+
// 2) Then adding new records for existing rows.
121+
// 3) Then add code and UI for adding a new row.
122+
119123
// Actually this is work in progress at this point, even documenting the array, as we still miss control IDs, and
120124
// editing entries is not yet implemented. When this is done, we will have to re-document the above.
121125

122-
// TODO:
123-
// 1) make sure we have IDs for cells, which are now missing.
124-
125126
// Define rendering class for a label field to the left of durations.
126127
class LabelCellRenderer extends DefaultCellRenderer {
127128
function render(&$table, $value, $row, $column, $selected = false) {
128129
$this->setOptions(array('width'=>200,'valign'=>'middle'));
129-
$this->setValue(htmlspecialchars($value));
130+
$this->setValue(htmlspecialchars($value)); // This escapes HTML for output.
130131
return $this->toString();
131132
}
132133
}
133134

134135
// Define rendering class for a single cell for time entry in week view table.
135136
class TimeCellRenderer extends DefaultCellRenderer {
136137
function render(&$table, $value, $row, $column, $selected = false) {
137-
$field_name = $table->getValueAt($row,$column)['id']; // Our text field names (and ids) are like x_y (row_column).
138+
$field_name = $table->getValueAt($row,$column)['control_id']; // Our text field names (and ids) are like x_y (row_column).
138139
$field = new TextField($field_name);
139140
$field->setFormName($table->getFormName());
140141
$field->setSize(2);
@@ -169,13 +170,9 @@ function render(&$table, $value, $row, $column, $selected = false) {
169170
$table->setData($dataArray);
170171
// Add columns to table.
171172
$table->addColumn(new TableColumn('label', '', new LabelCellRenderer(), $dayTotals['label']));
172-
$table->addColumn(new TableColumn($dayHeaders['day_header_0'], $dayHeaders['day_header_0'], new TimeCellRenderer(), $dayTotals[$dayHeaders['day_header_0']]));
173-
$table->addColumn(new TableColumn($dayHeaders['day_header_1'], $dayHeaders['day_header_1'], new TimeCellRenderer(), $dayTotals[$dayHeaders['day_header_1']]));
174-
$table->addColumn(new TableColumn($dayHeaders['day_header_2'], $dayHeaders['day_header_2'], new TimeCellRenderer(), $dayTotals[$dayHeaders['day_header_2']]));
175-
$table->addColumn(new TableColumn($dayHeaders['day_header_3'], $dayHeaders['day_header_3'], new TimeCellRenderer(), $dayTotals[$dayHeaders['day_header_3']]));
176-
$table->addColumn(new TableColumn($dayHeaders['day_header_4'], $dayHeaders['day_header_4'], new TimeCellRenderer(), $dayTotals[$dayHeaders['day_header_4']]));
177-
$table->addColumn(new TableColumn($dayHeaders['day_header_5'], $dayHeaders['day_header_5'], new TimeCellRenderer(), $dayTotals[$dayHeaders['day_header_5']]));
178-
$table->addColumn(new TableColumn($dayHeaders['day_header_6'], $dayHeaders['day_header_6'], new TimeCellRenderer(), $dayTotals[$dayHeaders['day_header_6']]));
173+
for ($i = 0; $i < 7; $i++) {
174+
$table->addColumn(new TableColumn($dayHeaders[$i], $dayHeaders[$i], new TimeCellRenderer(), $dayTotals[$dayHeaders[$i]]));
175+
}
179176
$table->setInteractive(false);
180177
$form->addInputElement($table);
181178

0 commit comments

Comments
 (0)