[evolvis-commits] r18216: [#2942] Rewrite Site-Admin Group List page
mirabilos at evolvis.org
mirabilos at evolvis.org
Fri Mar 30 17:44:48 CEST 2012
Author: mirabilos
Date: 2012-03-30 17:44:48 +0200 (Fri, 30 Mar 2012)
New Revision: 18216
Modified:
trunk/gforge_base/evolvisforge-5.1/src/debian/changelog
trunk/gforge_base/evolvisforge-5.1/src/www/admin/grouplist.php
Log:
[#2942] Rewrite Site-Admin Group List page
The new one is both legible and fixed. It uses EvolvisTable and
DatePicker in addition to my HTML and escaping utilities, and
does sorting in PHP space, but correctly. And it can reverse!
Modified: trunk/gforge_base/evolvisforge-5.1/src/debian/changelog
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/src/debian/changelog 2012-03-30 15:44:43 UTC (rev 18215)
+++ trunk/gforge_base/evolvisforge-5.1/src/debian/changelog 2012-03-30 15:44:48 UTC (rev 18216)
@@ -31,8 +31,9 @@
* Display [#nnn] links in Tracker mails correctly and use permalinks
* [#2946] Correctly unencode entities before sending out mails
* Tracker: multi-line Item Description and Comments handled correctly
+ * [#2942] Rewrite Site-Admin Group List page
- -- Thorsten Glaser <t.glaser at tarent.de> Fri, 30 Mar 2012 15:22:51 +0200
+ -- Thorsten Glaser <t.glaser at tarent.de> Fri, 30 Mar 2012 17:40:56 +0200
fusionforge (5.1.1+evolvis49) unstable; urgency=low
Modified: trunk/gforge_base/evolvisforge-5.1/src/www/admin/grouplist.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/src/www/admin/grouplist.php 2012-03-30 15:44:43 UTC (rev 18215)
+++ trunk/gforge_base/evolvisforge-5.1/src/www/admin/grouplist.php 2012-03-30 15:44:48 UTC (rev 18216)
@@ -1,8 +1,11 @@
<?php
-/**
- * List of all groups in the system.
+/*-
+ * List of all groups on the forge.
*
- * Copyright 1999-2000 (c) The SourceForge Crew
+ * Copyright © 2012
+ * Thorsten Glaser <t.glaser at tarent.de>
+ * Copyright © 1999-2000 The SourceForge Crew
+ * All rights reserved.
*
* This file is part of FusionForge. FusionForge is free software;
* you can redistribute it and/or modify it under the terms of the
@@ -22,152 +25,187 @@
require_once('../env.inc.php');
require_once $gfcommon.'include/pre.php';
+require_once $gfcommon.'include/datepick.php';
require_once $gfwww.'admin/admin_utils.php';
-site_admin_header(array('title'=>_('Project List')));
+$tcolnames = array(
+ _('Project Name (click to edit)'),
+ _('Register Time'),
+ _('Unix name'),
+ _('Status'),
+ _('Public?'),
+ _('Licence'),
+ _('Members#'),
+ _('Template?'),
+ );
-$sortorder = getStringFromRequest('sortorder');
+$tcolids = array(
+ 'group_name',
+ 'register_time',
+ 'unix_group_name',
+ 'status',
+ 'is_public',
+ 'license_name',
+ 'members',
+ 'is_template',
+ );
+
$group_name_search = getStringFromRequest('group_name_search');
$status = getStringFromRequest('status');
+$sortorder = getStringFromRequest('sortorder');
+$sortorder = in_array($sortorder, $tcolids) ? $sortorder : 'unix_group_name';
+$sortrev = getIntFromRequest('sortrev');
-$sortorder = util_ensure_value_in_set ($sortorder,
- array ('group_name',
- 'register_time',
- 'unix_group_name',
- 'status',
- 'is_public',
- 'license_name',
- 'members',
- 'is_template')) ;
-
-$sqlsortorder = $sortorder;
-
-if ($sortorder == 'is_public') {
- $sortorder = 'group_name' ;
-} elseif ($sortorder == 'is_template') {
- $sortorder = 'is_template DESC' ;
+if (USE_PFO_RBAC) {
+ $ra = RoleAnonymous::getInstance();
+ $qpa = db_construct_qpa(false, '
+ SELECT group_name, register_time, unix_group_name,
+ groups.group_id, groups.is_template, status, license_name,
+ COUNT(DISTINCT(pfo_user_role.user_id)) AS members
+ FROM groups
+ LEFT OUTER JOIN pfo_role
+ ON pfo_role.home_group_id = groups.group_id
+ LEFT OUTER JOIN pfo_user_role
+ ON pfo_user_role.role_id = pfo_role.role_id
+ , licenses
+ WHERE
+ license_id = license
+ ');
+} else {
+ $qpa = db_construct_qpa(false, '
+ SELECT group_name, register_time, unix_group_name,
+ groups.group_id, groups.is_public, groups.is_template,
+ status, license_name,
+ COUNT(user_group.group_id) AS members
+ FROM groups
+ LEFT JOIN user_group
+ ON user_group.group_id = groups.group_id
+ , licenses
+ WHERE
+ license_id = license
+ ');
}
+if ($group_name_search) {
+ $qpa = db_construct_qpa($qpa, '
+ AND lower(group_name) LIKE $1
+ ', array(
+ strtolower($group_name_search . '%'),
+ ));
+} else if ($status) {
+ $qpa = db_construct_qpa($qpa, '
+ AND status = $1
+ ', array(
+ $status,
+ ));
+}
+if (USE_PFO_RBAC) {
+ $qpa = db_construct_qpa($qpa, '
+ GROUP BY group_name, register_time, unix_group_name,
+ groups.group_id,
+ groups.is_template, status, license_name
+ ');
+} else {
+ $qpa = db_construct_qpa($qpa, '
+ GROUP BY group_name, register_time, unix_group_name,
+ groups.group_id, groups.is_public,
+ groups.is_template, status, license_name
+ ');
+}
+$res = db_query_qpa($qpa);
-if ($group_name_search != '') {
- echo "<p>"._('Projects that begin with'). " <strong>".$group_name_search."</strong></p>\n";
+$rows = array();
+while (($grp = db_fetch_array($res))) {
if (USE_PFO_RBAC) {
- $res = db_query_params ('SELECT group_name,register_time,unix_group_name,groups.group_id,groups.is_template,status,license_name,COUNT(DISTINCT(pfo_user_role.user_id)) AS members FROM groups LEFT OUTER JOIN pfo_role ON pfo_role.home_group_id=groups.group_id LEFT OUTER JOIN pfo_user_role ON pfo_user_role.role_id=pfo_role.role_id, licenses WHERE license_id=license AND lower(group_name) LIKE $1 GROUP BY group_name,register_time,unix_group_name,groups.group_id,groups.is_template,status,license_name ORDER BY '.$sqlsortorder,
- array (strtolower ("$group_name_search%"))) ;
- } else {
- $res = db_query_params ('SELECT group_name,register_time,unix_group_name,groups.group_id,groups.is_public,groups.is_template,status,license_name,COUNT(user_group.group_id) AS members
-FROM groups
-LEFT JOIN user_group ON user_group.group_id=groups.group_id, licenses
-WHERE license_id=license
-AND lower(group_name) LIKE $1
-GROUP BY group_name,register_time,unix_group_name,groups.group_id,groups.is_public,groups.is_template,status,license_name
-ORDER BY '.$sortorder,
- array (strtolower ("$group_name_search%"))) ;
+ $grp['is_public'] = $ra->hasPermission('project_read',
+ $grp['group_id']) ? 1 : 0;
}
-} else {
- if (USE_PFO_RBAC) {
- $qpa = db_construct_qpa (false, 'SELECT group_name,register_time,unix_group_name,groups.group_id,groups.is_template,status,license_name,COUNT(DISTINCT(pfo_user_role.user_id)) AS members FROM groups LEFT OUTER JOIN pfo_role ON pfo_role.home_group_id=groups.group_id LEFT OUTER JOIN pfo_user_role ON pfo_user_role.role_id=pfo_role.role_id, licenses WHERE license_id=license') ;
- if ($status) {
- $qpa = db_construct_qpa ($qpa, ' AND status=$1', array ($status)) ;
- }
- $qpa = db_construct_qpa ($qpa, ' GROUP BY group_name,register_time,unix_group_name,groups.group_id,groups.is_template,status,license_name ORDER BY '.$sqlsortorder) ;
- $res = db_query_qpa ($qpa) ;
- } else {
- $qpa = db_construct_qpa (false, 'SELECT group_name,register_time,unix_group_name,groups.group_id,groups.is_public,groups.is_template,status,license_name,COUNT(user_group.group_id) AS members
-FROM groups
-LEFT JOIN user_group ON user_group.group_id=groups.group_id, licenses
-WHERE license_id=license',
- array ()) ;
- if ($status) {
- $qpa = db_construct_qpa ($qpa, ' AND status=$1', array ($status)) ;
- }
- $qpa = db_construct_qpa ($qpa, ' GROUP BY group_name,register_time,unix_group_name,groups.group_id,groups.is_public,groups.is_template,status,license_name ORDER BY '.$sortorder) ;
- $res = db_query_qpa ($qpa) ;
- }
+ $rows[] = $grp;
}
-$headers = array(
- _('Project Name (click to edit)'),
- _('Register Time'),
- _('Unix name'),
- _('Status'),
- _('Public?'),
- _('License'),
- _('Members'),
- _('Template?')
-);
+usort($rows, function($a, $b) {
+ global $sortorder, $sortrev;
-$headerLinks = array(
- '/admin/grouplist.php?sortorder=group_name',
- '/admin/grouplist.php?sortorder=register_time',
- '/admin/grouplist.php?sortorder=unix_group_name',
- '/admin/grouplist.php?sortorder=status',
- '/admin/grouplist.php?sortorder=is_public',
- '/admin/grouplist.php?sortorder=license_name',
- '/admin/grouplist.php?sortorder=members',
- '/admin/grouplist.php?sortorder=is_template'
-);
+ $av = $a[$sortorder];
+ $bv = $b[$sortorder];
-echo $HTML->listTableTop($headers, $headerLinks);
+ switch ($sortorder) {
+ case 'register_time':
+ case 'is_public':
+ case 'members':
+ case 'is_template':
+ $rv = $av === $bv ? 0 : $av > $bv ? 1 : -1;
+ break;
-if (USE_PFO_RBAC) {
- $public_rows = array();
- $private_rows = array();
- $ra = RoleAnonymous::getInstance() ;
- while ($grp = db_fetch_array($res)) {
- if ($ra->hasPermission('project_read', $grp['group_id'])) {
- $grp['is_public'] = 1;
- $public_rows[] = $grp;
- } else {
- $grp['is_public'] = 0;
- $private_rows[] = $grp;
- }
+ case 'group_name':
+ case 'status':
+ case 'license_name':
+ $rv = strcasecmp($av, $bv);
+ break;
+
+ case 'unix_group_name':
+ default:
+ $rv = 0;
}
- $rows = $private_rows;
- $rows = array_merge($rows, $public_rows);
-} else {
- $rows = array();
- while ($grp = db_fetch_array($res)) {
- $rows[] = $grp;
+
+ /* second order sort is by unix group id */
+ $rv = $rv ? $rv : strcmp($a['unix_group_name'], $b['unix_group_name']);
+
+ return ($sortrev ? -$rv : $rv);
+ });
+
+$t = new EvolvisTable($tcolnames, array_map(function($v) {
+ global $sortorder, $sortrev;
+
+ $rv = '/admin/grouplist.php?sortorder=' . $v;
+ if ($v == $sortorder && !$sortrev) {
+ $rv .= '&sortrev=1';
}
-}
-$i = 0;
+ return ($rv);
+ }, $tcolids));
+
foreach ($rows as $grp) {
+ switch ($grp['status']) {
+ case 'A':
+ $status = "active";
+ break;
+ case 'D':
+ $status = "deleted";
+ break;
+ case 'P':
+ $status = "pending";
+ break;
+ default:
+ $status = "";
+ }
- if ($grp['status']=='A'){
- $status="active";
+ $r = $t->tr();
+ $r->td()->setraw(html_e('a', array(
+ 'href' => 'groupedit.php?group_id=' . $grp['group_id'],
+ ), util_html_secure($grp['group_name'])));
+ $x = $r->td();
+ if ($grp['register_time']) {
+ $x->set(datepick_format($grp['register_time'], true));
}
- if ($grp['status']=='P'){
- $status="pending";
- }
- if ($grp['status']=='D'){
- $status="deleted";
- }
-
- $time_display = "";
- if ($grp['register_time'] != 0) {
- $time_display = date(_('Y-m-d H:i'),$grp['register_time']);
- }
- echo '<tr '.$HTML->boxGetAltRowStyle($i).'>';
- echo '<td><a href="groupedit.php?group_id='.$grp['group_id'].'">'.$grp['group_name'].'</a></td>';
- echo '<td>'.$time_display.'</td>';
- echo '<td>'.$grp['unix_group_name'].'</td>';
- echo '<td class="'.$status.'">'.$grp['status'].'</td>';
- echo '<td>'.$grp['is_public'].'</td>';
- echo '<td>'.$grp['license_name'].'</td>';
- echo '<td>'.$grp['members'].'</td>';
- echo '<td>'.$grp['is_template'].'</td>';
- echo '</tr>';
- $i++;
+ $r->td()->set($grp['unix_group_name']);
+ $r->td(array(
+ 'class' => $status,
+ ), -1, $grp['status']);
+ $r->td()->set($grp['is_public'] ? _('Yes') : _('No'));
+ $r->td()->set($grp['license_name']);
+ $r->td()->set($grp['members']);
+ $r->td()->set($grp['is_template'] ? _('Yes') : _('No'));
}
-echo $HTML->listTableBottom();
+site_admin_header(array(
+ 'title' => _('Project List'),
+ ));
+if ($group_name_search) {
+ echo html_e('p', array(
+ ), util_html_encode(sprintf(_('Projects that begin with "%s"'),
+ $group_name_search)));
+}
+echo $t->emit();
+
site_admin_footer(array());
-
-// Local Variables:
-// mode: php
-// c-file-style: "bsd"
-// End:
-
-?>
More information about the evolvis-commits
mailing list