public function dashboard($request, $match, $working=true)␊ |
{␊ |
␊ |
$otags = array();␊ |
// Note that this approach does not scale, we will need to add␊ |
// a table to cache the meaning of the tags for large forges.␊ |
foreach (IDF_Views::getProjects($request->user) as $project) {␊ |
$otags = array_merge($otags, $project->getTagIdsByStatus('open'));␊ |
/*␊ |
* This is a little bit better - but still not perfect␊ |
* It has a N*3 SQL query for each issue that is assigned to the user␊ |
* As long as the user isn't assigned 100+ issues - it should hold␊ |
*/␊ |
$ownedissues = Pluf::factory("IDF_Issue")->getList(array('filter' => "owner = " . $request->user->id, 'view' => 'project_find'));␊ |
$submittedissues = Pluf::factory("IDF_Issue")->getList(array('filter' => "submitter = " . $request->user->id, 'view' => 'project_find'));␊ |
$nb_owner = count($ownedissues);␊ |
$nb_submit = count($submittedissues);␊ |
␊ |
// Paginator to paginate the issues␊ |
$pag = null;␊ |
if ($working)␊ |
{␊ |
$pag = new Pluf_Paginator(new IDF_Issue());␊ |
$title = __('Your Dashboard - Working Issues');␊ |
$pag->forced_where = new Pluf_SQL("owner = " . $request->user->id);␊ |
␊ |
␊ |
}␊ |
if (count($otags) == 0) $otags[] = 0;␊ |
if ($working) {␊ |
$title = __('Your Dashboard - Working Issues');␊ |
$f_sql = new Pluf_SQL('owner=%s AND status IN ('.implode(', ', $otags).')', array($request->user->id));␊ |
} else {␊ |
else␊ |
{␊ |
$pag = new Pluf_Paginator(new IDF_Issue());␊ |
$title = __('Your Dashboard - Submitted Issues');␊ |
$f_sql = new Pluf_SQL('submitter=%s AND status IN ('.implode(', ', $otags).')', array($request->user->id));␊ |
$pag->forced_where = new Pluf_SQL("submitter = " . $request->user->id);␊ |
␊ |
}␊ |
␊ |
// Get stats about the issues␊ |
$sql = new Pluf_SQL('submitter=%s AND status IN ('.implode(', ', $otags).')', array($request->user->id));␊ |
$nb_submit = Pluf::factory('IDF_Issue')->getCount(array('filter'=>$sql->gen()));␊ |
$sql = new Pluf_SQL('owner=%s AND status IN ('.implode(', ', $otags).')', array($request->user->id));␊ |
$nb_owner = Pluf::factory('IDF_Issue')->getCount(array('filter'=>$sql->gen()));␊ |
// Paginator to paginate the issues␊ |
$pag = new Pluf_Paginator(new IDF_Issue());␊ |
$pag->class = 'recent-issues';␊ |
$pag->model_view = 'project_find';␊ |
$pag->item_extra_props = array('current_user' => $request->user);␊ |
$pag->summary = __('This table shows the open issues.');␊ |
$pag->forced_where = $f_sql;␊ |
$pag->action = ($working) ? 'idf_dashboard' : 'idf_dashboard_submit';␊ |
$pag->sort_order = array('modif_dtime', 'ASC'); // will be reverted␊ |
$pag->sort_reverse_order = array('modif_dtime');␊ |
|
$user = $users[0];␊ |
$user_data = IDF_UserData::factory($user);␊ |
␊ |
$otags = array();␊ |
// Note that this approach does not scale, we will need to add␊ |
// a table to cache the meaning of the tags for large forges.␊ |
foreach (IDF_Views::getProjects($user) as $project) {␊ |
$otags = array_merge($otags, $project->getTagIdsByStatus('open'));␊ |
$ownedprojects = IDF_Views::getOwnedProjects($request->user);␊ |
␊ |
$pubprojects = array();␊ |
$privprojects = 0;␊ |
␊ |
foreach($ownedprojects as $proj)␊ |
{␊ |
if ($proj->private == 1)␊ |
{␊ |
$privprojects += 1;␊ |
continue;␊ |
} else {␊ |
$pubprojects[] = $proj;␊ |
}␊ |
}␊ |
␊ |
$false = Pluf_DB_BooleanToDb(false, $db);␊ |
$sql_results = $db->select(␊ |
'SELECT id FROM '.$db->pfx.'idf_projects '.␊ |
'WHERE '.$db->qn('private').'='.$false␊ |
);␊ |
$projectstats = IDF_Views::getProjectsStatistics($pubprojects);␊ |
//print_r($projectstats);␊ |
//echo $privprojects;␊ |
␊ |
$ids = array();␊ |
foreach ($sql_results as $id) {␊ |
$ids[] = $id['id'];␊ |
}␊ |
$f_sql = new Pluf_SQL('owner=%s AND status IN (' .implode(', ', $otags) . ') AND project IN (' . implode(', ', $ids) . ' )', array($user->id));␊ |
//$pubprojects = Pluf::factory("IDF_Project")->getList(array('filter' => ""));␊ |
␊ |
$pag = new Pluf_Paginator(new IDF_Issue());␊ |
$pag->model_view = "project_find_private";␊ |
$pag->class = 'recent-issues';␊ |
$pag->item_extra_props = array('current_user' => $request->user);␊ |
$pag->summary = __('This table shows the open issues.');␊ |
$pag->forced_where = $f_sql;␊ |
$pag->forced_where = new Pluf_SQL("owner = " . $request->user->id);␊ |
$pag->action = 'idf_dashboard';␊ |
$pag->sort_order = array('modif_dtime', 'ASC'); // will be reverted␊ |
$pag->sort_reverse_order = array('modif_dtime');␊ |
$list_display = array(␊ |
'id' => __('Id'),␊ |
array('project', 'Pluf_Paginator_FkToString', __('Project')),␊ |
//'id' => __('Id'),␊ |
//array('project', 'Pluf_Paginator_FkToString', __('Project')),␊ |
array('project', 'IDF_Views_ProjectLink', __('Project')),␊ |
array('summary', 'IDF_Views_IssueSummaryAndLabels', __('Summary')),␊ |
array('status', 'IDF_Views_Issue_ShowStatus', __('Status')),␊ |
array('modif_dtime', 'Pluf_Paginator_DateAgo', __('Last Updated')),␊ |
|
$pag->no_results_text = __('This user has no issues assigned to them!');␊ |
$pag->setFromRequest($request);␊ |
␊ |
$pag2 = new Pluf_Paginator(new IDF_Commit());␊ |
$pag->model_view = "project_find_private";␊ |
$pag2->class = 'recent-issues';␊ |
$pag2->summary = __('This table shows the latest commits of this user.');␊ |
$pag2->forced_where = new Pluf_SQL("author = " . $request->user->id);␊ |
$pag2->action = 'idf_dashboard';␊ |
$pag2->sort_order = array('creation_dtime', 'ASC'); // will be reverted␊ |
$pag2->sort_reverse_order = array('creation_dtime');␊ |
$list_display = array(␊ |
//'id' => __('Id'),␊ |
array('project', 'IDF_Views_ProjectLink', __('Project')),␊ |
'summary' => __('Summary'),␊ |
array('creation_dtime', 'Pluf_Paginator_DateAgo', __('Commit sent')),␊ |
);␊ |
$pag2->configure($list_display, array(), array('creation_dtime'));␊ |
$pag2->items_per_page = 10;␊ |
$pag2->no_results_text = __('This user has not made any commits yet!');␊ |
$pag2->setFromRequest($request);␊ |
␊ |
␉ $projects = IDF_Views::getOwnedProjects($user);␊ |
␉ return Pluf_Shortcuts_RenderToResponse('idf/user/public.html',␊ |
array('page_title' => (string) $user,␊ |
'member' => $user,␊ |
'user_data' => $user_data,␊ |
␉␉␉␉␉␉ 'projects' => $projects,␊ |
'issues' => $pag␊ |
'issues' => $pag,␊ |
'commits' => $pag2,␊ |
'stats' => new Pluf_Template_ContextVars($projectstats),␊ |
'privatecount' => $privprojects␊ |
),␊ |
$request);␊ |
}␊ |
␊ |
}␊ |
␊ |
function IDF_Views_ProjectLink($field, $issue, $extra='')␊ |
{␊ |
$project = $issue->get_project();␊ |
$edit = Pluf_HTTP_URL_urlForView('IDF_Views_Project::home',␊ |
array($project->shortname));␊ |
␊ |
return sprintf('<a href="%s">%s</a>', $edit, $project->shortname);␊ |
}␊ |
␊ |
/**␊ |
* Display the summary of an issue, then on a new line, display the␊ |
* list of labels with a link to a view "by label only".␊ |