3 // SourceForge: Breaking Down the Barriers to Open Source Development
4 // Copyright 1999-2000 (c) The SourceForge Crew
5 // http://sourceforge.net
9 require_once('pre.php');
10 require_once('common/tracker/Artifact.class');
11 require_once('common/tracker/ArtifactFile.class');
12 require_once('www/tracker/include/ArtifactFileHtml.class');
13 require_once('common/tracker/ArtifactType.class');
14 require_once('www/tracker/include/ArtifactTypeHtml.class');
15 require_once('www/tracker/include/ArtifactHtml.class');
16 require_once('common/tracker/ArtifactGroup.class');
17 require_once('common/tracker/ArtifactCategory.class');
18 require_once('common/tracker/ArtifactCanned.class');
19 require_once('common/tracker/ArtifactResolution.class');
21 if ($group_id && $atid) {
24 // UPDATING A PARTICULAR ARTIFACT TYPE
28 // get the Group object
30 $group =& group_get_object($group_id);
31 if (!$group || !is_object($group) || $group->isError()) {
35 $perm =& $group->getPermission( session_get_user() );
37 if (!$perm || !is_object($perm) || !$perm->isArtifactAdmin()) {
38 exit_permission_denied();
42 // Create the ArtifactType object
44 $ath = new ArtifactTypeHtml($group,$atid);
45 if (!$ath || !is_object($ath)) {
46 exit_error('Error','ArtifactType could not be created');
48 if ($ath->isError()) {
49 exit_error('Error',$ath->getErrorMessage());
55 // Update the database
60 $ac = new ArtifactCategory($ath);
61 if (!$ac || !is_object($ac)) {
62 $feedback .= 'Unable to create ArtifactCategory Object';
63 // } elseif ($ac->isError()) {
64 // $feedback .= $ac->getErrorMessage();
66 if (!$ac->create($name,$assign_to)) {
67 $feedback .= ' Error inserting: '.$ac->getErrorMessage();
70 $feedback .= ' Category Inserted ';
74 } elseif ($add_group) {
76 $ag = new ArtifactGroup($ath);
77 if (!$ag || !is_object($ag)) {
78 $feedback .= 'Unable to create ArtifactGroup Object';
79 // } elseif ($ag->isError()) {
80 // $feedback .= $ag->getErrorMessage();
82 if (!$ag->create($name)) {
83 $feedback .= ' Error inserting: '.$ag->getErrorMessage();
86 $feedback .= ' Group Inserted ';
90 } elseif ($add_canned) {
92 $acr = new ArtifactCanned($ath);
93 if (!$acr || !is_object($acr)) {
94 $feedback .= 'Unable to create ArtifactCanned Object';
95 // } elseif ($acr->isError()) {
96 // $feedback .= $acr->getErrorMessage();
98 if (!$acr->create($title,$body)) {
99 $feedback .= ' Error inserting: '.$acr->getErrorMessage();
102 $feedback .= ' Canned Response Inserted ';
106 } elseif ($add_users) {
109 // if "add all" option, get list of group members
110 // who are not already members of this ArtifactType
113 $sql="SELECT u.user_id
114 FROM users u,user_group ug
115 WHERE u.user_id=ug.user_id
116 AND ug.group_id='$group_id'
117 AND NOT EXISTS (SELECT user_id FROM artifact_perm ap
118 WHERE ap.group_artifact_id='$atid'
119 AND ap.user_id=u.user_id);";
120 $addids=util_result_column_to_array(db_query($sql));
122 $count=count($addids);
123 for ($i=0; $i<$count; $i++) {
124 $ath->addUser($addids[$i]);
126 if ($ath->isError()) {
127 $feedback .= $ath->getErrorMessage();
130 $feedback .= ' User(s) Added ';
132 //go to the perms page
136 } elseif ($update_users) {
139 // Handle the 2-D array of user_id/permission level
141 $count=count($updateids);
142 for ($i=0; $i<$count; $i++) {
143 $ath->updateUser($updateids[$i][0],$updateids[$i][1]);
145 if ($ath->isError()) {
146 $feedback .= $ath->getErrorMessage();
149 $feedback .= ' User(s) Updated ';
153 // Delete the checked ids
155 $count=count($deleteids);
156 for ($i=0; $i<$count; $i++) {
157 $ath->deleteUser($deleteids[$i]);
159 if ($ath->isError()) {
160 $feedback .= $ath->getErrorMessage();
163 $feedback .= ' User(s) Deleted ';
166 } elseif ($update_canned) {
168 $acr = new ArtifactCanned($ath,$id);
169 if (!$acr || !is_object($acr)) {
170 $feedback .= 'Unable to create ArtifactCanned Object';
171 } elseif ($acr->isError()) {
172 $feedback .= $acr->getErrorMessage();
174 if (!$acr->update($title,$body)) {
175 $feedback .= ' Error updating: '.$acr->getErrorMessage();
178 $feedback .= ' Canned Response Updated ';
179 $update_canned=false;
184 } elseif ($update_cat) {
186 $ac = new ArtifactCategory($ath,$id);
187 if (!$ac || !is_object($ac)) {
188 $feedback .= 'Unable to create ArtifactCategory Object';
189 } elseif ($ac->isError()) {
190 $feedback .= $ac->getErrorMessage();
192 if (!$ac->update($name,$assign_to)) {
193 $feedback .= ' Error updating: '.$ac->getErrorMessage();
196 $feedback .= ' Category Updated ';
202 } elseif ($update_group) {
204 $ag = new ArtifactGroup($ath,$id);
205 if (!$ag || !is_object($ag)) {
206 $feedback .= 'Unable to create ArtifactGroup Object';
207 } elseif ($ag->isError()) {
208 $feedback .= $ag->getErrorMessage();
210 if (!$ag->update($name)) {
211 $feedback .= ' Error updating: '.$ag->getErrorMessage();
214 $feedback .= ' Group Updated ';
220 } elseif ($update_type) {
222 if (!$ath->update($name,$description,$is_public,$allow_anon,$email_all,$email_address,
223 $due_period,$status_timeout,$use_resolution,$submit_instructions,$browse_instructions)) {
224 $feedback .= ' Error updating: '.$ath->getErrorMessage();
227 $feedback .= ' Tracker Updated ';
236 // FORMS TO ADD/UPDATE DATABASE
242 // FORM TO ADD CATEGORIES
244 $ath->adminHeader(array ('title'=>'Add Categories to: '.$ath->getName()));
246 echo "<H1>Add Categories to: ". $ath->getName() ."</H1>";
249 List of possible categories for this ArtifactType
251 $result=$ath->getCategories();
253 $rows=db_numrows($result);
254 if ($result && $rows > 0) {
257 $title_arr[]='Title';
259 echo html_build_list_table_top ($title_arr);
261 for ($i=0; $i < $rows; $i++) {
262 echo '<TR BGCOLOR="'. html_get_alt_row_color($i) .'">'.
263 '<TD>'.db_result($result, $i, 'id').'</TD>'.
264 '<TD><A HREF="'.$PHP_SELF.'?update_cat=1&id='.
265 db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
266 db_result($result, $i, 'category_name').'</A></TD></TR>';
270 echo "\n<H1>No categories defined</H1>";
274 <FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
275 <INPUT TYPE="HIDDEN" NAME="add_cat" VALUE="y">
276 <B>New Category Name:</B><BR>
277 <INPUT TYPE="TEXT" NAME="name" VALUE="" SIZE="15" MAXLENGTH="30"><BR>
279 <B>Auto-Assign To:</B><BR>
280 <?php echo $ath->technicianBox('assign_to'); ?>
282 <B><FONT COLOR="RED">Once you add a category, it cannot be deleted</FONT></B>
284 <INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
288 $ath->footer(array());
290 } elseif ($add_group) {
294 $ath->adminHeader(array ('title'=>'Add/Change Groups to: '.$ath->getName(),'pagename'=>'tracker_admin_add_group','titlevals'=>array($ath->getName())));
297 List of possible groups for this ArtifactType
299 $result=$ath->getGroups();
301 $rows=db_numrows($result);
302 if ($result && $rows > 0) {
305 $title_arr[]='Title';
307 echo html_build_list_table_top ($title_arr);
309 for ($i=0; $i < $rows; $i++) {
310 echo '<TR BGCOLOR="'. html_get_alt_row_color($i) .'">'.
311 '<TD>'.db_result($result, $i, 'id').'</TD>'.
312 '<TD><A HREF="'.$PHP_SELF.'?update_group=1&id='.
313 db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
314 db_result($result, $i, 'group_name').'</A></TD></TR>';
318 echo "\n<H1>No groups defined</H1>";
322 <FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
323 <INPUT TYPE="HIDDEN" NAME="add_group" VALUE="y">
324 <B>New group Name:</B><BR>
325 <INPUT TYPE="TEXT" NAME="name" VALUE="" SIZE="15" MAXLENGTH="30"><BR>
327 <B><FONT COLOR="RED">Once you add a group, it cannot be deleted</FONT></B>
329 <INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
333 $ath->footer(array());
335 } elseif ($add_canned) {
337 // FORM TO ADD CANNED RESPONSES
339 $ath->adminHeader(array ('title'=>'Add/Change Canned Responses to: '.$ath->getName()));
341 echo "<H1>Add Canned Responses to: ". $ath->getName() ."</H1>";
344 List of existing canned responses
346 $result=$ath->getCannedResponses();
347 $rows=db_numrows($result);
350 if ($result && $rows > 0) {
351 //code to show existing responses and link to update page
353 <H2>Existing Responses:</H2>
357 $title_arr[]='Title';
359 echo html_build_list_table_top ($title_arr);
361 for ($i=0; $i < $rows; $i++) {
362 echo '<TR BGCOLOR="'. html_get_alt_row_color($i) .'">'.
363 '<TD>'.db_result($result, $i, 'id').'</TD>'.
364 '<TD><A HREF="'.$PHP_SELF.'?update_canned=1&id='.
365 db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
366 db_result($result, $i, 'title').'</A></TD></TR>';
371 echo "\n<H1>No responses set up in this group</H1>";
375 Creating useful generic messages can save you a lot of time when
376 handling common artifact requests.
378 <FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
379 <INPUT TYPE="HIDDEN" NAME="add_canned" VALUE="y">
381 <INPUT TYPE="TEXT" NAME="title" VALUE="" SIZE="50" MAXLENGTH="50">
383 <B>Message Body:</B><BR>
384 <TEXTAREA NAME="body" ROWS="30" COLS="65" WRAP="HARD"></TEXTAREA>
386 <INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
390 $ath->footer(array());
392 } elseif ($update_users) {
394 // FORM TO ADD/UPDATE USERS
397 $ath->adminHeader(array ('title'=>'Add/Update Users in: '.$ath->getName(),'pagename'=>'tracker_admin_update_users','titlevals'=>array($ath->getName())));
399 $sql="SELECT * FROM artifactperm_user_vw WHERE group_artifact_id='". $ath->getID() ."'";
402 if (!$res || db_numrows($res) < 1) {
403 echo '<H2>No Developers Found</H2>';
407 Each tracker that you define has separate user lists and user permissions.
409 Simply add developers to this tracker, then update their permissions.
411 <dt><B>Technicians</B></dt>
412 <dd>can be assigned items</dd>
414 <dt><B>Admins</B></dt>
415 <dd>can make changes to items</dd>
417 <FORM action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
418 <INPUT TYPE="HIDDEN" NAME="update_users" VALUE="y">
426 echo html_build_list_table_top($arr);
430 // PHP4 allows multi-dimensional arrays to be passed in from form elements
432 while ($row_dev = db_fetch_array($res)) {
434 <INPUT TYPE="HIDDEN" NAME="updateids['.$i.'][0]" VALUE="'.$row_dev['user_id'].'">
435 <TR BGCOLOR="'. html_get_alt_row_color($i) .'">
436 <TD><INPUT TYPE="CHECKBOX" NAME="deleteids[]" VALUE="'.$row_dev['user_id'].'"> Delete</TD>
438 <TD>'.$row_dev['realname'].' ( '. $row_dev['user_name'] .' )</TD>
440 <TD><FONT size="-1"><SELECT name="updateids['.$i.'][1]">
441 <OPTION value="0"'.(($row_dev['perm_level']==0)?" selected":"").'>-
442 <OPTION value="1"'.(($row_dev['perm_level']==1)?" selected":"").'>Technician
443 <OPTION value="2"'.(($row_dev['perm_level']==2)?" selected":"").'>Tech & Admin
444 <OPTION value="3"'.(($row_dev['perm_level']==3)?" selected":"").'>Admin Only
445 </SELECT></FONT></TD>
450 echo '<TR><TD COLSPAN=3 ALIGN=MIDDLE><INPUT type="submit" name="post_changes" value="Update Developer Permissions">
456 <h3>Add These Users:</H3>
458 You can pick and choose users for your tracker, or simply add them all by checking "Add All Users".
461 <FORM action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
462 <INPUT TYPE="HIDDEN" NAME="add_users" VALUE="y">
464 $sql="SELECT u.user_id, u.realname
465 FROM users u,user_group ug
466 WHERE u.user_id=ug.user_id
467 AND ug.group_id='$group_id'
468 AND NOT EXISTS (SELECT user_id FROM artifact_perm ap
469 WHERE ap.group_artifact_id='$atid'
470 AND ap.user_id=u.user_id);";
474 echo html_build_multiple_select_box ($res,'addids[]',array(),8,false);
476 <INPUT type="submit" name="post_changes" value="Add Users"> <INPUT type="checkbox" name="add_all"> Add All Users
480 $ath->footer(array());
482 } elseif ($update_canned) {
484 // FORM TO UPDATE CANNED MESSAGES
486 $ath->adminHeader(array ('title'=>'Update Canned Responses in: '.$ath->getName()));
488 echo "<H1>Update Canned Responses ". $ath->getName() ."</H1>";
490 $acr = new ArtifactCanned($ath,$id);
491 if (!$acr || !is_object($acr)) {
492 $feedback .= 'Unable to create ArtifactCanned Object';
493 } elseif ($acr->isError()) {
494 $feedback .= $acr->getErrorMessage();
498 Creating useful generic messages can save you a lot of time when
499 handling common requests.
501 <FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
502 <INPUT TYPE="HIDDEN" NAME="update_canned" VALUE="y">
503 <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?php echo $acr->getID(); ?>">
505 <INPUT TYPE="TEXT" NAME="title" VALUE="<?php echo $acr->getTitle(); ?>" SIZE="50" MAXLENGTH="50">
507 <B>Message Body:</B><BR>
508 <TEXTAREA NAME="body" ROWS="30" COLS="65" WRAP="HARD"><?php echo $acr->getBody(); ?></TEXTAREA>
510 <INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
514 $ath->footer(array());
516 } elseif ($update_cat) {
518 // FORM TO UPDATE CATEGORIES
521 Allow modification of a artifact category
523 $ath->adminHeader(array('title'=>'Change an Category in: '.$ath->getName()));
526 <H1>Modify an Category in: '. $ath->getName() .'</H1>';
528 $ac = new ArtifactCategory($ath,$id);
529 if (!$ac || !is_object($ac)) {
530 $feedback .= 'Unable to create ArtifactCategory Object';
531 } elseif ($ac->isError()) {
532 $feedback .= $ac->getErrorMessage();
536 <FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
537 <INPUT TYPE="HIDDEN" NAME="update_cat" VALUE="y">
538 <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?php echo $ac->getID(); ?>">
540 <B>Category Name:</B><BR>
541 <INPUT TYPE="TEXT" NAME="name" VALUE="<?php echo $ac->getName(); ?>">
543 <B>Auto-Assign To:</B><BR>
544 <?php echo $ath->technicianBox('assign_to',$ac->getAssignee()); ?>
546 <B><FONT COLOR="RED">It is not recommended that you change the artifact
547 category name because other things are dependent upon it. When you change
548 the category name, all related items will be changed to the new name.</FONT></B>
550 <INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
555 $ath->footer(array());
557 } elseif ($update_group) {
559 // FORM TO UPDATE GROUPS
562 Allow modification of a artifact group
564 $ath->adminHeader(array('title'=>'Change a Group in: '.$ath->getName(),'pagename'=>'tracker_admin_update_group','titlevals'=>array($ath->getName())));
566 $ag = new ArtifactGroup($ath,$id);
567 if (!$ag || !is_object($ag)) {
568 $feedback .= 'Unable to create ArtifactGroup Object';
569 } elseif ($ag->isError()) {
570 $feedback .= $ag->getErrorMessage();
574 <FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
575 <INPUT TYPE="HIDDEN" NAME="update_group" VALUE="y">
576 <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?php echo $ag->getID(); ?>">
578 <B>Group Name:</B><BR>
579 <INPUT TYPE="TEXT" NAME="name" VALUE="<?php echo $ag->getName(); ?>">
581 <B><FONT COLOR="RED">It is not recommended that you change the artifact
582 group name because other things are dependent upon it. When you change
583 the group name, all related items will be changed to the new name.</FONT></B>
585 <INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
590 $ath->footer(array());
592 } elseif ($update_type) {
594 // FORM TO UPDATE ARTIFACT TYPES
596 $ath->adminHeader(array ('title'=>'Tracker Administration: '.$ath->getName(),'pagename'=>'tracker_admin_update_type','titlevals'=>array($ath->getName())));
600 <FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" METHOD="POST">
601 <INPUT TYPE="HIDDEN" NAME="update_type" VALUE="y">
603 <B>Name:</B> (examples: meeting minutes, test results, RFP Docs)<BR>
604 <?php if ($ath->getDataType()) {
605 echo $ath->getName();
608 <INPUT TYPE="TEXT" NAME="name" VALUE="<?php echo $ath->getName(); ?>">
613 <B>Description:</B><BR>
614 <?php if ($ath->getDataType()) {
615 echo $ath->getDescription();
618 <INPUT TYPE="TEXT" NAME="description" VALUE="<?php echo $ath->getDescription(); ?>" SIZE="50">
623 <INPUT TYPE=CHECKBOX NAME="is_public" VALUE="1" <?php echo (($ath->isPublic())?'CHECKED':''); ?>> <B>Publicly Available</B><BR>
624 <INPUT TYPE=CHECKBOX NAME="allow_anon" VALUE="1" <?php echo (($ath->allowsAnon())?'CHECKED':''); ?>> <B>Allow non-logged-in postings</B><BR>
625 <INPUT TYPE=CHECKBOX NAME="use_resolution" VALUE="1" <?php echo (($ath->useResolution())?'CHECKED':''); ?>> <B>Display the "Resolution" box</B>
627 <B>Send email on new submission to address:</B><BR>
628 <INPUT TYPE="TEXT" NAME="email_address" VALUE="<?php echo $ath->getEmailAddress(); ?>">
630 <INPUT TYPE=CHECKBOX NAME="email_all" VALUE="1" <?php echo (($ath->emailAll())?'CHECKED':''); ?>> <B>Send email on all changes</B><BR>
632 <B>Days till considered overdue:</B><BR>
633 <INPUT TYPE="TEXT" NAME="due_period" VALUE="<?php echo ($ath->getDuePeriod() / 86400); ?>">
635 <B>Days till pending tracker items time out:</B><BR>
636 <INPUT TYPE="TEXT" NAME="status_timeout" VALUE="<?php echo($ath->getStatusTimeout() / 86400); ?>">
638 <B>Free form text for the "submit new item" page:</B><BR>
639 <TEXTAREA NAME="submit_instructions" ROWS="10" COLS="55" WRAP="HARD"><?php echo $ath->getSubmitInstructions(); ?></TEXTAREA>
641 <B>Free form text for the "browse items" page:</B><BR>
642 <TEXTAREA NAME="browse_instructions" ROWS="10" COLS="55" WRAP="HARD"><?php echo $ath->getBrowseInstructions(); ?></TEXTAREA>
644 <INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
648 $ath->footer(array());
652 // SHOW LINKS TO FEATURES
655 $ath->adminHeader(array ('title'=>'Tracker Administration: '.$ath->getName(),'pagename'=>'tracker_admin','titlevals'=>array($ath->getName())));
658 <A HREF="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_cat=1"><B>Add/Update Categories</B></A><BR>
659 Add categories like, \'mail module\',\'gant chart module\',\'cvs\', etc<P>';
661 <A HREF="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_group=1"><B>Add/Update Groups</B></A><BR>
662 Add groups like, \'v1.2\',\'unsupported\',\'unverified\', etc<P>';
664 <A HREF="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_canned=1"><B>Add/Update Canned Responses</B></A><BR>
665 Create/Change generic response messages for the tracker.<P>';
667 <A HREF="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&update_users=1"><B>Add/Update Users & Permissions</B></A><BR>
668 Add/remove users to/from this tracker.<P>';
670 <A HREF="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&update_type=1"><B>Update preferences</B></A><BR>
671 Set up prefs like expiration times, email addresses, etc.<P>';
673 $ath->footer(array());
676 } elseif ($group_id) {
679 // get the Group object
681 $group =& group_get_object($group_id);
682 if (!$group || !is_object($group) || $group->isError()) {
686 $perm =& $group->getPermission( session_get_user() );
688 if (!$perm || !is_object($perm) || !$perm->isArtifactAdmin()) {
689 exit_permission_denied();
694 $res=new ArtifactTypeHtml($group);
695 if (!$res->create($name,$description,$is_public,$allow_anon,$email_all,$email_address,
696 $due_period,$use_resolution,$submit_instructions,$browse_instructions)) {
697 $feedback .= $res->getErrorMessage();
699 header ("Location: /tracker/admin/?group_id=$group_id&atid=".$res->getID()."&update_users=1");
705 $sql="SELECT * FROM artifact_group_list WHERE group_id='$group_id' ORDER BY group_artifact_id";
707 //required params for site_project_header();
708 $params['group']=$group_id;
709 $params['toptab']='tracker';
710 $params['pagename']='tracker_admin_choose';
712 echo site_project_header($params);
713 echo '<B><A HREF="/tracker/admin/?group_id='.$group_id.'">Admin</A></B><P>';
715 $result = db_query ($sql);
716 $rows = db_numrows($result);
717 if (!$result || $rows < 1) {
718 echo "<H1>No Trackers Found</H1>";
724 Choose a data type and you can set up prefs, categories, groups, users, and permissions.
728 Put the result set (list of forums for this group) into a column with folders
731 for ($j = 0; $j < $rows; $j++) {
733 <A HREF="/tracker/admin/?atid='.db_result($result, $j, 'group_artifact_id').
734 '&group_id='.$group_id.'">' .
735 html_image("images/ic/index.png","15","13",array("BORDER"=>"0")) . ' '.
736 db_result($result, $j, 'name').'</A><BR>'.
737 db_result($result, $j, 'description').'<P>';
742 <H3>Create a new tracker</H3>
744 You can use this system to track virtually any kind of data, with each
745 tracker having separate user, group, category, and permission lists. You
746 can also easily move items between trackers when needed.
748 Trackers are referred to as "Artifact Types" and individual pieces of data
749 are "Artifacts". "Bugs" might be an Artifact Type, whiles a bug report would be
750 an Artifact. You can create as many Artifact Types as you want, but remember
751 you need to set up categories, groups, and permission for each type, which
752 can get time-consuming.
754 <FORM ACTION="<?php echo $PHP_SELF.'?group_id='.$group_id; ?>" METHOD="POST">
755 <INPUT TYPE="HIDDEN" NAME="add_at" VALUE="y">
757 <B>Name:</B> (examples: meeting minutes, test results, RFP Docs)<BR>
758 <INPUT TYPE="TEXT" NAME="name" VALUE="">
760 <B>Description:</B><BR>
761 <INPUT TYPE="TEXT" NAME="description" VALUE="" SIZE="50">
763 <INPUT TYPE=CHECKBOX NAME="is_public" VALUE="1"> <B>Publicly Available</B><BR>
764 <INPUT TYPE=CHECKBOX NAME="allow_anon" VALUE="1"> <B>Allow non-logged-in postings</B><BR>
765 <INPUT TYPE=CHECKBOX NAME="use_resolution" VALUE="1"> <B>Display the "Resolution" box</B>
767 <B>Send email on new submission to address:</B><BR>
768 <INPUT TYPE="TEXT" NAME="email_address" VALUE="">
770 <INPUT TYPE=CHECKBOX NAME="email_all" VALUE="1"> <B>Send email on all changes</B><BR>
772 <B>Days till considered overdue:</B><BR>
773 <INPUT TYPE="TEXT" NAME="due_period" VALUE="30">
775 <B>Days till pending tracker items time out:</B><BR>
776 <INPUT TYPE="TEXT" NAME="status_timeout" VALUE="14">
778 <B>Free form text for the "submit new item" page:</B><BR>
779 <TEXTAREA NAME="submit_instructions" ROWS="10" COLS="55" WRAP="HARD"></TEXTAREA>
781 <B>Free form text for the "browse items" page:</B><BR>
782 <TEXTAREA NAME="browse_instructions" ROWS="10" COLS="55" WRAP="HARD"></TEXTAREA>
784 <INPUT TYPE="SUBMIT" NAME="post_changes" VALUE="SUBMIT">
788 echo site_project_footer(array());
792 //browse for group first message