| class IDF_Views_User␊ | 
| {␊ | 
| /**␊ | 
| * Dashboard of a user. ␊ | 
| *␊ | 
| * Shows all the open issues assigned to the user.␊ | 
| *␊ | 
| * TODO: This views is a SQL horror. What needs to be done to cut␊ | 
| * by many the number of SQL queries:␊ | 
| * - Add a table to cache the open/closed status ids for all the ␊ | 
| *   projects.␊ | 
| * - Left join the issues with the project to get the shortname.␊ | 
| *␊ | 
| */␊ | 
| public $dashboard_precond = array('Pluf_Precondition::loginRequired');␊ | 
| 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'));␊ | 
| }␊ | 
| 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 {␊ | 
| $title = __('Your Dashboard - Submitted Issues');␊ | 
| $f_sql = new Pluf_SQL('submitter=%s AND status IN ('.implode(', ', $otags).')', array($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->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');␊ | 
| $list_display = array(␊ | 
| 'id' => __('Id'),␊ | 
| array('project', 'Pluf_Paginator_FkToString', __('Project')),␊ | 
| array('summary', 'IDF_Views_IssueSummaryAndLabels', __('Summary')),␊ | 
| array('status', 'IDF_Views_Issue_ShowStatus', __('Status')),␊ | 
| array('modif_dtime', 'Pluf_Paginator_DateAgo', __('Last Updated')),␊ | 
| );␊ | 
| $pag->configure($list_display, array(), array('status', 'modif_dtime'));␊ | 
| $pag->items_per_page = 10;␊ | 
| $pag->no_results_text = ($working) ? __('No issues are assigned to you, yeah!') : __('All the issues you submitted are fixed, yeah!');␊ | 
| $pag->setFromRequest($request);␊ | 
| return Pluf_Shortcuts_RenderToResponse('idf/user/dashboard.html',␊ | 
| array(␊ | 
| 'page_title' => $title,␊ | 
| 'nb_submit' => $nb_submit,␊ | 
| 'nb_owner' => $nb_owner,␊ | 
| 'issues' => $pag,␊ | 
| ),␊ | 
| $request);␊ | 
| ␊ | 
| ␊ | 
| }␊ | 
| ␊ | 
| /**␊ | 
| * Simple management of the base info of the user.␊ | 
| */␊ | 
| public $myAccount_precond = array('Pluf_Precondition::loginRequired');␊ | 
|  | 
| $request);␊ | 
| }␊ | 
| ␊ | 
| } | 
| }␊ | 
| ␊ | 
| /**␊ | 
| * 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".␊ | 
| *␊ | 
| * The summary of the issue is linking to the issue.␊ | 
| */␊ | 
| function IDF_Views_IssueSummaryAndLabels($field, $issue, $extra='')␊ | 
| {␊ | 
| $project = $issue->get_project();␊ | 
| $edit = Pluf_HTTP_URL_urlForView('IDF_Views_Issue::view', ␊ | 
| array($project->shortname, $issue->id));␊ | 
| $tags = array();␊ | 
| foreach ($issue->get_tags_list() as $tag) {␊ | 
| $url = Pluf_HTTP_URL_urlForView('IDF_Views_Issue::listLabel', ␊ | 
| array($project->shortname, $tag->id, 'open'));␊ | 
| $tags[] = sprintf('<a class="label" href="%s">%s</a>', $url, Pluf_esc((string) $tag));␊ | 
| }␊ | 
| $out = '';␊ | 
| if (count($tags)) {␊ | 
| $out = '<br /><span class="note">'.implode(', ', $tags).'</span>';␊ | 
| }␊ | 
| return sprintf('<a href="%s">%s</a>', $edit, Pluf_esc($issue->summary)).$out;␊ | 
| }␊ |