{␊ |
// TODO: add a switch here later on to determine whether the project list␊ |
// or a custom start page should be displayed␊ |
$match = array('', 'all', 'name');␊ |
return $this->listProjects($request, $match);␊ |
}␊ |
␊ |
|
* Only the public projects are listed or the private with correct␊ |
* rights.␊ |
*/␊ |
public function listProjects($request, $match, $api=false)␊ |
public function listProjects($request, $match)␊ |
{␊ |
$projects = self::getProjects($request->user);␊ |
list(, $tagId, $order) = $match;␊ |
␊ |
$tag = false;␊ |
if ($tagId !== 'all') {␊ |
$tag = Pluf::factory('IDF_Tag')->get($match[1]);␊ |
// ignore non-global tags␊ |
if ($tag !== false && $tag->project > 0) {␊ |
$tag = false;␊ |
}␊ |
}␊ |
$order = in_array($order, array('name', 'activity')) ? $order : 'name';␊ |
␊ |
$projects = self::getProjects($request->user, $tag, $order);␊ |
$stats = self::getProjectsStatistics($projects);␊ |
$projectLabels = IDF_Forge::instance()->getProjectLabelsWithCounts();␊ |
␊ |
if ($api == true) return $projects;␊ |
return Pluf_Shortcuts_RenderToResponse('idf/listProjects.html',␊ |
array('page_title' => __('Projects'),␊ |
'projects' => $projects,␊ |
'projectLabels' => $projectLabels,␊ |
'tag' => $tag,␊ |
'order' => $order,␊ |
'stats' => new Pluf_Template_ContextVars($stats)),␊ |
$request);␊ |
}␊ |
|
}␊ |
␊ |
/**␊ |
* Returns a list of projects accessible for the user.␊ |
* Returns a list of projects accessible for the user and optionally filtered by tag.␊ |
*␊ |
* @param Pluf_User␊ |
* @param IDF_Tag␊ |
* @return ArrayObject IDF_Project␊ |
*/␊ |
public static function getProjects($user)␊ |
public static function getProjects($user, $tag = false, $order = 'name')␊ |
{␊ |
$db =& Pluf::db();␊ |
$false = Pluf_DB_BooleanToDb(false, $db);␊ |
$sql = new Pluf_SQL(1);␊ |
if ($tag !== false) {␊ |
$sql->SAnd(new Pluf_SQL('idf_tag_id=%s', $tag->id));␊ |
}␊ |
␊ |
if ($user->isAnonymous())␊ |
{␊ |
|
$sql->SAnd($authSql);␊ |
}␊ |
␊ |
$orderTypes = array(␊ |
'name' => 'name ASC',␊ |
'activity' => 'value DESC, name ASC',␊ |
);␊ |
return Pluf::factory('IDF_Project')->getList(array(␊ |
'filter'=> $sql->gen(),␊ |
'view' => 'join_activities',␊ |
'order' => 'name ASC'␊ |
'view' => 'join_activities_and_tags',␊ |
'order' => $orderTypes[$order],␊ |
));␊ |
}␊ |
␊ |
|
␊ |
// Count for each projects␊ |
foreach ($projects as $p) {␊ |
$pstats = $p->getStats ();␊ |
$pstats = $p->getStats();␊ |
$forgestats['downloads'] += $pstats['downloads'];␊ |
$forgestats['reviews'] += $pstats['reviews'];␊ |
$forgestats['issues'] += $pstats['issues'];␊ |
|
$forgestats['commits'] += $pstats['commits'];␊ |
}␊ |
␊ |
// Count projects␊ |
$forgestats['projects'] = count($projects);␊ |
␊ |
// Count members␊ |
$sql = new Pluf_SQL('first_name != %s', array('---'));␊ |
$forgestats['members'] = Pluf::factory('Pluf_User')␊ |