public function post_project_issue() { $issues = Input::get('weights'); foreach ($issues as $index => $id) { $issue = Project\Issue::load_issue($id); $issue->weight = $index; $issue->save(); } return json_encode($issues); }
/** * Build the user's dashboard * * @param int $activity_limit * @return array */ public function dashboard($activity_limit = 5) { $dashboard = $users = $issues = $projects = $comments = $activity_type = array(); /* Load the activity types */ foreach (Activity::all() as $row) { $activity_type[$row->id] = $row; } /* Loop through all the active projects */ foreach (Project\User::active_projects() as $project) { $dashboard[$project->id] = array(); $projects[$project->id] = $project; /* Loop through all the logic from the project and cache all the needed data so we don't load the same data twice */ foreach (User\Activity::where('parent_id', '=', $project->id)->order_by('created_at', 'DESC')->take($activity_limit)->get() as $activity) { $dashboard[$project->id][] = $activity; switch ($activity->type_id) { case 2: if (!isset($issues[$activity->item_id])) { $issues[$activity->item_id] = Project\Issue::find($activity->item_id); } if (!isset($users[$activity->user_id])) { $users[$activity->user_id] = static::find($activity->user_id); } if (!isset($comments[$activity->action_id])) { $comments[$activity->action_id] = Project\Issue\Comment::find($activity->action_id); } break; case 5: if (!isset($issues[$activity->item_id])) { $issues[$activity->item_id] = Project\Issue::find($activity->item_id); } if (!isset($users[$activity->user_id])) { $users[$activity->user_id] = static::find($activity->user_id); } if (!isset($users[$activity->action_id])) { $users[$activity->action_id] = static::find($activity->action_id); } break; default: if (!isset($issues[$activity->item_id])) { $issues[$activity->item_id] = Project\Issue::find($activity->item_id); } if (!isset($users[$activity->user_id])) { $users[$activity->user_id] = static::find($activity->user_id); } break; } } } /* Loop through the projects and activity again, building the views for each activity */ $return = array(); foreach ($dashboard as $project_id => $activity) { $return[$project_id] = array('project' => $projects[$project_id], 'activity' => array()); foreach ($activity as $row) { switch ($row->type_id) { case 2: $return[$project_id]['activity'][] = View::make('activity/' . $activity_type[$row->type_id]->activity, array('issue' => $issues[$row->item_id], 'project' => $projects[$project_id], 'user' => $users[$row->user_id], 'comment' => $comments[$row->action_id], 'activity' => $row)); break; case 5: $return[$project_id]['activity'][] = View::make('activity/' . $activity_type[$row->type_id]->activity, array('issue' => $issues[$row->item_id], 'project' => $projects[$project_id], 'user' => $users[$row->user_id], 'assigned' => $users[$row->action_id], 'activity' => $row)); break; case 6: $tag_diff = json_decode($row->data, true); $return[$project_id]['activity'][] = View::make('activity/' . $activity_type[$row->type_id]->activity, array('issue' => $issues[$row->item_id], 'project' => $projects[$project_id], 'user' => $users[$row->user_id], 'tag_diff' => $tag_diff, 'tag_counts' => array('added' => sizeof($tag_diff['added_tags']), 'removed' => sizeof($tag_diff['removed_tags'])), 'activity' => $row)); break; default: $return[$project_id]['activity'][] = View::make('activity/' . $activity_type[$row->type_id]->activity, array('issue' => $issues[$row->item_id], 'project' => $projects[$project_id], 'user' => $users[$row->user_id], 'activity' => $row)); break; } } } return $return; }
public function post_issue_assign() { Project\Issue::find(Input::get('issue_id'))->reassign(Input::get('user_id')); }
echo __('tinyissue.label_closed'); ?> </label> <?php echo __('tinyissue.by'); ?> <strong><?php echo $user->firstname . ' ' . $user->lastname; ?> </strong> <span class="time"> <?php echo date('F jS \\a\\t g:i A', strtotime($activity->created_at)); ?> </span> <?php if (Project\Issue::current()->status == 0 && Auth::user()->permission('issue-modify')) { ?> <a href="<?php echo Project\Issue::current()->to('status?status=1'); ?> " class="button success"><?php echo __('tinyissue.reopen'); ?> </a> <?php } ?> </div> </div> </li>
/** * Delete a project and it's children * * @param Project $project * @return void */ public static function delete_project($project) { $id = $project->id; $project->delete(); /* Delete all children from the project */ Project\Issue::where('project_id', '=', $id)->delete(); Project\Issue\Comment::where('project_id', '=', $id)->delete(); Project\User::where('project_id', '=', $id)->delete(); User\Activity::where('parent_id', '=', $id)->delete(); }
Route::filter('ajax', function () { if (!Request::ajax()) { return Response::error('404'); } }); Route::filter('project', function () { // find project id from issue object if (Request::route()->parameters[0] == 0) { return; } Project::load_project(Request::route()->parameters[0]); if (!Project::current()) { return Response::error('404'); } }); Route::filter('issue', function () { Project\Issue::load_issue(Request::route()->parameters[1]); if (!Project\Issue::current()) { return Response::error('404'); } // load project if (Request::route()->parameters[0] == 0) { Request::route()->parameters = array(Project\Issue::current()->project_id, Project\Issue::current()->id); Project::load_project(Request::route()->parameters[0]); } }); Route::filter('permission', function ($permission) { if (!Auth::user()->permission($permission)) { return Response::error('500'); } });
/** * Show general application stats * /administration * * @return View */ public function get_index() { return $this->layout->with('active', 'dashboard')->nest('content', 'administration.index', array('users' => User::where('deleted', '=', 0)->count(), 'active_projects' => Project::where('status', '=', 1)->count(), 'archived_projects' => Project::where('status', '=', 0)->count(), 'issues' => Project\Issue::count_issues())); }
</p> <?php echo Form::hidden('session', Crypter::encrypt(Auth::user()->id)); ?> <?php echo Form::hidden('project_id', $project->id); ?> <?php echo Form::hidden('token', md5($project->id . time() . \Auth::user()->id . rand(1, 100))); ?> <?php echo Form::token(); ?> </form> </div> </div> <?php } else { ?> <?php echo HTML::link(Project\Issue::current()->to('status?status=1'), __('tinyissue.reopen_issue')); ?> <?php } ?> </div>
if (Request::forged()) { return Response::error('500'); } }); Route::filter('auth', function () { if (Auth::guest()) { return Redirect::to('login'); } }); Route::filter('ajax', function () { if (!Request::ajax()) { return Response::error('404'); } }); Route::filter('project', function () { Project::load_project(Request::route()->parameters[0]); if (!Project::current()) { return Response::error('404'); } }); Route::filter('issue', function () { Project\Issue::load_issue(Request::route()->parameters[1]); if (!Project\Issue::current()) { return Response::error('404'); } }); Route::filter('permission', function ($permission) { if (!Auth::user()->permission($permission)) { return Response::error('500'); } });
/** * Change the status of a issue * /project/(:num)/issue/(:num)/status * * @return Redirect */ public function get_status() { $status = Input::get('status', 0); if ($status == 0) { $message = 'This issue has been closed. It is now read-only.'; } else { $message = 'This issue has been reopened. You can now work the issue.'; } Project\Issue::current()->change_status($status); return Redirect::to(Project\Issue::current()->to())->with('notice', $message); }
/** * Change the status of a issue * /project/(:num)/issue/(:num)/status * * @return Redirect */ public function get_status() { $status = Input::get('status', 0); if ($status == 0) { $message = __('tinyissue.issue_has_been_closed'); } else { $message = __('tinyissue.issue_has_been_reopened'); } Project\Issue::current()->change_status($status); return Redirect::to(Project\Issue::current()->to())->with('notice', $message); }
/** * Update a todo * * @param int $user_id * @param int $issue_id * @return array */ public static function update_todo($issue_id = 0, $new_status = 1) { $user_id = Auth::user()->id; $todo = Todo::load_todo($issue_id, $user_id); if (!$todo) { return array('success' => FALSE, 'errors' => __('tinyissue.todos_err_loadfailed')); } // Sanity check on status value. // @TODO Handle N configurable status codes $new_status = (int) $new_status; if ($new_status >= 0 && $new_status <= 3) { $todo->status = $new_status; $todo->save(); // Close issue if todo is moved to closed lane. if ($new_status == 0) { $issue = Project\Issue::find($issue_id); if (!empty($issue)) { $issue->change_status(0); } } return array('success' => TRUE); } else { return array('success' => FALSE, 'errors' => __('tinyissue.todos_err_update')); } }