- // Insert a new record.
- $fields = array();
- $fields['row_id'] = $dataArray[$rowNumber]['row_id'];
- if (!$fields['row_id']) {
- // Special handling for row 0, a new entry. Need to construct new row_id.
- $record = array();
- $record['client_id'] = $cl_client;
- $record['billable'] = $cl_billable ? '1' : '0';
- $record['project_id'] = $cl_project;
- $record['task_id'] = $cl_task;
- $record['cf_1_value'] = $cl_cf_1;
- $fields['row_id'] = ttTimeHelper::makeRecordIdentifier($record).'_0'; // TODO: Handle a possible conflict with already existing row...
- // We may have to increment the suffix here.
- $fields['note'] = $cl_note;
+ // Posted value is different.
+ if ($existingDuration == null) {
+ // Skip inserting 0 duration values.
+ if (0 == ttTimeHelper::toMinutes($postedDuration))
+ continue;
+ // Insert a new record.
+ $fields = array();
+ $fields['row_id'] = $dataArray[$rowNumber]['row_id'];
+ if (!$fields['row_id']) {
+ // Special handling for row 0, a new entry. Need to construct new row_id.
+ $record = array();
+ $record['client_id'] = $cl_client;
+ $record['billable'] = $cl_billable ? '1' : '0';
+ $record['project_id'] = $cl_project;
+ $record['task_id'] = $cl_task;
+ $record['cf_1_value'] = $cl_cf_1;
+ $fields['row_id'] = ttWeekViewHelper::makeRowIdentifier($record).'_0';
+ // Note: no need to check for a possible conflict with an already existing row
+ // because we are doing an insert that does not affect already existing data.
+ }
+ $fields['day_header'] = $dayHeader;
+ $fields['start_date'] = $startDate->toString(DB_DATEFORMAT); // To be able to determine date for the entry using $dayHeader.
+ $fields['duration'] = $postedDuration;
+ $fields['browser_today'] = $request->getParameter('browser_today', null);
+ // Take note value from the control below duration.
+ $noteRowNumber = $rowNumber + 1;
+ $note_control_id = $noteRowNumber.'_'.$dayHeader;
+ $fields['note'] = $request->getParameter($note_control_id);
+ $result = ttWeekViewHelper::insertDurationFromWeekView($fields, $custom_fields, $err);
+ } elseif ($postedDuration == null || 0 == ttTimeHelper::toMinutes($postedDuration)) {
+ // Delete an already existing record here.
+ $result = ttTimeHelper::delete($dataArray[$rowNumber][$dayHeader]['tt_log_id'], $user->getActiveUser());
+ } else {
+ $fields = array();
+ $fields['tt_log_id'] = $dataArray[$rowNumber][$dayHeader]['tt_log_id'];
+ $fields['duration'] = $postedDuration;
+ $result = ttWeekViewHelper::modifyDurationFromWeekView($fields, $err);