3 * GForge Project Management Facility
5 * Copyright 2002 GForge, LLC
12 By Tim Perdue, Sourceforge, 11/99
13 Heavy rewrite by Tim Perdue April 2000
15 Total rewrite in OO and GForge coding guidelines 12/2002 by Tim Perdue
18 require_once('../../env.inc.php');
19 require_once $gfwww.'include/pre.php';
20 require_once $gfwww.'pm/include/ProjectGroupHTML.class.php';
21 require_once $gfcommon.'pm/ProjectGroupFactory.class.php';
22 require_once $gfcommon.'pm/ProjectCategory.class.php';
24 if (!session_loggedin()) {
28 $group_id = getIntFromRequest('group_id');
29 $group_project_id = getIntFromRequest('group_project_id');
35 $g =& group_get_object($group_id);
36 if (!$g || !is_object($g)) {
38 } elseif ($g->isError()) {
39 exit_error('Error',$g->getErrorMessage());
42 $perm =& $g->getPermission( session_get_user() );
44 $update_cat = getStringFromRequest('update_cat');
45 $add_cat = getStringFromRequest('add_cat');
46 $delete = getStringFromRequest('delete');
47 $id = getIntFromRequest('id');
49 if (getStringFromRequest('post_changes')) {
53 $pg = new ProjectGroup($g,$group_project_id);
54 if (!$pg || !is_object($pg)) {
55 exit_error('Error','Unable to create ProjectCategory Object');
56 } elseif ($pg->isError()) {
57 exit_error('Error',$pg->getErrorMessage());
60 if (getStringFromRequest('addproject')) {
61 $project_name = getStringFromRequest('project_name');
62 $description = getStringFromRequest('description');
63 $is_public = getStringFromRequest('is_public');
64 $send_all_posts_to = getStringFromRequest('send_all_posts_to');
69 if (!$perm->isPMAdmin()) {
70 exit_permission_denied();
72 if (!$pg->create($project_name,$description,$is_public,$send_all_posts_to)) {
73 exit_error('Error',$pg->getErrorMessage());
75 $feedback .= _('Subproject Inserted');
76 $feedback .= '<br />';
77 $feedback .= _("Please configure also the roles (by default, it's 'No Access')");
80 } else if ($add_cat) {
81 $name = getStringFromRequest('name');
84 Add a project_category
86 if (!$pg->userIsAdmin()) {
87 exit_permission_denied();
90 $pc = new ProjectCategory($pg);
91 if (!$pc || !is_object($pc)) {
92 exit_error('Error','Unable to create ProjectCategory Object');
94 if (!$pc->create($name)) {
95 exit_error('Error','Error inserting: '.$pc->getErrorMessage());
97 $feedback .= _('Category Inserted');
101 } else if ($update_cat) {
102 $id = getIntFromRequest('id');
103 $name = getStringFromRequest('name');
106 Update a project_category
108 if (!$pg->userIsAdmin()) {
109 exit_permission_denied();
112 $pc = new ProjectCategory($pg,$id);
113 if (!$pc || !is_object($pc)) {
114 exit_error('Error','Unable to create ProjectCategory Object');
115 } elseif ($pc->isError()) {
116 exit_error('Error',$pc->getErrorMessage());
118 if (!$pc->update($name)) {
119 exit_error('Error','Error updating: '.$pc->getErrorMessage());
121 $feedback .= _('Category Updated');
127 } else if (getStringFromRequest('update_pg')) {
128 $project_name = getStringFromRequest('project_name');
129 $description = getStringFromRequest('description');
130 $send_all_posts_to = getStringFromRequest('send_all_posts_to');
135 if (!$pg->userIsAdmin()) {
136 exit_permission_denied();
139 if (!$pg->update($project_name,$description,$send_all_posts_to)) {
140 exit_error('Error',$pg->getErrorMessage());
142 $feedback .= _('Updated successfully');
145 } else if ($delete) {
146 $sure = getStringFromRequest('sure');
147 $really_sure = getStringFromRequest('really_sure');
153 if (!$pg->userIsAdmin()) {
154 exit_permission_denied();
157 if (!$pg->delete(getStringFromRequest('sure'),getStringFromRequest('really_sure'))) {
158 exit_error('Error',$pg->getErrorMessage());
160 $feedback .= _('Successfully Deleted');
169 if ($add_cat && $group_project_id) {
171 // FORM TO ADD CATEGORIES
174 $pg = new ProjectGroup($g,$group_project_id);
175 if (!$pg || !is_object($pg)) {
176 exit_error('Error','Unable to create ProjectCategory Object');
177 } elseif ($pg->isError()) {
178 exit_error('Error',$pg->getErrorMessage());
180 if (!$pg->userIsAdmin()) {
181 exit_permission_denied();
184 $title = sprintf(_('Add Categories to: %s'), $pg->getName());
185 pm_header(array ('title'=>$title));
188 List of possible categories for this ArtifactType
190 $result=$pg->getCategories();
192 $rows=db_numrows($result);
193 if ($result && $rows > 0) {
195 $title_arr[]=_('Id');
196 $title_arr[]=_('Title');
198 echo $GLOBALS['HTML']->listTableTop ($title_arr);
200 for ($i=0; $i < $rows; $i++) {
201 echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
202 '<td>'.db_result($result, $i, 'category_id').'</td>'.
203 '<td><a href="'.getStringFromServer('PHP_SELF').'?update_cat=1&id='.
204 db_result($result, $i, 'category_id').'&group_id='.$group_id.'&group_project_id='. $pg->getID() .'">'.
205 db_result($result, $i, 'category_name').'</a></td></tr>';
208 echo $GLOBALS['HTML']->listTableBottom();
211 echo "\n<h3>"._('No categories defined')."</h3>";
216 <form action="<?php echo getStringFromServer('PHP_SELF').'?group_id='.$group_id; ?>" method="post">
217 <input type="hidden" name="add_cat" value="y" />
218 <input type="hidden" name="group_project_id" value="<?php echo $pg->getID(); ?>" />
219 <strong><?php echo _('Category Name') ?>:</strong><br />
220 <input type="text" name="name" value="" size="15" maxlength="30" /><br />
222 <span class="important"><?php echo _('Once you add a category, it cannot be deleted') ?></span>
224 <input type="submit" name="post_changes" value="<?php echo _('Submit') ?>" />
230 } elseif ($update_cat && $group_project_id && $id) {
233 // FORM TO UPDATE CATEGORIES
236 Allow modification of a category
239 $pg = new ProjectGroup($g,$group_project_id);
240 if (!$pg || !is_object($pg)) {
241 exit_error('Error','Unable to create ProjectCategory Object');
242 } elseif ($pg->isError()) {
243 exit_error('Error',$pg->getErrorMessage());
245 if (!$pg->userIsAdmin()) {
246 exit_permission_denied();
248 $title = sprintf(_('Modify a Category in: %s'), $pg->getName());
249 pm_header(array ('title'=>$title));
251 $ac = new ProjectCategory($pg,$id);
252 if (!$ac || !is_object($ac)) {
253 $feedback .= 'Unable to create ProjectCategory Object';
254 } elseif ($ac->isError()) {
255 $feedback .= $ac->getErrorMessage();
259 <form action="<?php echo getStringFromServer('PHP_SELF').'?group_id='.$group_id; ?>" method="post" />
260 <input type="hidden" name="update_cat" value="y" />
261 <input type="hidden" name="id" value="<?php echo $ac->getID(); ?>" />
262 <input type="hidden" name="group_project_id" value="<?php echo $pg->getID(); ?>" />
264 <strong><?php echo _('Category Name')?>:</strong><br />
265 <input type="text" name="name" value="<?php echo $ac->getName(); ?>" />
267 <span class="important"><?php echo _('It is not recommended that you change the category name because other things are dependent upon it. When you change the category name, all related items will be changed to the new name.')?></span>
269 <input type="submit" name="post_changes" value="<?php echo _('Submit') ?>" />
276 } elseif (getStringFromRequest('addproject')) {
278 Create a new subproject
280 if (!$perm->isPMAdmin()) {
281 exit_permission_denied();
284 pm_header(array ('title'=>_('Add a new subproject')));
287 <p><?php echo _('Add a new subproject to the Tasks. <strong>This is different than adding a task to a subproject.</strong>') ?></p>
290 <form action="<?php echo getStringFromServer('PHP_SELF')."?group_id=$group_id"; ?>" method="post">
291 <input type="hidden" name="addproject" value="y" />
292 <input type="hidden" name="post_changes" value="y" />
294 <strong><?php echo _('Is Public?')?></strong><br />
295 <input type="radio" name="is_public" value="1" checked="checked" /><?php echo _('Yes') ?><br />
296 <input type="radio" name="is_public" value="0" /><?php echo _('No') ?><p />
298 <h3><?php echo _('New Subproject Name')?></h3>
300 <input type="text" name="project_name" value="" size="15" maxlength="30" />
302 <strong><?php echo _('Description')?></strong><br />
303 <input type="text" name="description" value="" size="40" maxlength="80" />
305 <strong><?php echo _('Send All Updates To')?>:</strong><br />
306 <input type="text" name="send_all_posts_to" value="" size="40" maxlength="80" /><br />
308 <input type="submit" name="submit" value="<?php echo _('Submit') ?>" />
313 } else if (getStringFromRequest('update_pg') && $group_project_id) {
315 $pg = new ProjectGroup($g,$group_project_id);
316 if (!$pg || !is_object($pg)) {
317 exit_error('Error','Could Not Get ProjectGroup');
318 } elseif ($pg->isError()) {
319 exit_error('Error',$pg->getErrorMessage());
321 if (!$pg->userIsAdmin()) {
322 exit_permission_denied();
325 pm_header(array('title'=>_('Change Tasks Status')));
328 <p><?php echo _('You can modify an existing subproject using this form. Please note that private subprojects can still be viewed by members of your project, but not the general public.') ?></p>
331 <form action="<?php echo getStringFromServer('PHP_SELF').'?group_id='.$group_id; ?>" method="post">
332 <input type="hidden" name="post_changes" value="y" />
333 <input type="hidden" name="update_pg" value="y" />
334 <input type="hidden" name="group_project_id" value="<?php echo $pg->getID(); ?>" />
338 <strong><?php echo _('Is Public?')?></strong><br />
339 <input type="radio" name="is_public" value="1"<?php echo (($pg->isPublic()=='1')?' checked="checked"':''); ?> /> <?php echo _('Yes') ?><br />
340 <input type="radio" name="is_public" value="0"<?php echo (($pg->isPublic()=='0')?' checked="checked"':''); ?> /> <?php echo _('No') ?><br />
341 <input type="radio" name="is_public" value="9"<?php echo (($pg->isPublic()=='9')?' checked="checked"':''); ?> /> <?php echo _('Deleted')?><br />
345 <td><strong><?php echo _('Subproject Name')?>:</strong><br />
346 <input type="text" name="project_name" value="<?php echo $pg->getName() ?>" />
351 <strong><?php echo _('Description')?>:</strong><br />
352 <input type="text" name="description" value="<?php echo $pg->getDescription(); ?>" size="40" maxlength="80" /><br />
357 <strong><?php echo _('Send All Updates To')?>:</strong><br />
358 <input type="text" name="send_all_posts_to" value="<?php echo $pg->getSendAllPostsTo(); ?>" size="40" maxlength="80" /><br />
363 <strong><a href="<?php echo getStringFromServer('PHP_SELF')."?group_id=$group_id&add_cat=1&group_project_id=".$pg->getID(); ?>"><?php echo _('Add/Edit Categories')?></a></strong><br />
364 <strong><a href="<?php echo getStringFromServer('PHP_SELF')."?group_id=$group_id&delete=1&group_project_id=".$pg->getID(); ?>"><?php echo _('Permanently delete this subproject and all its data.')?></a></strong><br />
369 <input type="submit" name="submit" value="<?php echo _('Update') ?>" />
378 } else if ($delete && $group_project_id) {
381 $pg = new ProjectGroup($g,$group_project_id);
382 if (!$pg || !is_object($pg)) {
383 exit_error('Error','Could Not Get ProjectGroup');
384 } elseif ($pg->isError()) {
385 exit_error('Error',$pg->getErrorMessage());
387 if (!$pg->userIsAdmin()) {
388 exit_permission_denied();
391 pm_header(array('title'=>_('Delete')));
394 <form action="<?php echo getStringFromServer('PHP_SELF').'?group_id='.$group_id.'&group_project_id='.$group_project_id; ?>" method="post">
395 <input type="hidden" name="post_changes" value="y" />
396 <input type="hidden" name="delete" value="y" /><br />
397 <?php echo _('You are about to permanently and irretrievably delete this subproject and all its related data!'); ?>
399 <input type="checkbox" name="sure" value="1" /><?php echo _('I\'m Sure') ?><br />
400 <input type="checkbox" name="really_sure" value="1" /><?php echo _('I\'m Really Sure'); ?>
402 <input type="submit" name="post_changes" value="<?php echo _('Delete') ?>" />
414 pm_header(array('title'=>_('Tasks Administration')));
417 // Show link to create new subproject
419 if ($perm->isPMAdmin()) {
422 <a href="<?php echo getStringFromServer('PHP_SELF').'?group_id='.$group_id; ?>&addproject=1"><?php echo _('Add a Subproject') ?></a><br />
423 <?php echo _('Add a subproject, which can contain a set of tasks. This is different than creating a new task.') ?>
428 $pgf = new ProjectGroupFactory($g);
429 if (!$pgf || !is_object($pgf)) {
430 exit_error('Error','Could Not Get Factory');
431 } elseif ($pgf->isError()) {
432 exit_error('Error',$pgf->getErrorMessage());
435 $pg_arr =& $pgf->getProjectGroups();
437 if (count($pg_arr) < 1 || $pg_arr == false) {
438 echo _('<h2>No Subprojects Found in this Project</h2><p>You may add new Subprojects using the "Add a Subproject" link above.</p>');
441 for ($i=0; $i<count($pg_arr); $i++) {
442 echo '<a href="'. getStringFromServer('PHP_SELF').'?group_id='.$group_id.'&group_project_id='.$pg_arr[$i]->getID().'&update_pg=1">'._('Edit/Update Subproject').': <strong>'.$pg_arr[$i]->getName().'</strong></a><p />';