/** * Saves a new time records, updating it if it alread exists * * @apiMethod POST * @apiUri /time/postRecord * @apiParameter { * "name": "id", * "description": "Record id", * "type": "integer", * "required": false, * "default": null * } * @apiParameter { * "name": "task_id", * "description": "Task ID of record", * "type": "integer", * "required": true, * "default": null * } * @apiParameter { * "name": "start", * "description": "Start date/time of record", * "type": "string", * "required": true, * "default": null * } * @apiParameter { * "name": "end", * "description": "End date/time of record", * "type": "string", * "required": true, * "default": null * } * @apiParameter { * "name": "description", * "description": "Record description", * "type": "string", * "required": false, * "default": null * } * @return void */ public function postRecordTask() { // Require authentication and authorization $this->requiresAuthentication(); $this->authorizeOrFail(); // Incoming posted data (grab individually for added security) $r = []; $r['task_id'] = Request::getInt('task_id'); $r['date'] = Date::of(Request::getVar('start'))->toSql(); $r['end'] = Date::of(Request::getVar('end'))->toSql(); $r['description'] = Request::getVar('description'); $r['time'] = (strtotime($r['end']) - strtotime($r['date'])) / 3600; $r['user_id'] = App::get('authn')['user_id']; // Create object and store content $record = Record::oneOrNew(Request::getInt('id')); $update = false; // See if we have an incoming id, indicating update if (!$record->isNew()) { // Make sure updater is the owner of the record if (!$record->isMine()) { App::abort(401, 'You are only allowed to update your own records'); } $update = true; } // Do the actual save if (!$record->set($r)->save()) { App::abort(500, 'Record creation failed'); } // Return response $response = $update ? 'Record successfully saved' : 'Record successfully created'; $status = $update ? 200 : 201; $this->send($response, $status); }
/** * Save new time record and redirect to the records page * * @return void */ public function saveTask() { // Create object $record = Record::oneOrNew(Request::getInt('id'))->set(array('task_id' => Request::getInt('task_id'), 'user_id' => Request::getInt('user_id'), 'time' => Request::getInt('htime') . '.' . Request::getInt('mtime'), 'date' => Date::of(Request::getVar('date'), Config::get('offset'))->toSql(), 'description' => Request::getVar('description'))); // Set end based on start + time length $record->set('end', date('Y-m-d H:i:s', strtotime($record->date) + $record->time * 3600)); // Only create records for yourself or your proxies if (!$record->isMine() && !$record->iCanProxy()) { // Set the redirect App::redirect(Route::url($this->base), Lang::txt('COM_TIME_RECORDS_WARNING_CANT_EDIT_OTHER'), 'warning'); return; } if (!$record->save()) { // Something went wrong...return errors foreach ($record->getErrors() as $error) { $this->view->setError($error); } $this->view->setLayout('edit'); $this->view->task = 'edit'; $this->editTask($record); return; } // Set the redirect App::redirect(Route::url($this->base . $this->start($record)), Lang::txt('COM_TIME_RECORDS_SAVE_SUCCESSFUL'), 'passed'); }