public function action_addtask($project_id) { if (!($project = Model_Project::find($project_id))) { \Fuel\Core\Session::set_flash('error', "Cannot find the selected project # {$project_id}"); \Fuel\Core\Response::redirect_back('user/projects'); } $val = Model_Projecttask::validate('create'); if (\Fuel\Core\Input::method() == 'POST') { if ($val->run()) { $projecttask = Model_Projecttask::forge(array('project_id' => Input::post('project_id'), 'user_id' => Input::post('user_id'), 'project_task_name_id' => Input::post('project_task_name_id'), 'hourly_rate' => Input::post('hourly_rate'), 'task_status' => 0, 'task_due' => Input::post('task_due'), 'project_task_description' => Input::post('project_task_description'), 'comment' => Input::post('comment'), 'priority' => Input::post('priority'))); if ($projecttask and $projecttask->save()) { Session::set_flash('success', e('Added task #' . $projecttask->id . '.')); Response::redirect('user/projects/view/' . $project_id); } else { Session::set_flash('error', e('Could not save task.')); } } else { \Fuel\Core\Session::set_flash('error', $val->error()); } } $this->load_presenter($project, Model_Projecttask::forge(array('id' => 0, 'project_id' => $project->id, 'user_id' => $this->current_user->id, 'task_status' => 0, 'hourly_rate' => 456, 'task_due' => date('Y-m-d')))); $this->template->set_global('project_task_names', Model_Projecttaskname::find('all', array('order_by' => array(array('name', 'asc'))))); $this->template->set_global('users', array(Model_User::find($this->current_user->id))); $this->template->set_global('priorities', THelper::get_priorities()); $this->template->title = 'My Projects'; $this->template->content = Fuel\Core\View::forge('user/projects/addtask'); }
public function update($id) { $project = Model_Project::find($id); $this->response = new Monty_Response_HTML(); if (empty($project)) { $this->notFound($id); } else { $errors = array(); if (empty($this->request->post['name'])) { $errors[] = "Name must not be blank."; } else { $project->name = $this->request->post['name']; } if (empty($this->request->post['description'])) { $errors[] = "Description must not be blank."; } else { $project->description = $this->request->post['description']; } $project->is_active = !empty($this->request->post['is_active']); if (empty($errors)) { if (!$project->store()) { $errors[] = 'An error occurred while saving your changes!'; } else { $this->response->assign('success', 'Your changes have been saved!'); } } $this->response->assign('errors', $errors); $this->renderProject($project); } return $this->response; }
public function action_delete($id = null) { if ($project = Model_Project::find($id)) { $project->delete(); Session::set_flash('success', e('Deleted project #' . $id)); } else { Session::set_flash('error', e('Could not delete project #' . $id)); } Response::redirect('admin/projects'); }
public function action_index() { $data['open_tasks'] = THelper::get_tasks(0, 0, 0, date('m'), date('Y'), 0); $view = \Fuel\Core\View::forge('admin/tasks/index'); $view->set_global('admin', true); $view->set_global('open_tasks', $data['open_tasks']); $view->set_global('clients', Model_Customer::find('all', array('order_by' => array('name' => 'asc')))); $view->set_global('users', Model_User::find('all', array('order_by' => array('username' => 'asc')))); $view->set_global('years', range(2015, date('Y'))); $view->set_global('months', THelper::get_months_array()); $view->set_global('projects', Model_Project::find('all', array('order_by' => 'name'))); $this->template->title = 'Open Tasks'; $this->template->content = $view; }
public function action_filter() { $user_id = \Fuel\Core\Input::param('user_id', $this->current_user->id); $client_id = Fuel\Core\Input::param('client_id', 0); $project_id = \Fuel\Core\Input::param('project_id', 0); $month = Fuel\Core\Input::param('month', '00'); $year = Fuel\Core\Input::param('year', date('Y')); $status = 0; $data['open_tasks'] = THelper::get_tasks($this->current_user->id, $client_id, $project_id, $month, $year, $status, array(\Fuel\Core\Input::param('sort', 'priority') => \Fuel\Core\Input::param('order', 0))); $view = \Fuel\Core\View::forge('user/tasks/index'); $view->set_global('open_tasks', $data['open_tasks']); $view->set_global('admin', false); $view->set_global('clients', Model_Customer::find('all', array('order_by' => array('name' => 'asc')))); $view->set_global('users', Model_User::find('all', array('order_by' => array('username' => 'asc'), 'where' => array(array('id', $this->current_user->id))))); $view->set_global('projects', Model_Project::find('all', array('order_by' => array('name' => 'asc')))); $view->set_global('years', range(2015, date('Y'))); $view->set_global('months', THelper::get_months_array()); $this->template->user_is_admin = $this->check_user_is_admin(); $this->template->title = 'Open Tasks'; $this->template->content = $view; }
public function action_logtimes($timestamp = null) { if (!Auth\Auth::has_access('timesheets.read')) { Fuel\Core\Session::set_flash('error', 'You do not have access to view timesheets'); Fuel\Core\Response::redirect('user'); } if (!$timestamp) { $timestamp = \Fuel\Core\Date::forge()->get_timestamp(); // today } if (Fuel\Core\Input::method() == 'POST') { try { // start a db transaction \Fuel\Core\DB::start_transaction(); // find all logs for this task for this day $date = date('Y-m-d', $timestamp); $starts = date('Y-m-d 00:00:00', $timestamp); $ends = date('Y-m-d 23:59:59', $timestamp); $project_task_logs = Model_Projecttasklog::find('all', array('related' => array('project_task'), 'where' => array(array('project_task.user_id', $this->current_user->id), array('task_started', 'BETWEEN', array($starts, $ends))))); foreach ($project_task_logs as $log) { $date_starts = date('Y-m-d', $timestamp); $date_ends = date('Y-m-d 23:59:59', $timestamp); if ($log->get_project_task()->user_id == $this->current_user->id) { if (in_array(strtotime($log->task_started), range(strtotime($date_starts), strtotime($date_ends)))) { // delete the logs $log->delete(); } } } // insert new logs if (Fuel\Core\Input::post('timeslots')) { $date = date('Y-m-d', $timestamp); $last_comment = ''; $last_task_id = ''; foreach (Fuel\Core\Input::post('timeslots') as $str) { $times = explode('_', $str); $is_billable = 0; $task_started = $date . ' ' . $times[0] . ':00'; $task_completed = $date . ' ' . $times[1] . ':00'; $project_task_id_array = Fuel\Core\Input::post('project_task_id'); $task_id = $project_task_id_array["'{$str}'"]; if (Fuel\Core\Input::post('comment_' . $str) != '') { $last_comment = Fuel\Core\Input::post('comment_' . $str); } if (intval(Fuel\Core\Input::post('is_billable_' . $str, '0')) == 1) { $is_billable = 1; } if (empty($task_id)) { $task_id = $last_task_id; } else { $last_task_id = $task_id; } if (empty($task_id)) { continue; // todo - display error } $task_log = Model_Projecttasklog::forge(array('project_task_id' => $task_id, 'comment' => $last_comment, 'task_started' => $task_started, 'task_completed' => $task_completed, 'is_billable' => $is_billable)); $task_log->save(); } } // commit to database \Fuel\Core\DB::commit_transaction(); \Fuel\Core\Session::set_flash('success', 'Time logs saved successfully.'); Fuel\Core\Response::redirect('user/timesheets/index/' . $timestamp); } catch (Exception $ex) { // rollback on error \Fuel\Core\DB::rollback_transaction(); \Fuel\Core\Session::set_flash('error', $ex->getMessage()); Fuel\Core\Response::redirect('user/timesheets/advanced/logtimes/' . $timestamp); } } $now = \Fuel\Core\Date::forge($timestamp)->format('mysql'); $day_starts = date('Y-m-d 00:00:00', strtotime($now)); $day_ends = date('Y-m-d 23:59:59', strtotime($now)); $today_logs = Model_Projecttasklog::find('all', array('related' => array('project_task', 'project_task.project', 'project_task.project_task_name', 'project_task.user'), 'where' => array(array('task_started', 'BETWEEN', array($day_starts, $day_ends)), array('project_task.user_id', $this->current_user->id)), 'order_by' => array(array('task_started', 'asc')))); // todo: use DB::query() instead $this->template->set_global('today_logs', $today_logs); $this->template->set_global('projects', Model_Project::find('all', array('order_by' => array(array('name', 'asc'))))); $this->template->set_global('timezones', Model_Timezone::find('all', array('order_by' => array(array('starts', 'asc'))))); $this->template->set_global('my_tasks', Model_Projecttask::find('all', array('where' => array(array('user_id', $this->current_user->id)), 'related' => array('project_task_name'), 'order_by' => array(array('project_task_description', 'asc'))))); $this->template->set_global('timestamp', $timestamp); $this->template->set_global('date', \Fuel\Core\Date::forge($timestamp)->format('mysql_date')); $this->template->title = 'Timesheets'; $this->template->content = View::forge('user/timesheets/advanced/_advanced_form'); }
public function action_change_tasks_order() { if (Input::is_ajax()) { $project = Model_Project::find(intval(Input::post('project_id'))); // Changing the rank property according to the // list of ids received by the controller $task_ids = Input::post('task_ids'); for ($i = 0; $i < count($task_ids); $i++) { $task_id = intval($task_ids[$i]); $project->tasks[$task_id]->rank = $i; } $project->save(); } return false; // we return no content at all }