<?php
/**
- *
- * Project Admin Main Page
- *
- * This page contains administrative information for the project as well
- * as allows to manage it. This page should be accessible to all project
- * members, but only admins may perform most functions.
- *
- * SourceForge: Breaking Down the Barriers to Open Source Development
- * Copyright 1999-2001 (c) VA Linux Systems
- * http://sourceforge.net
- *
- * @version $Id$
- *
- */
-
-
-require_once('pre.php');
-require_once('www/project/admin/project_admin_utils.php');
-require_once('common/include/account.php');
-
-session_require(array('group'=>$group_id));
+ * Project Admin Main Page
+ *
+ * This page contains administrative information for the project as well
+ * as allows to manage it. This page should be accessible to all project
+ * members, but only admins may perform most functions.
+ *
+ * Copyright 2004 GForge, LLC
+ *
+ * @author Tim Perdue tim@gforge.org
+ *
+ * This file is part of GForge.
+ *
+ * GForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GForge is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+require_once('../../env.inc.php');
+require_once $gfwww.'include/pre.php';
+require_once $gfwww.'include/role_utils.php';
+require_once $gfwww.'project/admin/project_admin_utils.php';
+require_once $gfcommon.'include/GroupJoinRequest.class.php';
+
+$group_id = getIntFromRequest('group_id');
+session_require(array('group'=>$group_id,'admin_flags'=>'A'));
// get current information
$group =& group_get_object($group_id);
-exit_assert_object($group,'Group');
+if (!$group || !is_object($group)) {
+ exit_error('Error','Could Not Get Group');
+} elseif ($group->isError()) {
+ exit_error('Error',$group->getErrorMessage());
+}
$perm =& $group->getPermission( session_get_user() );
-exit_assert_object($perm,'Permission');
+if (!$perm || !is_object($perm)) {
+ exit_error('Error','Could Not Get Permission');
+} elseif ($perm->isError()) {
+ exit_error('Error',$perm->getErrorMessage());
+}
-// only site admin get access inactive projects
-if (!$group->isActive() && !$perm->isSuperUser()) {
- exit_error('Permission denied', 'Group is inactive.');
+if (!$perm->isAdmin()) {
+ exit_permission_denied();
}
-$is_admin = $perm->isAdmin();
+$group->clearError();
-// Only admin can make modifications via this page
-if ($is_admin && $func) {
- /*
- updating the database
- */
- if ($func=='adduser') {
- /*
- add user to this project
- */
+$adminheadertitle=sprintf(_('Project Admin: %1$s'), $group->getPublicName() );
+project_admin_header(array('title'=>$adminheadertitle, 'group'=>$group->getID()));
+?>
- if (!$group->addUser($form_unix_name)) {
- $feedback .= $group->getErrorMessage();
- } else {
- $feedback = ' User Added Successfully ';
- }
+<table class="my-layout-table">
+ <tr>
+ <td>
- } else if ($func=='rmuser') {
- /*
- remove a user from this group
- */
- if (!$group->removeUser($rm_id)) {
- $feedback .= $group->getErrorMessage();
- } else {
- $feedback = ' User Removed Successfully ';
- }
- }
+<?php echo $HTML->boxTop(_('Misc. Project Information')); ?>
-}
-$group->clearError();
-
-project_admin_header(array('title'=>"Project Admin: ".$group->getPublicName(),'group'=>$group->getID(),'pagename'=>'project_admin','sectionvals'=>array($group->getPublicName())));
+<?php
+ global $sys_use_shell;
+ if ($sys_use_shell) {
+?>
+<p><?php echo _('Group shell (SSH) server: ') ?><strong><?php echo $group->getUnixName().'.'.$GLOBALS['sys_default_domain']; ?></strong></p>
+<p><?php echo _('Group directory on shell server: ') ?><br/><strong><?php echo account_group_homedir($group->getUnixName()); ?></strong></p>
+<p><?php echo _('Project WWW directory on shell server: ') ?><br /><strong><?php echo account_group_homedir($group->getUnixName()).'/htdocs'; ?></strong></p>
+<?php
+ } //end of use_shell condition
+?>
-/*
- Show top box listing trove and other info
-*/
+<?php
+// If this was a submission, make updates
+if (getStringFromRequest('submit')) {
+ $form_group_name = getStringFromRequest('form_group_name');
+ $form_shortdesc = getStringFromRequest('form_shortdesc');
+ $form_homepage = getStringFromRequest('form_homepage');
+ $logo_image_id = getIntFromRequest('logo_image_id');
+ $use_mail = getStringFromRequest('use_mail');
+ $use_survey = getStringFromRequest('use_survey');
+ $use_forum = getStringFromRequest('use_forum');
+ $use_pm = getStringFromRequest('use_pm');
+ $use_scm = getStringFromRequest('use_scm');
+ $use_news = getStringFromRequest('use_news');
+ $use_docman = getStringFromRequest('use_docman');
+ $use_ftp = getStringFromRequest('use_ftp');
+ $use_tracker = getStringFromRequest('use_tracker');
+ $use_frs = getStringFromRequest('use_frs');
+ $use_stats = getStringFromRequest('use_stats');
+ $tags = getStringFromRequest('form_tags');
+ $is_public = getIntFromRequest('is_public');
+ $new_doc_address = getStringFromRequest('new_doc_address');
+ $send_all_docs = getStringFromRequest('send_all_docs');
+
+ $res = $group->update(
+ session_get_user(),
+ $form_group_name,
+ $form_homepage,
+ $form_shortdesc,
+ $use_mail,
+ $use_survey,
+ $use_forum,
+ $use_pm,
+ 1,
+ $use_scm,
+ $use_news,
+ $use_docman,
+ $new_doc_address,
+ $send_all_docs,
+ 100,
+ $use_ftp,
+ $use_tracker,
+ $use_frs,
+ $use_stats,
+ $tags,
+ $is_public
+ );
+
+ //100 $logo_image_id
+
+ if (!$res) {
+ $feedback .= $group->getErrorMessage();
+ } else {
+ $feedback .= _('Project information updated');
+ }
+}
?>
-<TABLE width=100% cellpadding=2 cellspacing=2 border=0>
-<TR valign=top><TD width=50%>
+<form action="<?php echo getStringFromServer('PHP_SELF'); ?>" method="post">
-<?php $HTML->box1_top("Misc. Project Information"); ?>
+<input type="hidden" name="group_id" value="<?php echo $group->getID(); ?>" />
-
-<BR>
-Short Description: <?php echo $group->getDescription(); ?>
-<P>
-Homepage Link: <b><?php echo $group->getHomepage(); ?></b>
-<p>
-Group shell (SSH) server: <b><?php echo $group->getUnixName().'.'.$GLOBALS['sys_default_domain']; ?>
-<p>
-Group directory on shell server: <b><?php echo account_group_homedir($group->getUnixName()); ?>
<p>
-Project WWW directory on shell server <a href="/docman/display_doc.php?docid=774&group_id=1">(how to upload)</a>:
-<b><?php echo account_group_homedir($group->getUnixName()).'/htdocs'; ?>
-
-<P align=center>
-<A HREF="http://<?php echo $GLOBALS['sys_cvs_host']; ?>/cvstarballs/<?php echo $group->getUnixName(); ?>-cvsroot.tar.gz">[ Download Your Nightly CVS Tree Tarball ]</A>
-<P>
-
-<HR NOSHADE>
-<P>
-<H4>Trove Categorization:
-<A href="/project/admin/group_trove.php?group_id=<?php echo $group->getID(); ?>">
-[Edit]</A></H4>
-<P>
-<HR NOSHADE>
-<P>
-<H4>Showing The SourceForge Logo:</H4>
-<p>
-<font size=-1>
-If you use SourceForge services, we ask you to display our logo
-on project homepage, as explained
-<a href="http://sourceforge.net/docman/display_doc.php?docid=790&group_id=1">here
-</a>
-</font>
+<?php echo _('Descriptive Project Name') ?>:<br />
+<input type="text" name="form_group_name" value="<?php echo $group->getPublicName(); ?>" size="40" maxlength="40" />
</p>
-<P>
-<?php
-echo htmlspecialchars('<A href="http://'.$GLOBALS['sys_default_domain'].'">
-<IMG src="http://'.$GLOBALS['sys_default_domain'].'/sflogo.php?group_id='. $group_id .'" width="88" height="31"
-border="0" alt="SourceForge Logo"></A>');
-echo '<P>'.html_image('images/sflogo-88-1.png','88','31',array(),0);
-
-$HTML->box1_bottom();
+<p>
+<?php echo _('Short Description (255 Character Max, HTML will be stripped from this description)') ?>:<br />
+<textarea cols="80" rows="3" name="form_shortdesc">
+<?php echo $group->getDescription(); ?>
+</textarea>
+</p>
-echo '
-</TD><TD> </TD><TD width=50%>';
+<p>
+<?php echo _('Tags (use comma as separator)') ?>:<br />
+<input type="text" name="form_tags" size="100" value="<?php echo $group->getTags(); ?>" />
+</p>
+<p><?php echo _('Trove Categorization: ') ?><a href="/project/admin/group_trove.php?group_id=<?php echo $group->getID(); ?>">[<?php echo _('Edit') ?>]</a></p>
-$HTML->box1_top("Group Members");
+<p>
+<?php echo _('Homepage Link') ?>:<br />
+<input type="text" name="form_homepage" size="100" value="<?php echo $group->getHomePage(); ?>" />
+</p>
-/*
+<?php
+ if ($sys_use_private_project) {
+ echo '<p>' ;
+ echo _('Visibility: ');
+ echo html_build_select_box_from_arrays(
+ array('0','1'),
+ array( _('Private'), _('Public') ),
+ 'is_public', $group->isPublic(), false);
+ } else {
+ echo "<input type=hidden name=\"is_public\" value=\"1\">";
+ }
+?>
- Show the members of this project
+<?php
+// This function is used to render checkboxes below
+function c($v) {
+ if ($v) {
+ return 'checked="checked"';
+ } else {
+ return '';
+ }
+}
+?>
-*/
+<?php
+if($sys_use_mail) {
+?>
+<input type="hidden" name="use_mail" value="<?php echo ($group->usesMail() ? '1' : '0'); ?>" />
+<?php
+}
-$res_memb = db_query("SELECT users.realname,users.user_id,users.user_name,user_group.admin_flags ".
- "FROM users,user_group ".
- "WHERE users.user_id=user_group.user_id ".
- "AND user_group.group_id='$group_id'");
+if($sys_use_survey) {
+?>
+<input type="hidden" name="use_survey" value="<?php echo ($group->usesSurvey() ? '1' : '0'); ?>" />
+<?php
+}
-print '<TABLE WIDTH="100%" BORDER="0">';
+if($sys_use_forum) {
+?>
+<input type="hidden" name="use_forum" value="<?php echo ($group->usesForum() ? '1' : '0'); ?>" />
+<?php
+}
-while ($row_memb=db_fetch_array($res_memb)) {
+if($sys_use_pm) {
+?>
+<input type="hidden" name="use_pm" value="<?php echo ($group->usesPM() ? '1' : '0'); ?>" />
+<?php
+}
- if (stristr($row_memb['admin_flags'], 'A')) {
- $img="trash-x.png";
- } else {
- $img="trash.png";
- }
- if ($is_admin) {
- $button='<INPUT TYPE="IMAGE" NAME="DELETE" SRC="/images/ic/'.$img.'" HEIGHT="16" WIDTH="16" BORDER="0">';
- } else {
- $button=' ';
- }
- print '
- <FORM ACTION="rmuser.php" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="func" VALUE="rmuser">'.
- '<INPUT TYPE="HIDDEN" NAME="return_to" VALUE="'.$REQUEST_URI.'">'.
- '<INPUT TYPE="HIDDEN" NAME="rm_id" VALUE="'.$row_memb['user_id'].'">'.
- '<INPUT TYPE="HIDDEN" NAME="group_id" VALUE="'. $group_id .'">'.
- '<TR><TD ALIGN="MIDDLE">'.$button.'</TD></FORM>'.
- '<TD><A href="/users/'.$row_memb['user_name'].'/">'.$row_memb['realname'].'</A></TD></TR>';
+if($sys_use_scm) {
+?>
+<input type="hidden" name="use_scm" value="<?php echo ($group->usesSCM() ? '1' : '0'); ?>" />
+<?php
}
-print '</TABLE>';
-/*
- Add member form
-*/
+if($sys_use_news) {
+?>
+<input type="hidden" name="use_news" value="<?php echo ($group->usesNews() ? '1' : '0'); ?>" />
+<?php
+}
-if ($is_admin) {
+if($sys_use_docman) {
+?>
+<input type="hidden" name="use_docman" value="<?php echo ($group->usesDocman() ? '1' : '0'); ?>" />
+<?php
+}
- // After adding user, we go to the permission page for one
+if($sys_use_ftp) {
?>
- <HR NoShade SIZE="1">
- <FORM ACTION="userpermedit.php?group_id=<?php echo $group->getID(); ?>" METHOD="POST">
- <INPUT TYPE="hidden" NAME="func" VALUE="adduser">
- <TABLE WIDTH="100%" BORDER="0">
- <TR><TD><B>Unix Name:</B></TD><TD><INPUT TYPE="TEXT" NAME="form_unix_name" SIZE=10 VALUE=""></TD></TR>
- <TR><TD COLSPAN="2" ALIGN="CENTER"><INPUT TYPE="SUBMIT" NAME="submit" VALUE="Add User"></TD></TR></FORM>
- </TABLE>
-
- <HR NoShade SIZE="1">
- <div align="center">
- <A href="/project/admin/userperms.php?group_id=<?php echo $group->getID(); ?>">[Edit Member Permissions]</A>
- </div>
- </TD></TR>
+<input type="hidden" name="use_ftp" value="<?php echo ($group->usesFTP() ? '1' : '0'); ?>" />
+<?php
+}
+if($sys_use_tracker) {
+?>
+<input type="hidden" name="use_tracker" value="<?php echo ($group->usesTracker() ? '1' : '0'); ?>" />
<?php
}
+
+if($sys_use_frs) {
?>
-
-<?php $HTML->box1_bottom();?>
+<input type="hidden" name="use_frs" value="<?php echo ($group->usesFRS() ? '1' : '0'); ?>" />
+<?php } ?>
+<input type="hidden" name="use_stats" value="<?php echo ($group->usesStats() ? '1' : '0'); ?>" />
-</TD></TR>
+<p>
+<?php echo _('If you wish, you can provide default email addresses to which new submissions will be sent') ?>.<br />
+<strong><?php echo _('New Document Submissions') ?>:</strong><br />
+<input type="text" name="new_doc_address" value="<?php echo $group->getDocEmailAddress(); ?>" size="40" maxlength="250" />
+<?php echo _('(send on all updates)') ?>
+<input type="checkbox" name="send_all_docs" value="1" <?php echo c($group->docEmailAll()); ?> />
+</p>
-<TR valign=top><TD width=50%>
+<p>
+<input type="submit" name="submit" value="<?php echo _('Update') ?>" />
+</p>
+
+</form>
<?php
+echo $HTML->boxBottom();
+?>
+ </td>
+ <td> </td>
+ <td>
-/*
- Tool admin pages
-*/
+<?php
-$HTML->box1_top('Tool Admin');
+ echo $HTML->boxTop(_('Project Members'));
-?>
-
-<BR>
-<A HREF="/tracker/admin/?group_id=<?php echo $group->getID(); ?>">Tracker Admin</A><BR>
-<A HREF="/docman/admin/?group_id=<?php echo $group->getID(); ?>">DocManager Admin</A><BR>
-<A HREF="/mail/admin/?group_id=<?php echo $group->getID(); ?>">Mail Admin</A><BR>
-<A HREF="/news/admin/?group_id=<?php echo $group->getID(); ?>">News Admin</A><BR>
-<A HREF="/pm/admin/?group_id=<?php echo $group->getID(); ?>">Task Manager Admin</A><BR>
-<A HREF="/forum/admin/?group_id=<?php echo $group->getID(); ?>">Forum Admin</A><BR>
+ /*
-<?php $HTML->box1_bottom(); ?>
+ Show the members of this project
+ */
+ $res_memb = db_query_params ('SELECT users.realname,users.user_id,users.status,
+ users.user_name,user_group.admin_flags,user_group.role_id
+ FROM users,user_group
+ WHERE users.user_id=user_group.user_id
+ AND user_group.group_id=$1 ORDER BY users.lastname,users.firstname',
+ array ($group_id));
+ echo '
+ <table class="width-100p100">
+ <tr><td><strong>'._('Unix name').'</strong></td>
+ <td><strong>'._('Role').'</strong></td>
+ <td><strong>'._('Update').'</strong></td>
+ <td><strong>'._('Remove').'</strong></td></tr>';
-</TD>
+while ($row_memb=db_fetch_array($res_memb)) {
-<TD> </TD>
+ if ($row_memb['status']=='P') {
+ $status = "<span class=\"pending\">"._("Pending (P)")."</span>";
+ } else if ($row_memb['status']=='S') {
+ $status = "<span class=\"suspended\">"._("Suspended (S)")."</span>";
+ } else {
+ $status = "";
+ }
-<TD width=50%>
+ echo '
+ <form action="'.getStringFromServer('PHP_SELF').'" method="post">
+ <input type="hidden" name="submit" value="y" />
+ <input type="hidden" name="user_id" value="'.$row_memb['user_id'].'" />
+ <input type="hidden" name="group_id" value="'. $group_id .'" />
+ <td>'.$row_memb['realname'].' ('.$row_memb['user_name'].') '.$status.'</td>
+ <td>'.role_box($group_id,'role_id',$row_memb['role_id']).'</td>
+ <td><input type="submit" name="updateuser" value="'._('Update').'"></td>
+ <td><input type="submit" name="rmuser" value="'._('Remove').'"></td>
+ </tr></form>';
+}
+ echo '
+ <tr><td>'._('Observer').'</td>
+ <td></td>
+ <form action="roleedit.php?group_id='. $group_id .'&role_id=observer" method="POST">
+ <td colspan="2"><input type="submit" name="edit" value="'._('Edit Observer').'"></td></form></tr>';
-<?php
/*
- Show filerelease info
+ Add member form
*/
+
?>
+ <form action="<?php echo getStringFromServer('PHP_SELF').'?group_id='.$group_id; ?>" method="post">
+ <input type="hidden" name="submit" value="y" />
+ <tr><td><input type="text" name="form_unix_name" size="10" value="" /></td>
+ <td><?php echo role_box($group_id,'role_id',$row_memb['role_id']); ?></td>
+ <td colspan="2"><input type="submit" name="adduser" value="<?php echo _('Add user') ?>" /></td>
+ </tr></form>
+
+ <tr><td colspan="4"><a href="massadd.php?group_id=<?php echo $group_id; ?>"><?php echo _('Add Users From List'); ?></a></td></tr>
+ </table>
+<!-- </td></tr>
+</td>
+<td width="50%">
+
+</td>-->
+<?php
+//
+// Pending requests
+//
+echo $HTML->boxMiddle(_('Pending Requests'));
+$reqs =& get_group_join_requests($group);
+if (count($reqs) < 1) {
+ echo _('No Pending Requests');
+} else {
+ for ($i=0; $i<count($reqs); $i++) {
+ $user =& user_get_object($reqs[$i]->getUserId());
+ if (!$user || !is_object($user)) {
+ echo "Invalid User";
+ }
+ ?>
+ <table class="width-100p100">
+ <form action="<?php echo getStringFromServer('PHP_SELF').'?group_id='.$group_id; ?>" method="post">
+ <input type="hidden" name="submit" value="y" />
+ <input type="hidden" name="form_userid" value="<?php echo $user->getId(); ?>" />
+ <tr><td><input type="hidden" name="form_unix_name" value="<?php echo $user->getUnixName(); ?>" /><?php echo util_make_link_u ($user->getUnixName(),$user->getId(),$user->getRealName()); ?></td>
+ <td><?php echo role_box($group_id,'role_id',$row_memb['role_id']); ?>
+ <input type="submit" name="acceptpending" value="<?php echo _('Accept') ?>" />
+ <input type="submit" name="rejectpending" value="<?php echo _('Reject') ?>" /></td>
+ </tr></form>
+ </table>
+
+ <?php
+ }
+}
-<?php $HTML->box1_top("File Releases"); ?>
- <BR>
- <CENTER>
- <A href="editpackages.php?group_id=<?php print $group_id; ?>"><B>[Edit/Add File Releases]</B></A>
- </CENTER>
- <HR>
- <B>Packages:</B> <A href="/docman/display_doc.php?docid=780&group_id=1"><i>What is this?</i></A> (Very Important!)
+//
+// RBAC Editing Functions
+//
+echo $HTML->boxMiddle(_('Edit Roles'));
+echo '<form action="roleedit.php?group_id='. $group_id .'" method="POST">';
+echo role_box($group_id,'role_id','');
+echo '<input type="submit" name="edit" value="'._('Edit Role').'"></form>';
- <P>
+echo '<p><a href="roleedit.php?group_id='.$group_id.'">'._('Add Role').'</a>';
- <?php
+//
+// Project hierarchy functions
+
+plugin_hook('admin_project_link',$group_id) ;
- $res_module = db_query("SELECT * FROM frs_package WHERE group_id='$group_id'");
- while ($row_module = db_fetch_array($res_module)) {
- print "$row_module[name]<BR>";
- }
- echo $HTML->box1_bottom();
- ?>
-</TD>
-</TR>
-</TABLE>
+echo $HTML->boxBottom();?>
+
+ </td>
+ </tr>
+
+</table>
<?php
project_admin_footer(array());
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
?>