/** * Update / Edit a comment * /project/(:num)/issue/(:num)/edit_comment * * @request ajax * @return string */ public function post_edit_comment() { if (Input::get('body')) { $comment = Project\Issue\Comment::find(str_replace('comment', '', Input::get('id')))->fill(array('comment' => Input::get('body')))->save(); return nl2br(stripslashes(Input::get('body'))); } }
/** * 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; }
/** * Select activity for a project * * @param int $activity_limit * @return array */ public function activity($activity_limit) { $users = $issues = $comments = $activity_type = array(); /* Load the activity types */ foreach (Activity::all() as $row) { $activity_type[$row->id] = $row; } /* Loop through all the logic from the project and cache all the needed data so we don't load the same data twice */ $project_activity = User\Activity::where('parent_id', '=', $this->id)->order_by('created_at', 'DESC')->take($activity_limit)->get(); if (!$project_activity) { return null; } foreach ($project_activity as $activity) { 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] = User::find($activity->user_id); } if (!isset($comments[$activity->action_id])) { $comments[$activity->action_id] = Project\Issue\Comment::find($activity->action_id); } if ($activity->type_id == 5) { if (!isset($users[$activity->action_id])) { if ($activity->action_id > 0) { $users[$activity->action_id] = User::find($activity->action_id); } else { $users[$activity->action_id] = array(); } } } } /* Loop through the projects and activity again, building the views for each activity */ $return = array(); foreach ($project_activity as $row) { switch ($row->type_id) { case 2: $return[] = View::make('activity/' . $activity_type[$row->type_id]->activity, array('issue' => $issues[$row->item_id], 'project' => $this, 'user' => $users[$row->user_id], 'comment' => $comments[$row->action_id], 'activity' => $row)); break; case 5: $return[] = View::make('activity/' . $activity_type[$row->type_id]->activity, array('issue' => $issues[$row->item_id], 'project' => $this, 'user' => $users[$row->user_id], 'assigned' => $users[$row->action_id], 'activity' => $row)); break; default: $return[] = View::make('activity/' . $activity_type[$row->type_id]->activity, array('issue' => $issues[$row->item_id], 'project' => $this, 'user' => $users[$row->user_id], 'activity' => $row)); break; } } return $return; }