[evolvis-commits] r10039: Massive tracker reorg and cleanup↵

mirabilos at evolvis.org mirabilos at evolvis.org
Thu Feb 24 17:36:28 CET 2011


Author: mirabilos
Date: 2011-02-24 17:36:28 +0100 (Thu, 24 Feb 2011)
New Revision: 10039

Added:
   trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactExtraField.class
   trunk/gforge_base/evolvisforge-5.1/gforge/db/20041006.sql
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addcanned.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addcategory.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addextrafield.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addextrafieldoption.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addgroup.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-deletetracker.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-extrafieldcopy.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatecanned.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatecategory.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updateextrafield.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updateextrafieldelement.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updategroup.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatetracker.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/ind.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/tracker.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/updates.php
Removed:
   trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactSelectionBox.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/massupdate-fields.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/update-fields.php
Modified:
   trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog
   trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/Artifact.class
   trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactType.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/html.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/Base.tab
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/index.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/browse.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/detail.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/include/ArtifactTypeHtml.class
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/ind.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod-limited.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/tracker.php
Log:
Massive tracker reorg and cleanup


Modified: trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog	2011-02-24 16:36:28 UTC (rev 10039)
@@ -1,5 +1,10 @@
-2004-08-26  Tony Pugliese <lpajp at pacbell.net>
+2004-10-06  Tim Perdue <tim at gforge.org>
 
+	* massive cleanup/reorg/rewrite of bug tracker, including renaming
+	and rebuilding the "unlimited fields" code
+
+2004-10-05  Tony Pugliese <lpajp at pacbell.net>
+
 	* Nice Patch to clone categories in tracker.
 
 2004-10-05  Guillaume Smet <guillaume-gforge at smet.org>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/Artifact.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/Artifact.class	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/Artifact.class	2011-02-24 16:36:28 UTC (rev 10039)
@@ -77,9 +77,9 @@
 	/**
 	 * Array of artifact data for extra fields defined by Admin.
 	 *
-	 * @var		array	$data_extra_field_array.
+	 * @var		array	$extra_field_data.
 	 */
-	var $data_extra_field_array;
+	var $extra_field_data;
 
 	/**
 	 * Array of ArtifactFile objects.
@@ -152,10 +152,10 @@
 	 *	@param	string	Details of the artifact.
 	 *	@param	int		The ID of the user to which this artifact is to be assigned.
 	 *	@param	int		The artifacts priority.
-	 *	@param	string	An email address to add to the monitoring queue.
+	 *	@param	array	Array of extra fields like: array(15=>'foobar',22=>'1');
 	 *  @return id on success / false on failure.
 	 */
-	function create($category_id, $artifact_group_id, $summary, $details, $assigned_to=100, $priority=5, $monitor_email=false) {
+	function create($category_id, $artifact_group_id, $summary, $details, $assigned_to=100, $priority=5, $extra_fields=array()) {
 		global $Language;
 		
 		//
@@ -268,8 +268,12 @@
 			if (!$this->fetchData($artifact_id)) {
 				db_rollback();
 				return false;
+			} else {
+				if (!$this->updateExtraFields($extra_fields)) {
+					db_rollback();
+					return false;
+				}
 			}
-
 			//
 			//	now send an email if appropriate
 			//
@@ -279,35 +283,7 @@
 			return $artifact_id;
 		}
 	}
-	/**
-	 *
-	 * 	createExtraFields - adds a row in the table used to 
-	 *	store the id of a value for an artifact field.
-	 *	This function is only used for data that 
-	 *	applies to additional fields and boxes configured by the admin.
-	 *
-	 *	@param 	int 	id of the field that contains the data
-	 *	@return 	id on success / false on failure
-	 */
-	function createExtraFields($choice_id){
-		$this->choice_id=$choice_id;
-		$res=db_query("INSERT INTO artifact_extra_field_data
-			(artifact_id, choice_id)
-			VALUES
-			('".$this->getID()."',$this->choice_id)");
-					
-		if (!$res) {
-			$this->setError('Artifact: '.db_error());
-			db_rollback();
-			return false;
-		}
-
-		return $choice_id;
 	
-	}
-	
-
-	
 	/**
 	 *	fetchData - re-fetch the data for this Artifact from the database.
 	 *
@@ -390,15 +366,6 @@
 	}
 
 	/**
-	 *	getExtraFieldID - get choice_id flag.
-	 *
-	 *	@return int choice_id.
-	 */
-	function getExtraFieldID() {
-		return $this->data_extra_field_array['choice_id'];
-	}
-
-	/**
 	 *	getCategoryName - get category text name.
 	 *
 	 *	@return	string	The category name.
@@ -748,10 +715,11 @@
 	 *	@param	int		The canned response.
 	 *	@param	string	Attaching another comment.
 	 *	@param	int		Allows you to move an artifact to another type.
+	 *	@param	array	Array of extra fields like: array(15=>'foobar',22=>'1');
 	 *	@return	boolean	success.
 	 */
 	function update($priority,$status_id,$category_id,$artifact_group_id,$resolution_id,
-		$assigned_to,$summary,$canned_response,$details,$new_artifact_type_id) {
+		$assigned_to,$summary,$canned_response,$details,$new_artifact_type_id,$extra_fields=array()) {
 
 		global $Language;
 		if (!$this->getID() 
@@ -908,10 +876,17 @@
 				return false;
 			} else {
 				$this->fetchData($this->getID());
-//error check the data fetching??
+//TODO error check the data fetching??
 			}
 		}
 
+		//extra field handling
+		$update=true;
+		if (!$this->updateExtraFields($extra_fields)) {
+//TODO - see if anything actualyl did change
+			db_rollback();
+			return false;
+		}
 		/*
 			handle canned responses
 
@@ -957,65 +932,81 @@
 	}
 
 	/**
-	 * 	updateExtraFields - updates the id of a value in the 
-	 *	table used to store the id's of values for artifact fields. 
-	 *	This function is only used for data that 
-	 *	applies to additional fields and boxes configured by the admin.
+	 * 	updateExtraFields - updates the extra data elements for this artifact
+	 *	e.g. the extra fields created and defined by the admin.
 	 *
-	 *	@param 	int 	id of the artifact
-	 *	@param	int	id of the field that contains the data 
+	 *	@param	array	Array of extra fields like: array(15=>'foobar',22=>'1');
 	 *	@return true on success / false on failure
-	 *
 	 */
-	function updateExtraFields($id,$choice_id){
-			
-		$res=db_query("UPDATE artifact_extra_field_data
-			SET
-			choice_id='$choice_id'
-			WHERE
-			id='$id'");
-	
-			
-		if (!$res) {
-			$this->setError('Artifact: '.db_error());
-			db_rollback();
-			return false;
+	function updateExtraFields($extra_fields){
+		if (empty($extra_fields)) {
+			return true;
 		}
+		//get a list of extra fields for this artifact_type
+		$ef =& $this->ArtifactType->getExtraFields();
 
+		//now we'll update this artifact for each extra field
+		for ($i=0; $i<count($ef); $i++) {
+			//
+			//	First we want to get old value of this element
+			//
+			$res=db_query("SELECT field_data FROM artifact_extra_field_data
+				WHERE
+				artifact_id='".$this->getID()."'
+				AND extra_field_id='".$ef[$i]['extra_field_id']."'");
+			//	make sure we have a corresponding row in 
+			//	artifact_extra_field_data - if not we'll create one
+			if ($res && db_numrows($res) > 0) {
+
+				// if this field changed, update the db
+				if (addslashes(db_result($res,0,'field_data')) != htmlspecialchars($extra_fields[$ef[$i]['extra_field_id']])) {
+//TODO add history
+					$res=db_query("UPDATE artifact_extra_field_data
+						SET
+						field_data='".$extra_fields[$ef[$i]['extra_field_id']]."'
+						WHERE
+						artifact_id='".$this->getID()."'
+						AND extra_field_id='".$ef[$i]['extra_field_id']."'");
+					if (!$res) {
+						$this->setError('Artifact::updateExtraFields:: '.db_error());
+						return false;
+					}
+				}
+			} else {
+				//insert a fresh row since one does not exist for this extra field yet
+				$res=db_query("INSERT INTO artifact_extra_field_data (artifact_id,extra_field_id,field_data) 
+					values ('".$this->getID()."','".$ef[$i]['extra_field_id']."','".htmlspecialchars($extra_fields[$ef[$i]['extra_field_id']])."')");
+					if (!$res) {
+						$this->setError('Artifact::updateExtraFields:: '.db_error());
+						return false;
+					}
+			}
+		}
+		unset($this->extra_field_data);
 		return true;
 	}
 
 	/**
+	 *	getExtraFieldData - get an array of data for the extra fields associated with this artifact
 	 *
-	 *	nullExtraFields - deletes a row in the table used to	
-	 *	store the id's of values for artifact fields.  This function
-	 *	applies to additional fields and boxes configured by the admin.
-	 *
-	 *	@param 	int	id of the artifact
-	 *	@return 	true on success / false on failure
+	 *	@return	array	array of data
 	 */
-	function  nullExtraFields($artifact_id){
-			
-		$res=db_query("DELETE  
-			FROM
-			artifact_extra_field_data
-			WHERE
-			artifact_id='$artifact_id'");
-	
-			
-		if (!$res) {
-			$this->setError('Artifact: '.db_error());
-			db_rollback();
-			return false;
+	function &getExtraFieldData() {
+		if (!isset($this->extra_field_data)) {
+			$res=db_query("SELECT * FROM artifact_extra_field_data 
+				WHERE artifact_id='".$this->getID()."'");
+			while ($arr =& db_fetch_array($res)) {
+				$this->extra_field_data[$arr['extra_field_id']]=$arr['field_data'];
+			}
 		}
-
-		return true;
+		return $this->extra_field_data;
 	}
 
-	
-
-
-	// function which returns proper marker for changed properties
+	/**
+	 *	marker - adds the > symbol to fields that have been modified for the email message
+	 *
+	 *
+	 */
 	function marker($prop_name,$changes) {
 		if ($changes[$prop_name]) {
 			return '>';

Added: trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactExtraField.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactExtraField.class	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactExtraField.class	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,202 @@
+<?php
+/**
+ * ArtifactExtraField.class - Class to handle user defined artifacts
+ *
+ * Copyright 2004 (c) Anthony J. Pugliese
+ *
+ * @version   $Id$
+ *
+ * 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  US
+ */
+require_once('common/include/Error.class');
+
+define('ARTIFACT_EXTRAFIELDTYPE_SELECT',1);
+define('ARTIFACT_EXTRAFIELDTYPE_RADIO',3);
+define('ARTIFACT_EXTRAFIELDTYPE_TEXT',4);
+//define('ARTIFACT_EXTRAFIELDTYPE_CHECKBOX',2);
+//define('ARTIFACT_EXTRAFIELDTYPE_MULTISELECT',5);
+define('ARTIFACT_EXTRAFIELDTYPE_TEXTAREA',6);
+
+class ArtifactExtraField extends Error {
+
+	/** 
+	 * The artifact type object.
+	 *
+	 * @var		object	$ArtifactType.
+	 */
+	var $ArtifactType; //object
+
+	/**
+	 * Array of artifact data.
+	 *
+	 * @var		array	$data_array.
+	 */
+	var $data_array;
+
+	/**
+	 *	ArtifactExtraField - Constructer
+	 *
+	 *	@param	object	ArtifactType object.
+	 *  @param	array	(all fields from artifact_file_user_vw) OR id from database.
+	 *  @return	boolean	success.
+	 */
+	function ArtifactExtraField(&$ArtifactType, $data=false) {
+		$this->Error(); 
+
+		//was ArtifactType legit?
+		if (!$ArtifactType || !is_object($ArtifactType)) {
+			$this->setError('ArtifactExtraField: No Valid ArtifactType');
+			return false;
+		}
+		//did ArtifactType have an error?
+		if ($ArtifactType->isError()) {
+			$this->setError('ArtifactExtraField: '.$Artifact->getErrorMessage());
+			return false;
+		}
+		$this->ArtifactType =& $ArtifactType;
+
+		if ($data) {
+			if (is_array($data)) {
+				$this->data_array =& $data;
+				return true;
+			} else {
+				if (!$this->fetchData($data)) {
+					return false;
+				} else {
+					return true;
+				}
+			}
+		}
+	}
+
+	/**
+	 *	create - create a row in the table that stores box names for a
+	 *	a tracker.  This function is only used to create rows for boxes 
+	 *	configured by the admin.
+	 *
+	 *	@param	string	Name of the box.
+	 *  @return 	true on success / false on failure.
+	 */
+	function create($name) {
+		global $Language;
+		
+		//
+		//	data validation
+		//
+		if (!$name) {
+			$this->setError($Language->getText('tracker_admin_build_boxes','required_box_name'));
+			return false;
+		}
+		if (!$this->ArtifactType->userIsAdmin()) {
+			$this->setPermissionDeniedError();
+			return false;
+		}
+		$sql="INSERT INTO artifact_extra_field_list (group_artifact_id,field_name) 
+			VALUES ('".$this->ArtifactType->getID()."','".htmlspecialchars($name)."')";
+
+		$result=db_query($sql);
+
+		if ($result && db_affected_rows($result) > 0) {
+			$this->clearError();
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+			//
+			//	Now set up our internal data structures
+			//
+			if (!$this->fetchData($id)) {
+				return false;
+			} 
+
+	}
+	/**
+	 *	fetchData - re-fetch the data for this ArtifactExtraField from the database.
+	 *
+	 *	@param	int		ID of the Box.
+	 *	@return	boolean	success.
+	 */
+	function fetchData($id) {
+		$this->id=$id;
+		$res=db_query("SELECT * FROM artifact_extra_field_list WHERE extra_field_id='$id'");
+		
+		if (!$res || db_numrows($res) < 1) {
+			$this->setError('ArtifactExtraField: Invalid ArtifactExtraField ID');
+			return false;
+		}
+		$this->data_array =& db_fetch_array($res);
+		db_free_result($res);
+		return true;
+	}
+
+	/**
+	 *	getArtifactType - get the ArtifactType Object this ArtifactExtraField is associated with.
+	 *
+	 *	@return object	ArtifactType.
+	 */
+	function &getArtifactType() {
+		return $this->ArtifactType;
+	}
+	
+	/**
+	 *	getID - get this ArtifactExtraField ID.
+	 *
+	 *	@return	int	The id #.
+	 */
+	function getID() {
+		return $this->data_array['extra_field_id'];
+	}
+
+	/**
+	 *	getName - get the name.
+	 *
+	 *	@return	string	The name.
+	 */
+	function getName() {
+		return $this->data_array['field_name'];
+	}
+
+	/**
+	 *  update - update a row in the table used to store box names 
+	 *  for a tracker.  This function is only to update rowsf
+	 *  for boxes configured by
+	 *  the admin.
+	 *
+	 *  @param	string	Name of the box.
+	 *  @return	boolean	success.
+	 */
+	function update($name) {
+		if (!$this->ArtifactType->userIsAdmin()) {
+			$this->setPermissionDeniedError();
+			return false;
+		}   
+		$sql="UPDATE artifact_extra_field_list 
+			SET field_name='".htmlspecialchars($name)."' 
+			WHERE extra_field_id='". $this->getID() ."' 
+			AND group_artifact_id='".$this->ArtifactType->getID()."'";
+		$result=db_query($sql);
+		if ($result && db_affected_rows($result) > 0) {
+			return true;
+		} else {
+			$this->setError(db_error());
+			return false;
+		}
+	}
+}
+
+?>

Deleted: trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactSelectionBox.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactSelectionBox.class	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactSelectionBox.class	2011-02-24 16:36:28 UTC (rev 10039)
@@ -1,197 +0,0 @@
-<?php
-/**
- * ArtifactSelectionBox.class - Class to handle user defined artifacts
- *
- * Copyright 2004 (c) Anthony J. Pugliese
- *
- * @version   $Id$
- *
- * 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  US
- */
-require_once('common/include/Error.class');
-
-class ArtifactSelectionBox extends Error {
-
-	/** 
-	 * The artifact type object.
-	 *
-	 * @var		object	$ArtifactType.
-	 */
-	var $ArtifactType; //object
-
-	/**
-	 * Array of artifact data.
-	 *
-	 * @var		array	$data_array.
-	 */
-	var $data_array;
-
-	/**
-	 *	ArtifactSelectionBox - Constructer
-	 *
-	 *	@param	object	ArtifactType object.
-	 *  @param	array	(all fields from artifact_file_user_vw) OR id from database.
-	 *  @return	boolean	success.
-	 */
-	function ArtifactSelectionBox(&$ArtifactType, $data=false) {
-		$this->Error(); 
-
-		//was ArtifactType legit?
-		if (!$ArtifactType || !is_object($ArtifactType)) {
-			$this->setError('ArtifactSelectionBox: No Valid ArtifactType');
-			return false;
-		}
-		//did ArtifactType have an error?
-		if ($ArtifactType->isError()) {
-			$this->setError('ArtifactSelectionBox: '.$Artifact->getErrorMessage());
-			return false;
-		}
-		$this->ArtifactType =& $ArtifactType;
-
-		if ($data) {
-			if (is_array($data)) {
-				$this->data_array =& $data;
-				return true;
-			} else {
-				if (!$this->fetchData($data)) {
-					return false;
-				} else {
-					return true;
-				}
-			}
-		}
-	}
-
-	/**
-	 *	create - create a row in the table that stores box names for a
-	 *	a tracker.  This function is only used to create rows for boxes 
-	 *	configured by the admin.
-	 *
-	 *	@param	string	Name of the box.
-	 *  @return 	true on success / false on failure.
-	 */
-	function create($name) {
-		global $Language;
-		
-		//
-		//	data validation
-		//
-		if (!$name) {
-			$this->setError($Language->getText('tracker_admin_build_boxes','required_box_name'));
-			return false;
-		}
-		if (!$this->ArtifactType->userIsAdmin()) {
-			$this->setPermissionDeniedError();
-			return false;
-		}
-		$sql="INSERT INTO artifact_group_selection_box_list (group_artifact_id,selection_box_name) 
-			VALUES ('".$this->ArtifactType->getID()."','".htmlspecialchars($name)."')";
-
-		$result=db_query($sql);
-
-		if ($result && db_affected_rows($result) > 0) {
-			$this->clearError();
-			return true;
-		} else {
-			$this->setError(db_error());
-			return false;
-		}
-			//
-			//	Now set up our internal data structures
-			//
-			if (!$this->fetchData($id)) {
-				return false;
-			} 
-
-	}
-	/**
-	 *	fetchData - re-fetch the data for this ArtifactSelectionBox from the database.
-	 *
-	 *	@param	int		ID of the Box.
-	 *	@return	boolean	success.
-	 */
-	function fetchData($id) {
-		$this->id=$id;
-		$res=db_query("SELECT * FROM artifact_group_selection_box_list WHERE id='$id'");
-		
-		if (!$res || db_numrows($res) < 1) {
-			$this->setError('ArtifactSelectionBox: Invalid Artifact ID');
-			return false;
-		}
-		$this->data_array =& db_fetch_array($res);
-		db_free_result($res);
-		return true;
-	}
-
-	/**
-	 *	getArtifactType - get the ArtifactType Object this ArtifactSelectionBox is associated with.
-	 *
-	 *	@return object	ArtifactType.
-	 */
-	function &getArtifactType() {
-		return $this->ArtifactType;
-	}
-	
-	/**
-	 *	getID - get this ArtifactSelectionBox ID.
-	 *
-	 *	@return	int	The id #.
-	 */
-	function getID() {
-		return $this->data_array['id'];
-	}
-
-	/**
-	 *	getName - get the name.
-	 *
-	 *	@return	string	The name.
-	 */
-	function getName() {
-		return $this->data_array['selection_box_name'];
-	}
-
-
-	/**
-	 *  update - update a row in the table used to store box names 
-	 *  for a tracker.  This function is only to update rowsf
-	 *  for boxes configured by
-	 *  the admin.
-	 *
-	 *  @param	string	Name of the box.
-	 *  @return	boolean	success.
-	 */
-	function update($name) {
-		if (!$this->ArtifactType->userIsAdmin()) {
-			$this->setPermissionDeniedError();
-			return false;
-		}   
-		$sql="UPDATE artifact_group_selection_box_list 
-			SET selection_box_name='".htmlspecialchars($name)."' 
-			WHERE id='". $this->getID() ."' 
-			AND group_artifact_id='".$this->ArtifactType->getID()."'";
-		$result=db_query($sql);
-		if ($result && db_affected_rows($result) > 0) {
-			return true;
-		} else {
-			$this->setError(db_error());
-			return false;
-		}
-	}
-}
-
-?>
-

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactType.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactType.class	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/tracker/ArtifactType.class	2011-02-24 16:36:28 UTC (rev 10039)
@@ -63,18 +63,18 @@
 	var $Group; //group object
 
 	/**
-	 * Selection boxes db resource ID.
+	 * extra_fields 3d array - the IDs and Names of the extra fields
 	 *
-	 * @var		int		$selection_boxes_res.
+	 * @var		array extra_fields;
 	 */
-	var $selection_boxes_res;
+	var $extra_fields;
 
 	/**
-	 * Box options  db resource ID.
+	 * extra_field[extra_field_id] array - the IDs and Names of elements on the extra fields
 	 *
-	 * @var		int		$box_options_res.
+	 * @var		array	extra_field
 	 */
-	var $box_options_res;
+	var $extra_field;
 	
 	/**
 	 * Options	db resource ID.
@@ -454,151 +454,78 @@
 	}
 
 	/**
-	 *	getSelectionBoxes - List of possible user built selection 
-	 *	boxes set up for this artifact type.
+	 *	getExtraFields - List of possible user built extra fields
+	 *	set up for this artifact type.
 	 *
 	 *	@return database result set.
 	 */
-	function getSelectionBoxes() {
-		if (!isset($this->selection_boxes_res)) {
-			$sql="select id,selection_box_name
-				FROM artifact_group_selection_box_list 
+	function getExtraFields() {
+		if (!isset($this->extra_fields)) {
+			$sql="select *
+				FROM artifact_extra_field_list 
 				WHERE group_artifact_id='".$this->getID() ."'
-				ORDER BY id";
-			$this->selection_boxes_res=db_query($sql);
+				ORDER BY field_type ASC";
+			$res=db_query($sql);
+			$i=0;
+			while($arr =& db_fetch_array($res)) {
+				$this->extra_fields[$i++] = $arr;
+			}
 		}
-		return $this->selection_boxes_res;
+		return $this->extra_fields;
 	}
 
 	/**
-	 *	getBoxName - Get a box name using the box ID 
+	 *	getExtraFieldName - Get a box name using the box ID 
 	 *
-	 *	@param  int 	id of a box
-	 *	@return database result set.
+	 *	@param  int 	id of an extra field.
+	 *	@return string	name of extra field.
 	 */
-	function getBoxName($box_id) {
-		$this->box=$box_id;
-		if (!isset($this->selection_boxes_res)) {
-			$sql="select selection_box_name
-				FROM artifact_group_selection_box_list 
-				WHERE id='".$this->box."'
-				AND group_artifact_id='".$this->getID()."'";
-			$this->selection_boxes_res=db_query($sql);
-		}
-		return $this->selection_boxes_res;
+	function getExtraFieldName($box_id) {
+		$arr =& $this->getExtraFields();
+		return $arr['extra_field_id']['field_name'];
 	}
 
-
 	/**
-	 *	getBoxEntry - Get a box fields using the box ID 
+	 *	getExtraFieldElements - List of possible admin configured 
+	 *	extra field elements. This function is used to 
+	 *	present the boxes and choices on the main Add/Update page.
 	 *
-	 *	@param  int 	id of a box
-	 *	@return database result set.
+	 *	@param	int	id of the extra field
+	 *	@return array of elements for this extra field.
 	 */
-	function getBoxEntry($box_id) {
-		$this->box=$box_id;
-		if (!isset($this->selection_boxes_res)) {
-			$sql="SELECT *
-				FROM artifact_group_selection_box_list 
-				WHERE id='".$this->box."'
-				";
-			$this->selection_boxes_res=db_query($sql);
+	function getExtraFieldElements($id) {
+//TODO validate $id
+		if (!$id) {
+			return false;
 		}
-		return $this->selection_boxes_res;
+		if (!isset($this->extra_field[$id])) {
+			$sql="select element_id,element_name
+				FROM artifact_extra_field_elements
+				WHERE extra_field_id ='".$id."'  
+				ORDER BY element_name";
+			$res=db_query($sql);
+			$i=0;
+			while($arr =& db_fetch_array($res)) {
+				$this->extra_field[$id][$i++] = $arr;
+			}
+		}
+		return $this->extra_field[$id];
 	}
 
-
 	/**
-	 *	getSelectionBoxOptions - List of possible admin configured 
-	 *	choices for a selection box. This function is used to 
-	 *	present the boxes 
-	 * 	and choices on the main Add/Update page.
+	 *	getElementName - get the name of a particular element.
 	 *
-	 *	@param	int	id of the selection box
-	 *	@return database result set.
+	 *	@return	string	The name.
 	 */
-	function getSelectionBoxOptions($box) {
-		$this->box=$box;
-		$sql="select id,box_options_name
-			FROM artifact_group_selection_box_options
-			WHERE artifact_box_id ='".$this->box."'  
-			ORDER BY box_options_name";
-		$this->box_options_res=db_query($sql);
-		return $this->box_options_res;
-	}	
-
-	/**
-	 *	getBoxOptions - List of possible admin configured selection 
-	 *	choices for a single selection box.  This function is used
-	 *	to display choices when updating.
-	 *
-	 *	@return database result set.
-	 */
-	function getBoxOptions() {
-		$sql="select id,artifact_box_id,box_options_name
-			FROM artifact_group_selection_box_options
-			WHERE EXISTS (SELECT id FROM artifact_group_selection_box_list 
-			WHERE group_artifact_id='".$this->getID()."'
-			AND artifact_group_selection_box_list.id = artifact_group_selection_box_options.artifact_box_id)
-			ORDER BY box_options_name";
-		$this->box_options_res=db_query($sql);
-		return $this->box_options_res;
-	
+	function getElementName($choiceid) {
+		$sql="select element_id,extra_field_id,element_name
+			FROM artifact_extra_field_elements
+			WHERE element_id ='$choiceid'";
+		$res=db_query($sql);
+		return db_result($res,0,'element_name');
 	}
 
-
 	/**
-	 *	getBoxOptionName - List the name admin configured selection 
-	 *	choices for a single selection box.  This function is used
-	 *	copying choices.
-	 *
-	 *	@return database result set.
-	 */
-	function getBoxOptionName($choiceid) {
-		$this->choiceid = $choiceid;
-		$sql="select id,artifact_box_id,box_options_name
-			FROM artifact_group_selection_box_options
-			WHERE id ='".$this->choiceid."'";
-		$this->box_options_res=db_query($sql);
-		return $this->box_options_res;
-	
-	}
-
-	/**
-	 *	getArtifactChoices - This function is used to get a list the 
-	 *	fields in an artifact from the table of choices that is build 
-	 *	by submiting/updating new artifacts.
-	 *	
-	 *	@param	int	id of the artifact.
-	 *	@return 	databse result set.
-	 */
-	function getArtifactChoices($artifact_id){
-		$this->choice=$artifact_id;
-		$sql="select id,artifact_id,choice_id
-			FROM artifact_extra_field_data
-			WHERE artifact_id='".$this->choice."'
-			ORDER BY id";
-		$this->choice_res=db_query($sql);
-		return $this->choice_res;
-	}
-
-	/**
-	 *	getBoxOptionName - This function is used to get a name of 
-	 *	a choice for a box.
-	 *
-	 *	@param	int	id of the choice.
-	 *	@return 	database result set.
-	 */
-	function getBoxOptionsName($choice_id) {
-		$this->choice = $choice_id;
-		$sql="select id, box_options_name
-			FROM artifact_group_selection_box_options 
-			WHERE id = '".$this->choice."'";
-		$this->options_res=db_query($sql);
-		return $this->options_res;
-	}
-
-	/**
 	 *	delete - delete this tracker and all its related data.
 	 *
 	 *	@param	bool	I'm Sure.
@@ -619,15 +546,12 @@
 			WHERE EXISTS (SELECT artifact_id FROM artifact 
 			WHERE group_artifact_id='".$this->getID()."'
 			AND artifact.artifact_id=artifact_extra_field_data.artifact_id)");
-			
-		db_query("DELETE FROM artifact_group_selection_box_options
-			WHERE EXISTS (SELECT id FROM artifact_group_selection_box_list 
+		db_query("DELETE FROM artifact_extra_field_elements
+			WHERE EXISTS (SELECT extra_field_id FROM artifact_extra_field_list 
 			WHERE group_artifact_id='".$this->getID()."'
-			AND artifact_group_selection_box_list.id = artifact_group_selection_box_options.artifact_box_id)");
-
-		db_query ("DELETE FROM artifact_group_selection_box_list
+			AND artifact_extra_field_list.extra_field_id = artifact_extra_field_elements.extra_field_id)");
+		db_query ("DELETE FROM artifact_extra_field_list
 			WHERE group_artifact_id='".$this->getID()."'");
-
 		db_query("DELETE FROM artifact_canned_responses 
 			WHERE group_artifact_id='".$this->getID()."'");
 //echo '1'.db_error();

Added: trunk/gforge_base/evolvisforge-5.1/gforge/db/20041006.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/db/20041006.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/db/20041006.sql	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,24 @@
+ALTER TABLE artifact_group_selection_box_list RENAME TO artifact_extra_field_list;
+ALTER TABLE artifact_extra_field_list RENAME COLUMN selection_box_name TO field_name;
+ALTER TABLE artifact_extra_field_list ADD COLUMN field_type INT;
+ALTER TABLE artifact_extra_field_list ALTER COLUMN field_type SET DEFAULT 1;
+ALTER TABLE artifact_extra_field_list ADD COLUMN attribute1 INT;
+ALTER TABLE artifact_extra_field_list ALTER COLUMN attribute1 SET DEFAULT 0;
+ALTER TABLE artifact_extra_field_list ADD COLUMN attribute2 INT;
+ALTER TABLE artifact_extra_field_list ALTER COLUMN attribute2 SET DEFAULT 0;
+UPDATE artifact_extra_field_list SET field_type=1,attribute1=0,attribute2=0; --set all to pop-up box
+
+ALTER TABLE artifact_group_selection_box_options RENAME TO artifact_extra_field_elements;
+ALTER TABLE artifact_extra_field_elements RENAME COLUMN box_options_name TO element_name;
+
+ALTER TABLE artifact_extra_field_data ADD COLUMN field_data text;
+UPDATE artifact_extra_field_data SET field_data=choice_id;
+ALTER TABLE artifact_extra_field_data DROP COLUMN choice_id;
+ALTER TABLE artifact_extra_field_data ADD COLUMN extra_field_id int;
+ALTER TABLE artifact_extra_field_data ALTER COLUMN extra_field_id SET DEFAULT 0;
+update artifact_extra_field_data SET extra_field_id=0;
+
+ALTER TABLE artifact_extra_field_list RENAME COLUMN id TO extra_field_id;
+ALTER TABLE artifact_extra_field_elements RENAME COLUMN artifact_box_id TO extra_field_id;
+ALTER TABLE artifact_extra_field_elements RENAME COLUMN id TO element_id;
+ALTER TABLE artifact_extra_field_data RENAME COLUMN id TO data_id;

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/html.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/html.php	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/html.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -372,8 +372,7 @@
 }
 
 /**
- * html_build_multiple_select_box_from_arrays() - Takes a result set, with the first column being the "id" or value
- * and the second column being the text you want displayed.
+ * html_build_multiple_select_box_from_arrays() - Takes two arrays and builds a multi-select box
  *
  * @param		array	id of the field  
  * @param		array	Text to be displayed
@@ -382,11 +381,11 @@
  * @param		int		The size of this box
  * @param		bool	Whether or not to show the '100 row'
  */
-function html_build_multiple_select_box_from_arrays($result,$name,$fieldid,$field,$select,$checked_array,$size='8',$show_100=true) {
+function html_build_multiple_select_box_from_arrays($ids,$texts,$name,$checked_array,$size='8',$show_100=true) {
 	global $Language;
 	$checked_count=count($checked_array);
 	$return .='
-		<select name="'.$select.'" multiple="multiple" size="'.$size.'">';
+		<select name="'.$name.'" multiple="multiple" size="'.$size.'">';
 	if ($show_100) {
 		/*
 			Put in the default NONE box
@@ -401,21 +400,21 @@
 		$return .= '>'.$Language->getText('include_html','none').'</option>';
 	}
 
-	$rows=count($result);
+	$rows=count($ids);
 	for ($i=0; $i<$rows; $i++) {
-		if (( $result[$i] != '100') || ($result[$i] == '100' && !$show_100)) {
+		if (( $ids[$i] != '100') || ($ids[$i] == '100' && !$show_100)) {
 			$return .=' 
-				<option value="'.$fieldid[$i].'"';
+				<option value="'.$ids[$i].'"';
 			/*
 				Determine if it's checked
 			*/
-			$val=$result[$i];
+			$val=$ids[$i];
 			for ($j=0; $j<$checked_count; $j++) {
 				if ($val == $checked_array[$j]) {
 					$return .= ' selected="selected"';
 				}
 			}
-			$return .= '>'.$result[$i].'-'. $name[$i].': '. $fieldid[$i].'-'.$field[$i].' </option>';
+			$return .= '>'.$ids[$i].'-'.$texts[$i].' </option>';
 		}
 	}
 	$return .= '

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/Base.tab
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/Base.tab	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/languages/Base.tab	2011-02-24 16:36:28 UTC (rev 10039)
@@ -2693,39 +2693,40 @@
 tracker_admin_add_users	title	Add/Update Tracker User Permissions to $1
 tracker_admin_add_users	update_permissions	Update Developer Permissions
 tracker_admin_add_users	user_name	User Name
-tracker_admin_build_boxes	title	 Add/Update Pop-Up Boxes and Choices
-tracker_admin_build_boxes	opt_title	Add/Update Pop-Up Box Choices in: $1
+tracker_admin_build_boxes	title	 Add/Update Extra Fields
+tracker_admin_build_boxes	edit	Edit
+tracker_admin_build_boxes	opt_title	Add/Update Extra Field Elements in: $1
 tracker_admin_build_boxes	box_add_choices	add choices
 tracker_admin_build_boxes	tracker_box_id	ID
 tracker_admin_build_boxes	tracker_choice_id	ID
-tracker_admin_build_boxes	tracker_box_title	Boxes Defined
+tracker_admin_build_boxes	tracker_box_title	Extra Fields Defined
 tracker_admin_build_boxes	tracker_box_option_add	Add/Update 
-tracker_admin_build_boxes	tracker_box_option_title	Choices Defined
-tracker_admin_build_boxes	box_name	Box Name
-tracker_admin_build_boxes	opt_add_name	Add New Choice
-tracker_admin_build_boxes	choice_warning	Once you add a new choice, it cannot be deleted
-tracker_admin_build_boxes	box_warning	Once you add a new box, it cannot be deleted
-tracker_admin_build_boxes	required_box_name	a box name is required
-tracker_admin_build_boxes	required_choice_name	a choice name is required
-tracker_admin_build_boxes	no_box	You have not defined any boxes
-tracker_admin_build_boxes	no_choice	You have not defined any choices
-tracker_admin_build_boxes	error_inserting_box	Error inserting a box name
-tracker_admin_build_boxes	error_inserting_choice	Error inserting a choice name
-tracker_admin_build_boxes	box_name_inserted	Box name inserted
-tracker_admin_build_boxes	choice_inserted	Choice inserted
-tracker_admin_build_boxes	box_update_title	Modify a Box In: $1
-tracker_admin_build_boxes	opt_update_title	Modify a Pop-Up Box Choice In: $1
-tracker_admin_build_boxes	opt_name	Choice
+tracker_admin_build_boxes	tracker_box_option_title	Elements Defined
+tracker_admin_build_boxes	box_name	Extra Field Name
+tracker_admin_build_boxes	opt_add_name	Add New Element
+tracker_admin_build_boxes	choice_warning	Once you add a new element, it cannot be deleted
+tracker_admin_build_boxes	box_warning	Once you add a new extra field, it cannot be deleted
+tracker_admin_build_boxes	required_box_name	a field name is required
+tracker_admin_build_boxes	required_choice_name	an element name is required
+tracker_admin_build_boxes	no_box	You have not defined any extra fields
+tracker_admin_build_boxes	no_choice	You have not defined any elements
+tracker_admin_build_boxes	error_inserting_box	Error inserting an extra field
+tracker_admin_build_boxes	error_inserting_choice	Error inserting an element
+tracker_admin_build_boxes	box_name_inserted	Extra field inserted
+tracker_admin_build_boxes	choice_inserted	Element inserted
+tracker_admin_build_boxes	box_update_title	Modify an extra field In: $1
+tracker_admin_build_boxes	opt_update_title	Modify an extra field element In: $1
+tracker_admin_build_boxes	opt_name	Element
 tracker_admin_build_boxes	status_any	Any
-tracker_admin_build_boxes	box_name_updated	Box name updated
-tracker_admin_build_boxes	choice_updated		Choice updated	
-tracker_admin_build_boxes	box_change_warning	It is not recommended that you change the artifact box name because other things are dependent upon it. When you change the box name, all related items will be changed to the new name
-tracker_admin_build_boxes	choice_change_warning	It is not recommended that you change the box choice name because other things are dependent upon it. When you change the box choice name, all related items will be changed to the new name
-tracker_admin_build_boxes	error_updating	Error updating a box name
-tracker_admin_copy	copy_choices	Click here to copy these choices to other trackers
-tracker_admin_copy	choices_title	Copy Choices from Pop-Up Box $1
+tracker_admin_build_boxes	box_name_updated	Extra Field updated
+tracker_admin_build_boxes	choice_updated		Element updated	
+tracker_admin_build_boxes	box_change_warning	It is not recommended that you change the extra field name because other things are dependent upon it. When you change the extra field name, all related items will be changed to the new name
+tracker_admin_build_boxes	choice_change_warning	It is not recommended that you change the element name because other things are dependent upon it. When you change the element name, all related items will be changed to the new name
+tracker_admin_build_boxes	error_updating	Error updating an extra field name
+tracker_admin_copy	copy_choices	Click here to copy these elements to other trackers
+tracker_admin_copy	choices_title	Copy Choices from Extra Field $1
 tracker_admin_copy	from_box	Copy From 
-tracker_admin_copy	into_box	Into Trackers and Boxes
+tracker_admin_copy	into_box	Into Trackers and Extra Fields
 tracker_admin_choose	title	Tracker Admin
 tracker_admin_update_canned	title	Modify Canned Responses In: $1
 tracker_admin_update_cat	auto_assign_to	Auto-Assign To

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addcanned.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addcanned.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addcanned.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,57 @@
+<?php
+//
+//  FORM TO ADD CANNED RESPONSES
+//
+		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_add_canned','title',$ath->getName()).'Add/Change Canned Responses to: '.$ath->getName()));
+
+		echo "<h1>".$Language->getText('tracker_admin_add_canned','title', $ath->getName())."</h1>";
+
+		/*
+			List of existing canned responses
+		*/
+		$result=$ath->getCannedResponses();
+		$rows=db_numrows($result);
+		echo "<p> </p>";
+
+		if ($result && $rows > 0) {
+			//code to show existing responses and link to update page
+			echo '
+			<h2>'.$Language->getText('tracker_admin_add_canned','existing_responses').':</h2>
+			<p> </p>';
+			$title_arr=array();
+			$title_arr[]=$Language->getText('tracker_admin','tracker_id');
+			$title_arr[]=$Language->getText('tracker_admin','tracker_title');
+
+			echo $GLOBALS['HTML']->listTableTop ($title_arr);
+
+			for ($i=0; $i < $rows; $i++) {
+				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
+					'<td>'.db_result($result, $i, 'id').'</td>'.
+					'<td><a href="'.$PHP_SELF.'?update_canned=1&id='.
+						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
+						db_result($result, $i, 'title').'</a></td></tr>';
+			}
+
+			echo $GLOBALS['HTML']->listTableBottom();
+
+		} else {
+			echo "\n<h1>".$Language->getText('tracker_admin_add_canned','no_responses')."</h1>";
+		}
+		?>
+		<p><?php echo $Language->getText('tracker_admin_add_canned','canned_response_info') ?></p>
+		<p>
+		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+		<input type="hidden" name="add_canned" value="y" />
+		<strong><?php echo $Language->getText('tracker_admin_add_canned','canned_response_title') ?>:</strong><br />
+		<input type="text" name="title" value="" size="50" maxlength="50" />
+		<p>
+		<strong><?php echo $Language->getText('tracker_admin_add_canned','canned_response_body') ?>:</strong><br />
+		<textarea name="body" rows="30" cols="65" wrap="hard"></textarea></p>
+		<p>
+		<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
+		</form></p>
+		<?php
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addcategory.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addcategory.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addcategory.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,54 @@
+<?php
+
+//
+//  FORM TO ADD CATEGORIES
+//
+		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_add_cat','title',$ath->getName())));
+
+		echo "<h1>".$Language->getText('tracker_admin_add_cat','title',$ath->getName())."</h1>";
+
+		/*
+			List of possible categories for this ArtifactType
+		*/
+		$result=$ath->getCategories();
+		echo "<p> </p>";
+		$rows=db_numrows($result);
+		if ($result && $rows > 0) {
+			$title_arr=array();
+			$title_arr[]=$Language->getText('tracker_admin','tracker_id');
+			$title_arr[]=$Language->getText('tracker_admin','tracker_title');
+			
+			echo $GLOBALS['HTML']->listTableTop ($title_arr);
+			
+			for ($i=0; $i < $rows; $i++) {
+				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
+					'<td>'.db_result($result, $i, 'id').'</td>'.
+					'<td><a href="'.$PHP_SELF.'?update_cat=1&id='.
+						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
+						db_result($result, $i, 'category_name').'</a></td></tr>';
+			}		   
+
+			echo $GLOBALS['HTML']->listTableBottom();
+
+		} else {
+			echo "\n<h1>".$Language->getText('tracker_admin_add_cat','no_categories')."</h1>";
+		}
+		?>
+		<p>
+		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+		<input type="hidden" name="add_cat" value="y" />
+		<strong><?php echo $Language->getText('tracker_admin','category_name') ?>:</strong><br />
+		<input type="text" name="name" value="" size="15" maxlength="30" /><br />
+		<p>
+		<strong><?php echo $Language->getText('tracker_admin','auto_assign_to') ?>:</strong><br />
+		<?php echo $ath->technicianBox('assign_to'); ?></p>
+		<p>
+		<strong><span style="color:red"><?php echo $Language->getText('tracker_admin','category_add_warning') ?></span></strong></p>
+		<p>
+		<input type="submit" name="post_changes" value="<?php echo$Language->getText('general','submit') ?>" /></p>
+		</form></p>
+		<?php
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addextrafield.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addextrafield.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addextrafield.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,73 @@
+<?php
+//
+//  FORM TO BUILD SELECTION BOXES 
+//
+		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_build_boxes','title',$ath->getName())));
+
+		echo "<h2>".$Language->getText('tracker_admin_build_boxes','title',$ath->getName())."</h2>";
+
+		/*
+			List of possible user built Selection Boxes for an ArtifactType
+		*/
+		$efarr =& $ath->getExtraFields();
+		echo "<br />";
+		$rows=count($efarr);
+		if ($rows > 0) {
+
+			$title_arr=array();
+			$title_arr[]=$Language->getText('tracker_admin_build_boxes','tracker_box_title');
+			$title_arr[]=$Language->getText('tracker_admin_build_boxes','tracker_box_option_title');	
+			echo $GLOBALS['HTML']->listTableTop ($title_arr);
+
+			for ($i=0; $i < $rows; $i++) {
+
+				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
+					'<td><a href="'.$PHP_SELF.'?update_box=1&id='.
+						$efarr[$i]['extra_field_id'].'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
+						$efarr[$i]['field_name'].' ['.$Language->getText('tracker_admin_build_boxes','edit').']</a></td>';
+				/*
+		  			List of possible options for a user built Selection Box
+		  		*/
+				$elearray =& $ath->getExtraFieldElements($efarr[$i]['extra_field_id']);
+				$optrows=count($elearray);
+				if ($optrows > 0) {
+					echo '<td>';
+					for ($j=0; $j <$optrows; $j++)
+				
+						echo '<a href="'.$PHP_SELF.'?update_opt=1&id='.
+						$elearray[$j]['element_id'].'&group_id='.$group_id.'&atid='. $ath->getID() .'&boxid='.
+						$efarr[$i]['extra_field_id'].'">'.
+						$elearray[$j]['element_name'].' ['.$Language->getText('tracker_admin_build_boxes','edit').']</a><br \>';
+
+					} else {
+						echo '<td>';
+				}
+			
+				echo '</td>';
+				echo '<td>';
+				echo '<a href="'.$PHP_SELF.'?add_opt=1&boxid='.
+					$efarr[$i]['extra_field_id'].'&group_id='.$group_id.'&atid='. $ath->getID() .'">['.
+					$Language->getText('tracker_admin_build_boxes', 'box_add_choices').']</a>';
+			}
+			echo   '</tr>';
+			echo $GLOBALS['HTML']->listTableBottom();
+
+		} else { 
+			echo "\n<h3>".$Language->getText('tracker_admin_build_boxes','no_box')."</h3>";
+		}
+		?>
+		<p>
+		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+		<input type="hidden" name="add_extrafield" value="y" />
+		<strong><?php echo $Language->getText('tracker_admin_build_boxes','box_name') ?>:</strong><br />
+		<input type="text" name="name" value="" size="15" maxlength="30" /><br />
+		<p>
+		<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_build_boxes','box_warning') ?></span></strong></p>
+		<p>
+		<input type="submit" name="post_changes" value="<?php echo$Language->getText('general','submit') ?>" /></p>
+		</form></p>
+		<?php
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addextrafieldoption.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addextrafieldoption.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addextrafieldoption.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,56 @@
+<?php
+
+//
+//  FORM TO  ADD BOX CHOICES 
+//
+		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_build_boxes','title')));
+
+		echo "<h3>".$Language->getText('tracker_admin_build_boxes','opt_title',$ath->getName())."</h3>";
+		/*
+		 *	List of possible options for user  
+		 *	  Selection Boxes configured by Admin
+		 */
+		
+		$efearr=$ath->getExtraFieldElements($boxid);
+		echo "<br />";
+		$rows=count($efearr);
+		if ($rows > 0) {
+			
+			echo '<a href="'.$PHP_SELF.'?copy_opt=1&boxid='.$boxid.'&group_id='.
+				$group_id.'&atid='. $ath->getID() .'">'.
+				$Language->getText('tracker_admin_copy','copy_choices'). '</a><p>';
+
+			$title_arr=array();
+			$title_arr[]=$Language->getText('tracker_admin_build_boxes','tracker_box_option_title');
+
+			echo $GLOBALS['HTML']->listTableTop ($title_arr);
+
+			for ($i=0; $i < $rows; $i++) {
+				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
+					'<td><a href="'.$PHP_SELF.'?update_opt=1&id='.
+					$efearr[$i]['element_id'].'&boxid='.			
+					$efearr[$i]['extra_field_id'].'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
+					$efearr[$i]['element_name'].' ['.$Language->getText('tracker_admin_build_boxes','edit').']</a></td>';
+			}		   
+			echo $GLOBALS['HTML']->listTableBottom();
+
+		} else { 
+			echo "\n<h3>".$Language->getText('tracker_admin_build_boxes','no_choice')."</h3>";
+		}
+		?>
+		<p>
+		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&boxid='.$boxid.'&atid='.$ath->getID(); ?>" method="post">
+		<input type="hidden" name="add_opt" value="y" />
+		<strong><?php echo $Language->getText('tracker_admin_build_boxes','opt_add_name') ?>:</strong><br />
+		<input type="text" name="name" value="" size="15" maxlength="30" /> <br \>
+		<p>
+		<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_build_boxes','choice_warning') ?></span></strong></p>
+		<p>
+		<input type="submit" name="post_changes" value="<?php echo$Language->getText('general','submit') ?>" /></p>
+		</form>
+		</p>
+		<?php
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addgroup.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addgroup.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-addgroup.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,48 @@
+<?php
+//
+//  FORM TO ADD GROUP
+//
+		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_add_group','title', $ath->getName()),'pagename'=>'tracker_admin_add_group','titlevals'=>array($ath->getName())));
+
+		/*
+			List of possible groups for this ArtifactType
+		*/
+		$result=$ath->getGroups();
+		echo "<p>";
+		$rows=db_numrows($result);
+		if ($result && $rows > 0) {
+			$title_arr=array();
+			$title_arr[]=$Language->getText('tracker_admin','tracker_id');
+			$title_arr[]=$Language->getText('tracker_admin','tracker_title');
+			
+			echo $GLOBALS['HTML']->listTableTop ($title_arr);
+			
+			for ($i=0; $i < $rows; $i++) {
+				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
+					'<td>'.db_result($result, $i, 'id').'</td>'.
+					'<td><a href="'.$PHP_SELF.'?update_group=1&id='.
+						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
+						db_result($result, $i, 'group_name').'</a></td></tr>';
+			}		   
+
+			echo $GLOBALS['HTML']->listTableBottom();
+
+		} else {
+			echo "\n<h1>".$Language->getText('tracker_admin_add_group','no_groups_defined')."</h1>";
+		}
+		?>
+		<p>
+		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+		<input type="hidden" name="add_group" value="y" />
+		<strong><?php echo $Language->getText('tracker_admin','group_name')?>:</strong><br />
+		<input type="text" name="name" value="" size="15" maxlength="30" /><br />
+		<p>
+		<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_add_group','group_add_warning') ?></span></strong></p>
+		<p>
+		<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
+		</form></p>
+		<?php
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-deletetracker.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-deletetracker.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-deletetracker.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,20 @@
+<?php
+
+		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin','delete', $ath->getName())));
+
+		?>
+		<p>
+		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+		<input type="hidden" name="delete" value="y" /><br />
+		<?php echo $Language->getText('tracker_admin','delete_warning'); ?>
+		<p>
+		<input type="checkbox" name="sure" value="1"><?php echo $Language->getText('tracker_admin','sure') ?><br />
+		<input type="checkbox" name="really_sure" value="1"><?php echo $Language->getText('tracker_admin','really_sure') ?><br />
+		<p>
+		<input type="submit" name="post_changes" value="<?php echo $Language->getText('tracker_admin','delete') ?>" /></p>
+		</form></p>
+		<?php
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-extrafieldcopy.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-extrafieldcopy.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-extrafieldcopy.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,61 @@
+<?php
+
+//
+//  FORM TO COPY Choices configured by admin for extra_field BOXES 
+//
+		$fb= new ArtifactExtraField($ath,$boxid);
+		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_copy','choices_title',$fb->getName())));
+		echo "<h3>".$Language->getText('tracker_admin_copy','choices_title',$fb->getName())."</h3>";
+		
+		$efearr =& $ath->getExtraFieldElements($boxid);
+		for ($i=0; $i<count($efearr); $i++) {
+			$field_id_arr[] = $efearr[$i]['element_id'];
+			$field_arr[] = $efearr[$i]['element_name'];
+		}
+		echo '<table>';
+		echo '<tr>';
+		echo '<td></td><td><center><strong>';
+		echo $Language->getText('tracker_admin_copy','from_box');
+		echo '<br />';
+		echo $fb->getName();
+		echo '</center></strong></td><td></td><td><strong><center>';
+		
+		echo $Language->getText('tracker_admin_copy','into_box');
+		echo '</center></strong></tr><tr><td><strong><center>';
+		echo '</center></strong></td>';
+		echo '<td valign=top>';
+		?>
+		
+		<form action="<?php echo $PHP_SELF .'?group_id='.$group_id.'&boxid='.$boxid.'&atid='.$ath->getID(); ?>" method="post" >
+		<input type="hidden" name="copy_opt" value="copy" >
+		<input type="hidden" value="$return">
+		<?php
+		echo html_build_multiple_select_box_from_arrays($field_id_arr,$field_arr,'copyid[]',array(),10,false);
+		echo '</td><td><strong><center>';
+		$atf = new ArtifactTypeFactory($group);
+		$at_arr =& $atf->getArtifactTypes();
+		for ($j=0; $j < count($at_arr); $j++) {
+			$athcp= new ArtifactTypeHtml($group,$at_arr[$j]->getID());
+			$efarr =& $athcp->getExtraFields();
+			$ct=count($efarr);
+			for ($k=0; $k < $ct; $k++) {
+				$id_arr[]=$efarr[$k]['extra_field_id'];
+				$name_arr[]=$athcp->getName() .' - '.$efarr[$k]['field_name'];
+			}
+			unset ($athcp);	
+		}
+		echo '<td valign=top>';
+
+		$cat_count=count($id_arr);
+		echo html_build_multiple_select_box_from_arrays($id_arr,$name_arr,'selectid[]',array(),10,false);
+		echo '</td></tr>';
+		echo '<tr><td>';
+		?>
+		<br />
+	 	<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" />
+		</td></tr></table></form>
+		
+		<?php
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatecanned.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatecanned.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatecanned.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,33 @@
+<?php
+//
+//	FORM TO UPDATE CANNED MESSAGES
+//
+		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_update_canned','title', $ath->getName())));
+
+		echo "<h1>".$Language->getText('tracker_admin_update_canned','title', $ath->getName())."</h1>";
+
+		$acr = new ArtifactCanned($ath,$id);
+		if (!$acr || !is_object($acr)) {
+			$feedback .= 'Unable to create ArtifactCanned Object';
+		} elseif ($acr->isError()) {
+			$feedback .= $acr->getErrorMessage();
+		} else {
+			?>
+			<p><?php echo $Language->getText('tracker_admin_add_canned','canned_response_info') ?></p>
+			<p>
+			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+			<input type="hidden" name="update_canned" value="y" />
+			<input type="hidden" name="id" value="<?php echo $acr->getID(); ?>" />
+			<strong><?php echo $Language->getText('tracker_admin_add_canned','canned_response_title') ?>:</strong><br />
+			<input type="text" name="title" value="<?php echo $acr->getTitle(); ?>" size="50" maxlength="50" />
+			<p>
+			<strong><?php echo $Language->getText('tracker_admin_add_canned','canned_response_body') ?>:</strong><br />
+			<textarea name="body" rows="30" cols="65" wrap="hard"><?php echo $acr->getBody(); ?></textarea></p>
+			<p>
+			<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
+			</form></p>
+			<?php
+		}
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatecategory.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatecategory.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatecategory.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,41 @@
+<?php
+//
+//  FORM TO UPDATE CATEGORIES
+//
+		/*
+			Allow modification of a artifact category
+		*/
+		$ath->adminHeader(array('title'=>$Language->getText('tracker_admin_update_cat','title',$ath->getName())));
+
+		echo '
+			<h1>'.$Language->getText('tracker_admin_update_cat','title',$ath->getName()).'</h1>';
+
+		$ac = new ArtifactCategory($ath,$id);
+		if (!$ac || !is_object($ac)) {
+			$feedback .= 'Unable to create ArtifactCategory Object';
+		} elseif ($ac->isError()) {
+			$feedback .= $ac->getErrorMessage();
+		} else {
+			?>
+			<p>
+			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+			<input type="hidden" name="update_cat" value="y" />
+			<input type="hidden" name="id" value="<?php echo $ac->getID(); ?>" />
+			<p>
+			<strong><?php echo $Language->getText('tracker_admin_update_cat','category_name') ?>:</strong><br />
+			<input type="text" name="name" value="<?php echo $ac->getName(); ?>" /></p>
+			<p>
+			<strong><?php echo $Language->getText('tracker_admin_update_cat','auto_assign_to') ?>:</strong><br />
+			<?php echo $ath->technicianBox('assign_to',$ac->getAssignee()); ?></p>
+			<p>
+			<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_update_cat','category_change_warning') ?>
+				</span></strong></p>
+			<p>
+			<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
+			</form></p>
+			<?php
+		}
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updateextrafield.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updateextrafield.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updateextrafield.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,39 @@
+<?php
+//
+//  FORM TO UPDATE POP-UP BOXES
+//
+		/*
+			Allow modification of a artifact Selection Box
+		*/
+		$ath->adminHeader(array('title'=>$Language->getText('tracker_admin_build_boxes','box_update_title',$ath->getName())));
+
+
+		echo '
+			<h2>'.$Language->getText('tracker_admin_build_boxes','box_update_title',$ath->getName()).'</h2>';
+
+		$ac = new ArtifactExtraField($ath,$id);
+		if (!$ac || !is_object($ac)) {
+			$feedback .= 'Unable to create ArtifactExtraField Object';
+		} elseif ($ac->isError()) {
+			$feedback .= $ac->getErrorMessage();
+		} else {
+			?>
+			<p>
+			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&id='.$id.'&boxid='.$box.'&atid='.$ath->getID(); ?>" method="post">
+			<input type="hidden" name="update_box" value="y" />
+			<input type="hidden" name="id" value="<?php echo $ac->getID(); ?>" />
+			<p>
+			<strong><?php echo $Language->getText('tracker_admin_build_boxes','box_name') ?>:</strong><br />
+			<input type="text" name="name" value="<?php echo $ac->getName(); ?>" /></p>
+			<p>
+			<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_build_boxes','box_change_warning') ?>
+				</span></strong></p>
+			<p>
+			<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
+			</form></p>
+			<?php
+		}
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updateextrafieldelement.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updateextrafieldelement.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updateextrafieldelement.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,40 @@
+<?php
+//
+//  FORM TO UPDATE POP-UP CHOICES FOR A BOX
+//
+		/*
+			Allow modification of a Choice for a Pop-up Box
+		*/
+		$ath->adminHeader(array('title'=>$Language->getText('tracker_admin_build_boxes','opt_update_title',$ath->getName())));
+
+		echo '
+			<h2>'.$Language->getText('tracker_admin_build_boxes','opt_update_title',$ath->getName()).'</h2>';
+
+		$ao = new ArtifactExtraFieldElement($ath,$id);
+		if (!$ao || !is_object($ao)) {
+			$feedback .= 'Unable to create ArtifactExtraFieldElement Object';
+		} elseif ($ao->isError()) {
+			$feedback .= $ao->getErrorMessage();
+		} else {
+
+			?>
+			<p>
+			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+			<input type="hidden" name="update_opt" value="y" />
+			<input type="hidden" name="id" value="<?php echo $ao->getID(); ?>" />
+
+			<p>
+			<strong><?php echo $Language->getText('tracker_admin_build_boxes','opt_name') ?>:</strong><br />
+			<input type="text" name="name" value="<?php echo $ao->getName(); ?>" /></p>
+			<p>
+			<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_build_boxes','box_change_warning') ?>
+				</span></strong></p>
+			<p>
+			<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
+			</form></p>
+			<?php
+		}
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updategroup.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updategroup.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updategroup.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,34 @@
+<?php
+//
+//  FORM TO UPDATE GROUPS
+//
+		/*
+			Allow modification of a artifact group
+		*/
+		$ath->adminHeader(array('title'=>$Language->getText('tracker_admin_update_group','title',$ath->getName()),'pagename'=>'tracker_admin_update_group','titlevals'=>array($ath->getName())));
+
+		$ag = new ArtifactGroup($ath,$id);
+		if (!$ag || !is_object($ag)) {
+			$feedback .= 'Unable to create ArtifactGroup Object';
+		} elseif ($ag->isError()) {
+			$feedback .= $ag->getErrorMessage();
+		} else {
+			?>
+			<p>
+			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+			<input type="hidden" name="update_group" value="y" />
+			<input type="hidden" name="id" value="<?php echo $ag->getID(); ?>" />
+			<p>
+			<strong><?php echo $Language->getText('tracker_admin','group_name') ?>:</strong><br />
+			<input type="text" name="name" value="<?php echo $ag->getName(); ?>" /></p>
+			<p>
+			<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_update_group','warning') ?></span></strong></p>
+			<p>
+			<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
+			</form></p>
+			<?php
+		}
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatetracker.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatetracker.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/form-updatetracker.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,59 @@
+<?php
+//
+//	FORM TO UPDATE ARTIFACT TYPES
+//
+		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_update_type','title', $ath->getName()),'pagename'=>'tracker_admin_update_type','titlevals'=>array($ath->getName())));
+
+		?>
+		<p>
+		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
+		<input type="hidden" name="update_type" value="y" />
+		<p>
+		<?php echo $Language->getText('tracker_admin_update_type','name') ?><br />
+		<?php if ($ath->getDataType()) {
+			echo $ath->getName();
+		} else { 
+			?>
+			<input type="text" name="name" value="<?php echo $ath->getName(); ?>" /></p>
+			<?php 
+		} 
+		?>
+		<p>
+		<strong><?php echo $Language->getText('tracker_admin_update_type','description') ?>:</strong><br />
+		<?php if ($ath->getDataType()) {
+			echo $ath->getDescription();
+		} else {
+			?>
+			<input type="text" name="description" value="<?php echo $ath->getDescription(); ?>" size="50" /></p>
+			<?php 
+		} 
+		?>
+		<p>
+<!--		<input type="checkbox" name="is_public" value="1" <?php echo (($ath->isPublic())?'checked="checked"':''); ?> /> <strong><?php echo $Language->getText('tracker_admin_update_type','publicy_available') ?></strong><br />
+		<input type="checkbox" name="allow_anon" value="1" <?php echo (($ath->allowsAnon())?'checked="checked"':''); ?> /> <strong><?php echo $Language->getText('tracker_admin_update_type','allow_anonymous') ?></strong><br />
+-->		<input type="checkbox" name="use_resolution" value="1" <?php echo (($ath->useResolution())?'checked="checked"':''); ?> /> <strong><?php echo $Language->getText('tracker_admin_update_type','display_resolution') ?></strong></p>
+		<p>
+		<strong><?php echo $Language->getText('tracker_admin_update_type','send_submissions') ?>:</strong><br />
+		<input type="text" name="email_address" value="<?php echo $ath->getEmailAddress(); ?>" /></p>
+		<p>
+		<input type="checkbox" name="email_all" value="1" <?php echo (($ath->emailAll())?'checked="checked"':''); ?> /> <strong><?php echo $Language->getText('tracker_admin_update_type','email_all_changes') ?></strong><br /></p>
+		<p>
+		<strong><?php echo $Language->getText('tracker_admin_update_type','days_overdue') ?>:</strong><br />
+		<input type="text" name="due_period" value="<?php echo ($ath->getDuePeriod() / 86400); ?>" /></p>
+		<p> 
+		<strong><?php echo $Language->getText('tracker_admin_update_type','pending_timeout') ?>:</strong><br />
+		<input type="text" name="status_timeout"  value="<?php echo($ath->getStatusTimeout() / 86400); ?>" /></p>
+		<p>
+		<strong><?php echo $Language->getText('tracker_admin_update_type','submit_item_form_text') ?>:</strong><br />
+		<textarea name="submit_instructions" rows="10" cols="55" wrap="hard"><?php echo $ath->getSubmitInstructions(); ?></textarea></p>
+		<p>
+		<strong><?php echo $Language->getText('tracker_admin_update_type','browse_item_form_text') ?>:</strong><br />
+		<textarea name="browse_instructions" rows="10" cols="55" wrap="hard"><?php echo $ath->getBrowseInstructions(); ?></textarea></p>
+		<p>
+		<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
+		</form></p>
+		<?php
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/ind.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/ind.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/ind.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,144 @@
+<?php
+
+	//
+	//
+	//	This page lists the available trackers as well as a 
+	//	form to create a new tracker
+	//
+	//
+
+
+	//
+	//  get the Group object
+	//
+	$group =& group_get_object($group_id);
+	if (!$group || !is_object($group)) {
+		exit_error('Error','Could Not Get Group Object');
+	} elseif ($group->isError()) {
+		exit_error('Error',$group->getErrorMessage());
+	}
+
+	$perm =& $group->getPermission( session_get_user() );
+
+	if ($post_changes) {
+
+		if (!$perm || !is_object($perm) || !$perm->isArtifactAdmin()) {
+			exit_permission_denied();
+		}
+
+		if ($add_at) {
+			$res=new ArtifactTypeHtml($group);
+			if (!$res->create($name,$description,$is_public,$allow_anon,$email_all,$email_address,
+				$due_period,$use_resolution,$submit_instructions,$browse_instructions)) {
+				$feedback .= $res->getErrorMessage();
+			} else {
+				header ("Location: /tracker/admin/?group_id=$group_id&atid=".$res->getID()."&update_users=1");
+			}
+
+		}
+	}
+
+
+	//
+	//	Display existing artifact types
+	//
+	$atf = new ArtifactTypeFactory($group);
+	if (!$group || !is_object($group) || $group->isError()) {
+		exit_error('Error','Could Not Get ArtifactTypeFactory');
+	}
+
+	$at_arr =& $atf->getArtifactTypes();
+
+	//required params for site_project_header();
+	$params['group']=$group_id;
+	$params['toptab']='tracker';
+	$params['title'] = $page_title;
+
+	echo site_project_header($params);
+	echo $HTML->subMenu(
+		array(
+			$Language->getText('tracker','reporting'),
+			$Language->getText('tracker','admin')
+		),
+		array(
+			'/tracker/reporting/?group_id='.$group_id,
+			'/tracker/admin/?group_id='.$group_id
+		)
+	);
+
+	if (!$at_arr || count($at_arr) < 1) {
+		echo "<h1>".$Language->getText('tracker_admin','no_trackers_found')."</h1>";
+		echo "<p> </p>";
+	} else {
+
+		echo '
+		<p>'.$Language->getText('tracker_admin','choose_datatype').'.</p>';
+
+		/*
+			Put the result set (list of forums for this group) into a column with folders
+		*/
+		$tablearr=array($Language->getText('group','short_tracker'),$Language->getText('tracker_admin_update_type','description'));
+		echo $HTML->listTableTop($tablearr);
+
+		for ($j = 0; $j < count($at_arr); $j++) {
+			echo '
+			<tr '. $HTML->boxGetAltRowStyle($j) . '>
+				<td><a href="/tracker/admin/?atid='. $at_arr[$j]->getID() . '&group_id='.$group_id.'">' .
+					html_image("ic/tracker20w.png","20","20",array("border"=>"0")) . '  '.
+					$at_arr[$j]->getName() .'</a>
+				</td>
+				<td>'.$at_arr[$j]->getDescription() .'
+				</td>
+			</tr>';
+		}
+		echo $HTML->listTableBottom();
+	}
+
+	//
+	//	Set up blank ArtifactType
+	//
+
+	if (!$perm || !is_object($perm) || !$perm->isArtifactAdmin()) {
+		//show nothing
+	} else {
+
+	?><?php echo $Language->getText('tracker_admin','intro') ?>
+	<p>
+	<form action="<?php echo $PHP_SELF.'?group_id='.$group_id; ?>" method="post">
+	<input type="hidden" name="add_at" value="y" />
+	<p>
+	<?php echo $Language->getText('tracker_admin_update_type','name') ?><br />
+	<input type="text" name="name" value=""></p>
+	<p>
+	<strong><?php echo $Language->getText('tracker_admin_update_type','description') ?>:</strong><br />
+	<input type="text" name="description" value="" size="50" /></p>
+	<p>
+	<input type="checkbox" name="is_public" value="1" /> <strong><?php echo $Language->getText('tracker_admin_update_type','publicy_available') ?></strong><br />
+	<input type="checkbox" name="allow_anon" value="1" /> <strong><?php echo $Language->getText('tracker_admin_update_type','allow_anonymous') ?></strong><br />
+	<input type="checkbox" name="use_resolution" value="1" /> <strong><?php echo $Language->getText('tracker_admin_update_type','display_resolution') ?></strong></p>
+	<p>
+	<strong><?php echo $Language->getText('tracker_admin_update_type','send_submissions') ?>:</strong><br />
+	<input type="text" name="email_address" value="" /></p>
+	<p>
+	<input type="checkbox" name="email_all" value="1" /> <strong><?php echo $Language->getText('tracker_admin_update_type','email_all_changes') ?></strong><br /></p>
+	<p>
+	<strong><?php echo $Language->getText('tracker_admin_update_type','days_overdue') ?>:</strong><br />
+	<input type="text" name="due_period" value="30" /></p>
+	<p>
+	<strong><?php echo $Language->getText('tracker_admin_update_type','pending_timeout') ?>:</strong><br />
+	<input type="text" name="status_timeout" value="14" /></p>
+	<p>
+	<strong><?php echo $Language->getText('tracker_admin_update_type','submit_item_form_text') ?>:</strong><br />
+	<textarea name="submit_instructions" rows="10" cols="55" wrap="hard"></textarea></p>
+	<p>
+	<strong><?php echo $Language->getText('tracker_admin_update_type','browse_item_form_text') ?>:</strong><br />
+	<textarea name="browse_instructions" rows="10" cols="55" wrap="hard"></textarea></p>
+	<p>
+	<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
+	</form></p>
+	<?php
+	}
+
+	echo site_project_footer(array());
+
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/index.php	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/index.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -18,14 +18,13 @@
 require_once('common/tracker/ArtifactCategory.class');
 require_once('common/tracker/ArtifactCanned.class');
 require_once('common/tracker/ArtifactResolution.class');
-require_once('common/tracker/ArtifactSelectionBox.class');
-require_once('common/tracker/ArtifactBoxOptions.class');
+require_once('common/tracker/ArtifactExtraField.class');
+require_once('common/tracker/ArtifactExtraFieldElement.class');
+
 if ($group_id && $atid) {
 //
-//
 //		UPDATING A PARTICULAR ARTIFACT TYPE
 //
-//
 	//	
 	//  get the Group object
 	//	
@@ -55,1208 +54,73 @@
 	}
 
 	if ($post_changes) {
-//
-//
-//		Update the database
-//
-//
-		if ($build_box) {
-
-			$ab = new ArtifactSelectionBox($ath);
-		
-			if (!$ab || !is_object($ab)) {
-				$feedback .= 'Unable to create ArtifactSelectionBox Object';
-//			} elseif ($ab->isError())
-//				$feedback .= $ab->getErrorMessage();			
-			} else {
-				if (!$ab->create($name)) {
-					$feedback .= $Language->getText('tracker_admin_build_boxes','error_inserting_box').': '.$ab->getErrorMessage();
-					$ab->clearError();
-				} else {
-					$feedback .= $Language->getText('tracker_admin_build_boxes','box_name_inserted');
-				}
-			}
-
-		}elseif ($add_opt) {
-			$ao = new ArtifactBoxOptions($ath);
-			if (!$ao || !is_object($ao)) {
-				$feedback .= 'Unable to create ArtifactBoxOptions Object';
-//			} elseif ($ao->isError())
-//				$feedback .= $ao->getErrorMessage();			
-			} else {
-				if (!$ao->create($name,$boxid)) {
-					$feedback .= $Language->getText('tracker_admin_build_boxes','error_inserting_choice').': '.$ao->getErrorMessage();
-					$ao->clearError();
-				} else {
-					$feedback .= $Language->getText('tracker_admin_build_boxes','choice_inserted');
-				}
-		//		$add_opt= false;
-		//		$build_box= true;
-				
-			}
-
-		} elseif ($add_cat) {
-
-			$ac = new ArtifactCategory($ath);
-			if (!$ac || !is_object($ac)) {
-				$feedback .= 'Unable to create ArtifactCategory Object';
-//			} elseif ($ac->isError()) {
-//				$feedback .= $ac->getErrorMessage();			
-			} else {
-				if (!$ac->create($name,$assign_to)) {
-					$feedback .= $Language->getText('tracker_admin','error_inserting').': '.$ac->getErrorMessage();
-					$ac->clearError();
-				} else {
-					$feedback .= $Language->getText('tracker_admin','category_inserted');
-				}
-			}
-
-		} elseif ($add_group) {
-
-			$ag = new ArtifactGroup($ath);
-			if (!$ag || !is_object($ag)) {
-				$feedback .= 'Unable to create ArtifactGroup Object';
-//			} elseif ($ag->isError()) {
-//				$feedback .= $ag->getErrorMessage();
-			} else {
-				if (!$ag->create($name)) {
-					$feedback .= $Language->getText('tracker_admin','error_inserting').' : '.$ag->getErrorMessage();
-					$ag->clearError();
-				} else {
-					$feedback .= $Language->getText('tracker_admin','group_inserted');
-				}
-			}
-
-		} elseif ($add_canned) {
-
-			$acr = new ArtifactCanned($ath);
-			if (!$acr || !is_object($acr)) {
-				$feedback .= 'Unable to create ArtifactCanned Object';
-//			} elseif ($acr->isError()) {
-//				$feedback .= $acr->getErrorMessage();			
-			} else { 
-				if (!$acr->create($title,$body)) {
-					$feedback .= $Language->getText('tracker_admin','error_inserting').' : '.$acr->getErrorMessage();
-					$acr->clearError();
-				} else {
-					$feedback .= $Language->getText('tracker_admin','canned_response_inserted');
-				}
-			}
-
-/*
-		} elseif ($add_users) {
-
-			//
-			//	if "add all" option, get list of group members
-			//	who are not already members of this ArtifactType
-			//
-			if ($add_all) {
-				$sql="SELECT u.user_id
-				FROM users u,user_group ug
-				WHERE u.user_id=ug.user_id
-				AND ug.group_id='$group_id' 
-				AND NOT EXISTS (SELECT user_id FROM artifact_perm ap 
-				WHERE ap.group_artifact_id='$atid' 
-				AND ap.user_id=u.user_id);";
-				$addids=util_result_column_to_array(db_query($sql));
-			}
-			$count=count($addids);
-			for ($i=0; $i<$count; $i++) {
-				$ath->addUser($addids[$i]);
-			}
-			if ($ath->isError()) {
-				$feedback .= $ath->getErrorMessage();
-				$ath->clearError();
-			} else {
-				$feedback .= $Language->getText('tracker_admin','users_added');
-			}
-			//go to the perms page
-			$add_users=false;
-			$update_users=true;
-
-		} elseif ($update_users) {
-
-			//
-			//	Handle the 2-D array of user_id/permission level
-			//
-			$count=count($updateids);
-			for ($i=0; $i<$count; $i++) {
-				$ath->updateUser($updateids[$i][0],$updateids[$i][1]);
-			}
-			if ($ath->isError()) {
-				$feedback .= $ath->getErrorMessage();
-				$ath->clearError();
-			} else {
-				$feedback .= $Language->getText('tracker_admin','users_updated');
-			}
-
-			//
-			//	Delete the checked ids
-			//
-			$count=count($deleteids);
-			for ($i=0; $i<$count; $i++) {
-				$ath->deleteUser($deleteids[$i]);
-			}
-			if ($ath->isError()) {
-				$feedback .= $ath->getErrorMessage();
-				$ath->clearError();
-			} else {
-				$feedback .= $Language->getText('tracker_admin','users_deleted');
-			}
-*/
-		} elseif ($update_canned) {
-
-			$acr = new ArtifactCanned($ath,$id);
-			if (!$acr || !is_object($acr)) {
-				$feedback .= 'Unable to create ArtifactCanned Object';
-			} elseif ($acr->isError()) {
-				$feedback .= $acr->getErrorMessage();
-			} else {
-				if (!$acr->update($title,$body)) {
-					$feedback .= $Language->getText('tracker_admin','error_updating').' : '.$acr->getErrorMessage();
-					$acr->clearError();
-				} else {
-					$feedback .= $Language->getText('tracker_admin','canned_response_updated');
-					$update_canned=false;
-					$add_canned=true;
-				}
-			}
-
-		} elseif ($copy_opt) {
-			$copy_rows=count($copyid);
-			$tracker_rows=count($selectid);
-			if ($tracker_rows > 0 && $copy_rows > 0) {
-//			for ($i=0; $i < $copy_rows; $i++) {
-//			}
-			for ($i=0; $i < $tracker_rows; $i++) {
-		//
-		// create an object for each selected type
-		//
-			$result = $ath->getBoxEntry($selectid[$i]);
-			$typeid = db_result($result,0,'group_artifact_id');
-			$athcp = new ArtifactTypeHtml($group,$typeid);
-			if (!$athcp || !is_object($athcp)) {
-				exit_error('Error','ArtifactType could not be created');
-			}
-			if ($athcp->isError()) {
-				exit_error($Language->getText('general','error').'',$athcp->getErrorMessage());
-			}
-			//
-			//  Copy choices into a field (box) for each tracker selected 
-			//
-			
-			$feedback .= 'From Tracker: ';
-			$feedback .= $athcp->getName();				
-			$feedback .= ' into Tracker: ';
-			$feedback .= $athcp->getName();
-				$ab =new ArtifactSelectionbox($athcp,$selectid[$i]);
-				$feedback .= ', Box: ';
-				$feedback .= $ab->getName();
-				$feedback .= '<br />';
-			
-				$abo = new ArtifactBoxOptions($athcp);
-			if (!$abo || !is_object($abo)) {
-				$feedback .= 'Unable to create ArtifactBoxOptions Object';
-			} elseif ($abo->isError()) {
-				$feedback .= $abo->getErrorMessage();			
-			} else {
-			for ($k=0; $k < $copy_rows; $k++) {
-				$resultch=$ath->getBoxOptionName($copyid[$k]);
-				$name=db_result($resultch,0,'box_options_name');
-				if (!$abo->create($name,$selectid[$i])) {
-					$feedback .= $Language->getText('tracker_admin_build_boxes','error_inserting_choice').': '.$abo->getErrorMessage();
-					$abo->clearError();
-					
-				}else {
-					unset ($abo);
-					$abo = new ArtifactBoxOptions($athcp);
-					if (!$abo || !is_object($abo)) {
-						$feedback .= 'Unable to create ArtifactBoxOptions Object';
-					} elseif ($abo->isError()) {
-						$feedback .= $abo->getErrorMessage();			
-					} else {
-					$feedback .= '- Copied choice:';						$feedback .= $name;
-					}
-					$feedback .= '<br />';
-					unset($ab);
-				}
-				} 
-				}
-				}
-				unset ($abo);
-				unset ($athcp);
-				$feedback .= '<br />';
-			
-			}else {
-				$feedback .= 'you are required to select both one or more choices and one or more trackers';
-			}
-		} elseif ($update_box) {
-
-			$ac = new ArtifactSelectionBox($ath,$id);
-			if (!$ac || !is_object($ac)) {
-				$feedback .= 'Unable to create ArtifactSelectionBox Object';
-			} elseif ($ac->isError()) {
-				$feedback .= $ac->getErrorMessage();
-			} else {
-				if (!$ac->update($name)) {
-					$feedback .= $Language->getText('tracker_admin_build_boxes','error_updating').' : '.$ac->getErrorMessage();
-					$ac->clearError();
-				} else {
-					$feedback .= $Language->getText('tracker_admin_build_boxes','box_name_updated');
-					$update_box=false;
-					$build_box=true;
-				}
-			}
-
-		} elseif ($update_opt) {
-
-			$ao = new ArtifactBoxOptions($ath,$id);
-			if (!$ao || !is_object($ao)) {
-				$feedback .= 'Unable to create ArtifactSelectionBox Object';
-			} elseif ($ao->isError()) {
-				$feedback .= $ao->getErrorMessage();
-			} else {
-				if (!$ao->update($name,$boxid,$id)) {
-					$feedback .= $Language->getText('tracker_admin_build_boxes','error_updating').' : '.$ao->getErrorMessage();
-					$ao->clearError();
-				} else {
-					$feedback .= $Language->getText('tracker_admin_build_boxes','choice_updated');
-					$update_opt=false;
-					$build_box=true;
-				}
-			}
-
-
-		} elseif ($update_cat) {
-
-			$ac = new ArtifactCategory($ath,$id);
-			if (!$ac || !is_object($ac)) {
-				$feedback .= 'Unable to create ArtifactCategory Object';
-			} elseif ($ac->isError()) {
-				$feedback .= $ac->getErrorMessage();
-			} else {
-				if (!$ac->update($name,$assign_to)) {
-					$feedback .= $Language->getText('tracker_admin','error_updating').' : '.$ac->getErrorMessage();
-					$ac->clearError();
-				} else {
-					$feedback .= $Language->getText('tracker_admin','category_updated');
-					$update_cat=false;
-					$add_cat=true;
-				}
-			}
-
-		} elseif ($update_group) {
-
-			$ag = new ArtifactGroup($ath,$id);
-			if (!$ag || !is_object($ag)) {
-				$feedback .= 'Unable to create ArtifactGroup Object';
-			} elseif ($ag->isError()) {
-				$feedback .= $ag->getErrorMessage();
-			} else {
-				if (!$ag->update($name)) {
-					$feedback .= $Language->getText('tracker_admin','error_updating').' : '.$ag->getErrorMessage();
-					$ag->clearError();
-				} else {
-					$feedback .= $Language->getText('tracker_admin','group_updated');
-					$update_group=false;
-					$add_group=true;
-				}
-			}
-
-		} elseif ($update_type) {
-
-			if (!$ath->update($name,$description,$email_all,$email_address,
-				$due_period,$status_timeout,$use_resolution,$submit_instructions,$browse_instructions)) {
-				$feedback .= $Language->getText('tracker_admin','error_updating').' : '.$ath->getErrorMessage();
-				$ath->clearError();
-			} else {
-				$feedback .= $Language->getText('tracker_admin','tracker_updated');
-			}
-
-		} elseif ($delete) {
-
-			if (!$ath->delete($sure,$really_sure)) {
-				$feedback .= $Language->getText('tracker_admin','error_updating').' : '.$ath->getErrorMessage();
-				unset($ath);
-				$delete=0;
-				$atid=0;
-			} else {
-				$feedback .= $Language->getText('tracker_admin','deleted');
-			}
-
-		}
-
+		include('updates.php');
 	} 
 //
-//
-//
 //		FORMS TO ADD/UPDATE DATABASE
 //
-//
-//
-	if ($build_box) {  
-//
-//  FORM TO BUILD SELECTION BOXES 
-//
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_build_boxes','title',$ath->getName())));
+	if ($add_extrafield) {  
 
-		echo "<h2>".$Language->getText('tracker_admin_build_boxes','title',$ath->getName())."</h2>";
+		include ('form-addextrafield.php');
 
-		/*
-			List of possible user built Selection Boxes for an ArtifactType
-		*/
-		$result=$ath->getSelectionBoxes();
-		echo "<p> </p>";
-		$rows=db_numrows($result);
-		if ($result && $rows > 0) {
-			$title_arr=array();
-			$title_arr[]=$Language->getText('tracker_admin_build_boxes','tracker_box_title');
-			
-			$title_arr[]=$Language->getText('tracker_admin_build_boxes','tracker_box_option_title');	
-			echo $GLOBALS['HTML']->listTableTop ($title_arr);
-			
-			for ($i=0; $i < $rows; $i++) {
-				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
-					  '<td>'.db_result($result, $i, 'id').'</td>'.
-					'<td><a href="'.$PHP_SELF.'?update_box=1&id='.
-						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
-						db_result($result, $i, 'selection_box_name').'</a></td>';
-				/*
-		  			List of possible options for a user built Selection Box
-		  		*/
-				$optresult=$ath->getSelectionBoxOptions(db_result($result,$i,'id'));
-				$optrows=db_numrows($optresult);
-				if ($optresult && $optrows > 0) {
-					echo '<td>';
-					for ($j=0; $j <$optrows; $j++)
-				
-//						if (db_result($result,$i,'id') == db_result($optresult,$j,'artifact_box_id')){ 
-						echo	'<a href="'.$PHP_SELF.'?update_opt=1&id='.
-						db_result($optresult, $j, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'&boxid='.
-						db_result($result,$i,'id').'">'.
-						db_result($optresult, $j, 'box_options_name').'</a><br \>';
-//					}
-
-					} else {
-echo '<td>';
-//					echo	'<a href="'.$PHP_SELF.'?add_opt=1&boxid='.
-//						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">';
-//echo 'add choices ';
-				}
-			
-				echo '</td>';
-				echo '<td>';
-				echo	'<a href="'.$PHP_SELF.'?add_opt=1&boxid='.
-					db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">';
-				echo ' '.$Language->getText('tracker_admin_build_boxes', 'box_add_choices').' ';
-			}
-			echo   '</tr>';
-			echo $GLOBALS['HTML']->listTableBottom();
-
-		} else { 
-			echo "\n<h3>".$Language->getText('tracker_admin_build_boxes','no_box')."</h3>";
-		}
-		?>
-		<p>
-		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-		<input type="hidden" name="build_box" value="y" />
-		<strong><?php echo $Language->getText('tracker_admin_build_boxes','box_name') ?>:</strong><br />
-		<input type="text" name="name" value="" size="15" maxlength="30" /><br />
-		<p>
-		<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_build_boxes','box_warning') ?></span></strong></p>
-		<p>
-		<input type="submit" name="post_changes" value="<?php echo$Language->getText('general','submit') ?>" /></p>
-		</form></p>
-		<?php
-
-		$ath->footer(array());
-
 	} elseif ($add_opt) {
-//
-//  FORM TO  ADD BOX CHOICES 
-//
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_build_boxes','title')));
 
-		echo "<h3>".$Language->getText('tracker_admin_build_boxes','opt_title',$ath->getName())."</h3>";
-		/*
-		 *	List of possible options for user  
-		 *	  Selection Boxes configured by Admin
-		 */
-		
-		$result=$ath->getBoxOptions();
-		echo "<p> </p>";
-		$rows=db_numrows($result);
-		if ($result && $rows > 0) {
-			
-			echo	'<a href="'.$PHP_SELF.'?copy_opt=1&boxid='.
-			$boxid.'&group_id='.$group_id.'&atid='. $ath->getID() .'">';
-			echo $Language->getText('tracker_admin_copy','copy_choices');
-			echo '</a><p>';
-			$title_arr=array();
-			$title_arr[]=$Language->getText('tracker_admin_build_boxes','tracker_choice_id');
-			$title_arr[]=$Language->getText('tracker_admin_build_boxes','tracker_box_option_title');
+		include ('form-addextrafieldoption.php');
 
-			echo $GLOBALS['HTML']->listTableTop ($title_arr);
-			for ($i=0; $i < $rows; $i++) {
-				if ($boxid == db_result($result,$i,'artifact_box_id')) {
-				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>';
-				echo '<td>'.db_result($result, $i, 'id').'</td>'.
-					'<td><a href="'.$PHP_SELF.'?update_opt=1&id='.
-				db_result($result,$i,'id').'&boxid='.			
-					db_result($result, $i, 'artifact_box_id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
-					db_result($result, $i, 'box_options_name').'</a></td>';
-				 }
-			}		   
-			echo $GLOBALS['HTML']->listTableBottom();
-
-		} else { 
-			echo "\n<h3>".$Language->getText('tracker_admin_build_boxes','no_choice')."</h3>";
-		}
-		?>
-		<p>
-		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&boxid='.$boxid.'&atid='.$ath->getID(); ?>" method="post">
-		<input type="hidden" name="add_opt" value="y" />
-		<strong><?php echo $Language->getText('tracker_admin_build_boxes','opt_add_name') ?>:</strong><br />
-		<input type="text" name="name" value="" size="15" maxlength="30" /> <br \>
-		<p>
-		<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_build_boxes','choice_warning') ?></span></strong></p>
-		<p>
-		<input type="submit" name="post_changes" value="<?php echo$Language->getText('general','submit') ?>" /></p>
-		</form>
-		</p>
-		<?php
-
-		$ath->footer(array());
-
 	} elseif ($add_cat) {
-//
-//  FORM TO ADD CATEGORIES
-//
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_add_cat','title',$ath->getName())));
 
-		echo "<h1>".$Language->getText('tracker_admin_add_cat','title',$ath->getName())."</h1>";
+		include ('form-addcategory.php');
 
-		/*
-			List of possible categories for this ArtifactType
-		*/
-		$result=$ath->getCategories();
-		echo "<p> </p>";
-		$rows=db_numrows($result);
-		if ($result && $rows > 0) {
-			$title_arr=array();
-			$title_arr[]=$Language->getText('tracker_admin','tracker_id');
-			$title_arr[]=$Language->getText('tracker_admin','tracker_title');
-			
-			echo $GLOBALS['HTML']->listTableTop ($title_arr);
-			
-			for ($i=0; $i < $rows; $i++) {
-				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
-					'<td>'.db_result($result, $i, 'id').'</td>'.
-					'<td><a href="'.$PHP_SELF.'?update_cat=1&id='.
-						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
-						db_result($result, $i, 'category_name').'</a></td></tr>';
-			}		   
-
-			echo $GLOBALS['HTML']->listTableBottom();
-
-		} else {
-			echo "\n<h1>".$Language->getText('tracker_admin_add_cat','no_categories')."</h1>";
-		}
-		?>
-		<p>
-		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-		<input type="hidden" name="add_cat" value="y" />
-		<strong><?php echo $Language->getText('tracker_admin','category_name') ?>:</strong><br />
-		<input type="text" name="name" value="" size="15" maxlength="30" /><br />
-		<p>
-		<strong><?php echo $Language->getText('tracker_admin','auto_assign_to') ?>:</strong><br />
-		<?php echo $ath->technicianBox('assign_to'); ?></p>
-		<p>
-		<strong><span style="color:red"><?php echo $Language->getText('tracker_admin','category_add_warning') ?></span></strong></p>
-		<p>
-		<input type="submit" name="post_changes" value="<?php echo$Language->getText('general','submit') ?>" /></p>
-		</form></p>
-		<?php
-
-		$ath->footer(array());
-
 	} elseif ($copy_opt) {
 
-	
-//
-//  FORM TO COPY Choices configured by admin for extra_field BOXES 
-//
-		$fb= new ArtifactSelectionBox($ath,$boxid);
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_copy','choices_title',$fb->getName())));
-		echo "<h3>".$Language->getText('tracker_admin_copy','choices_title',$fb->getName())."</h3>";
-		
-		$result=$ath->getSelectionBoxOptions($boxid);
-		$cat_count=db_numrows($result);
-		if ($cat_count > 10) {
-			$cat_count=10;
-		}
-		echo '<table>';
-		echo '<tr>';
-		echo '<td></td><td><center><strong>';
-		echo $Language->getText('tracker_admin_copy','from_box');
-		echo '<br />';
-		echo $fb->getName();
-		echo '</center></strong></td><td></td><td><strong><center>';
-		
-		echo $Language->getText('tracker_admin_copy','into_box');
-		echo '</center></strong></tr><tr><td><strong><center>';
-		echo '</center></strong></td>';
-		echo '<td valign=top>';
-		?>
-		
-		<form action="<?php echo $PHP_SELF .'?group_id='.$group_id.'&boxid='.$boxid.'&atid='.$ath->getID(); ?>" method="post" >
-		<input type="hidden" name="copy_opt" value="copy" >
-		<input type="hidden" value="$return">
-		<?php
-		echo html_build_multiple_select_box($result,'copyid[]',$checked_array,$size=$cat_count,$show_100=false);
-		echo '</td><td><strong><center>';
-		$atf = new ArtifactTypeFactory($group);
-		$at_arr =& $atf->getArtifactTypes();
-		if ($cat_count > 10) {
-			$cat_count=10;
-		}
-		for ($j=0; $j < count($at_arr); $j++) {
-		$athcp= new ArtifactTypeHtml($group,$at_arr[$j]->getID());
-		$boxresult=$athcp->getSelectionBoxes();
-		$boxct=db_numrows($boxresult);
-		for ($k=0; $k < $boxct; $k++) {
-		$id_arr[]=$at_arr[$j]->getID();
-		$name_arr[]=$at_arr[$j]->getName();
-		$field_id_arr[] = db_result($boxresult,$k,'id');
-		$field_arr[] = db_result($boxresult,$k,'selection_box_name');
-		}
-		unset ($athcp);
-			
-		}
-		echo '<td valign=top>';
+		include ('form-extrafieldcopy.php');
 
-		$cat_count=count($id_arr);
-		echo html_build_multiple_select_box_from_arrays($id_arr,$name_arr,$field_id_arr,$field_arr,'selectid[]',$checked_array,$size=$cat_count,$show_100=false);
-		echo '</td></tr>';
-		echo '<tr><td>';
-		?>
-		<br />
-	 	<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" />
-		</td></tr></table></form>
-		
-		<?php
-		$ath->footer(array());
-
 	} elseif ($add_group) {
-//
-//  FORM TO ADD GROUP
-//
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_add_group','title', $ath->getName()),'pagename'=>'tracker_admin_add_group','titlevals'=>array($ath->getName())));
 
-		/*
-			List of possible groups for this ArtifactType
-		*/
-		$result=$ath->getGroups();
-		echo "<p>";
-		$rows=db_numrows($result);
-		if ($result && $rows > 0) {
-			$title_arr=array();
-			$title_arr[]=$Language->getText('tracker_admin','tracker_id');
-			$title_arr[]=$Language->getText('tracker_admin','tracker_title');
-			
-			echo $GLOBALS['HTML']->listTableTop ($title_arr);
-			
-			for ($i=0; $i < $rows; $i++) {
-				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
-					'<td>'.db_result($result, $i, 'id').'</td>'.
-					'<td><a href="'.$PHP_SELF.'?update_group=1&id='.
-						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
-						db_result($result, $i, 'group_name').'</a></td></tr>';
-			}		   
+		include ('form-addgroup.php');
 
-			echo $GLOBALS['HTML']->listTableBottom();
-
-		} else {
-			echo "\n<h1>".$Language->getText('tracker_admin_add_group','no_groups_defined')."</h1>";
-		}
-		?>
-		<p>
-		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-		<input type="hidden" name="add_group" value="y" />
-		<strong><?php echo $Language->getText('tracker_admin','group_name')?>:</strong><br />
-		<input type="text" name="name" value="" size="15" maxlength="30" /><br />
-		<p>
-		<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_add_group','group_add_warning') ?></span></strong></p>
-		<p>
-		<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
-		</form></p>
-		<?php
-
-		$ath->footer(array());
-
 	} elseif ($add_canned) {
-//
-//  FORM TO ADD CANNED RESPONSES
-//
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_add_canned','title',$ath->getName()).'Add/Change Canned Responses to: '.$ath->getName()));
 
-		echo "<h1>".$Language->getText('tracker_admin_add_canned','title', $ath->getName())."</h1>";
+		include ('form-addcanned.php');
 
-		/*
-			List of existing canned responses
-		*/
-		$result=$ath->getCannedResponses();
-		$rows=db_numrows($result);
-		echo "<p> </p>";
-
-		if ($result && $rows > 0) {
-			//code to show existing responses and link to update page
-			echo '
-			<h2>'.$Language->getText('tracker_admin_add_canned','existing_responses').':</h2>
-			<p> </p>';
-			$title_arr=array();
-			$title_arr[]=$Language->getText('tracker_admin','tracker_id');
-			$title_arr[]=$Language->getText('tracker_admin','tracker_title');
-
-			echo $GLOBALS['HTML']->listTableTop ($title_arr);
-
-			for ($i=0; $i < $rows; $i++) {
-				echo '<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>'.
-					'<td>'.db_result($result, $i, 'id').'</td>'.
-					'<td><a href="'.$PHP_SELF.'?update_canned=1&id='.
-						db_result($result, $i, 'id').'&group_id='.$group_id.'&atid='. $ath->getID() .'">'.
-						db_result($result, $i, 'title').'</a></td></tr>';
-			}
-
-			echo $GLOBALS['HTML']->listTableBottom();
-
-		} else {
-			echo "\n<h1>".$Language->getText('tracker_admin_add_canned','no_responses')."</h1>";
-		}
-		?>
-		<p><?php echo $Language->getText('tracker_admin_add_canned','canned_response_info') ?></p>
-		<p>
-		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-		<input type="hidden" name="add_canned" value="y" />
-		<strong><?php echo $Language->getText('tracker_admin_add_canned','canned_response_title') ?>:</strong><br />
-		<input type="text" name="title" value="" size="50" maxlength="50" />
-		<p>
-		<strong><?php echo $Language->getText('tracker_admin_add_canned','canned_response_body') ?>:</strong><br />
-		<textarea name="body" rows="30" cols="65" wrap="hard"></textarea></p>
-		<p>
-		<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
-		</form></p>
-		<?php
-
-		$ath->footer(array());
-/*
-	} elseif ($update_users) {
-
-//
-//  FORM TO ADD/UPDATE USERS
-//
-
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_add_users','title', $ath->getName()),'pagename'=>'tracker_admin_update_users','titlevals'=>array($ath->getName())));
-
-		$sql="SELECT * FROM artifactperm_user_vw WHERE group_artifact_id='". $ath->getID() ."'";
-		$res=db_query($sql);
-
-		if (!$res || db_numrows($res) < 1) {
-			echo '<h2>'.$Language->getText('tracker_admin_add_users','no_developers').'</h2>';
-		} else {
-			?>
-			<?php echo $Language->getText('tracker_admin_add_users','developers_info') ?>
-			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-			<input type="hidden" name="update_users" value="y" />
-			<?php
-
-			$arr=array();
-			$arr[]=$Language->getText('tracker_admin_add_users','delete');
-			$arr[]=$Language->getText('tracker_admin_add_users','user_name');
-			$arr[]=$Language->getText('tracker_admin_add_users','category_permission');
-
-			echo $GLOBALS['HTML']->listTableTop($arr);
-
-			$i=0;
-			//
-			//	PHP4 allows multi-dimensional arrays to be passed in from form elements
-			//
-			while ($row_dev = db_fetch_array($res)) {
-				print '
-				<input type="hidden" name="updateids['.$i.'][0]" value="'.$row_dev['user_id'].'" />
-				<tr '. $GLOBALS['HTML']->boxGetAltRowStyle($i) .'>
-				<td><input type="checkbox" name="deleteids[]" value="'.$row_dev['user_id'].'" /> '.$Language->getText('tracker_admin_add_users','delete').'</td>
-
-				<td>'.$row_dev['realname'].' ( '. $row_dev['user_name'] .' )</td>
-
-				<td><span style="font-size:smaller"><select name="updateids['.$i.'][1]">
-				<option value="0"'.(($row_dev['perm_level']==0)?" selected=\"selected\"":"").'>-</option>
-				<option value="1"'.(($row_dev['perm_level']==1)?" selected=\"selected\"":"").'>'.$Language->getText('tracker_admin_add_users','technician').'</option>
-				<option value="2"'.(($row_dev['perm_level']==2)?" selected=\"selected\"":"").'>'.$Language->getText('tracker_admin_add_users','tech_admin').'</option>
-				<option value="3"'.(($row_dev['perm_level']==3)?" selected=\"selected\"":"").'>'.$Language->getText('tracker_admin_add_users','admin_only').'</option>
-				</select></span></td>
-
-				</tr>';
-				$i++;
-			}
-			echo '<tr><td colspan="3" align="center"><input type="submit" name="post_changes" value="'.$Language->getText('tracker_admin_add_users','update_permissions').'" />
-			</form></td></tr>';
-
-			echo $GLOBALS['HTML']->listTableBottom();
-
-		}
-		?>
-		<p> </p>
-		<?php echo $Language->getText('tracker_admin_add_users','add_user_info') ?>
-		<div align="center">
-		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-		<input type="hidden" name="add_users" value="y" />
-		<?php
-		$sql="SELECT u.user_id, u.realname 
-			FROM users u,user_group ug
-			WHERE u.user_id=ug.user_id
-			AND ug.group_id='$group_id' 
-			AND NOT EXISTS (SELECT user_id FROM artifact_perm ap 
-			WHERE ap.group_artifact_id='$atid'
-			AND ap.user_id=u.user_id);";
-
-		$res=db_query($sql);
-		echo db_error();
-		echo html_build_multiple_select_box ($res,'addids[]',array(),8,false);
-		echo '<p>
-		<input type="submit" name="post_changes" value="'.$Language->getText('tracker_admin_add_users','add_users').'" /> <input type="checkbox" name="add_all" /> '.$Language->getText('tracker_admin_add_users','add_all_users').'</p>
-		</form>
-		</div>';
-
-		$ath->footer(array());
-*/
 	} elseif ($update_canned) {
-//
-//	FORM TO UPDATE CANNED MESSAGES
-//
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_update_canned','title', $ath->getName())));
 
-		echo "<h1>".$Language->getText('tracker_admin_update_canned','title', $ath->getName())."</h1>";
+		include ('form-updatecanned.php');
 
-		$acr = new ArtifactCanned($ath,$id);
-		if (!$acr || !is_object($acr)) {
-			$feedback .= 'Unable to create ArtifactCanned Object';
-		} elseif ($acr->isError()) {
-			$feedback .= $acr->getErrorMessage();
-		} else {
-			?>
-			<p><?php echo $Language->getText('tracker_admin_add_canned','canned_response_info') ?></p>
-			<p>
-			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-			<input type="hidden" name="update_canned" value="y" />
-			<input type="hidden" name="id" value="<?php echo $acr->getID(); ?>" />
-			<strong><?php echo $Language->getText('tracker_admin_add_canned','canned_response_title') ?>:</strong><br />
-			<input type="text" name="title" value="<?php echo $acr->getTitle(); ?>" size="50" maxlength="50" />
-			<p>
-			<strong><?php echo $Language->getText('tracker_admin_add_canned','canned_response_body') ?>:</strong><br />
-			<textarea name="body" rows="30" cols="65" wrap="hard"><?php echo $acr->getBody(); ?></textarea></p>
-			<p>
-			<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
-			</form></p>
-			<?php
-		}
-		$ath->footer(array());
-
 	} elseif ($update_box) {
-//
-//  FORM TO UPDATE POP-UP BOXES
-//
-		/*
-			Allow modification of a artifact Selection Box
-		*/
-		$ath->adminHeader(array('title'=>$Language->getText('tracker_admin_build_boxes','box_update_title',$ath->getName())));
 
+		include ('form-updateextrafield.php');
 
-		echo '
-			<h2>'.$Language->getText('tracker_admin_build_boxes','box_update_title',$ath->getName()).'</h2>';
-
-		$ac = new ArtifactSelectionBox($ath,$id);
-		if (!$ac || !is_object($ac)) {
-			$feedback .= 'Unable to create ArtifactSelectionBox Object';
-		} elseif ($ac->isError()) {
-			$feedback .= $ac->getErrorMessage();
-		} else {
-			?>
-			<p>
-			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&id='.$id.'&boxid='.$box.'&atid='.$ath->getID(); ?>" method="post">
-			<input type="hidden" name="update_box" value="y" />
-			<input type="hidden" name="id" value="<?php echo $ac->getID(); ?>" />
-			<p>
-			<strong><?php echo $Language->getText('tracker_admin_build_boxes','box_name') ?>:</strong><br />
-			<input type="text" name="name" value="<?php echo $ac->getName(); ?>" /></p>
-			<p>
-			<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_build_boxes','box_change_warning') ?>
-				</span></strong></p>
-			<p>
-			<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
-			</form></p>
-			<?php
-		}
-
-		$ath->footer(array());
-
 	} elseif ($update_opt) {
-//
-//  FORM TO UPDATE POP-UP CHOICES FOR A BOX
-//
-		/*
-			Allow modification of a Choice for a Pop-up Box
-		*/
-		$ath->adminHeader(array('title'=>$Language->getText('tracker_admin_build_boxes','opt_update_title',$ath->getName())));
 
-		echo '
-			<h2>'.$Language->getText('tracker_admin_build_boxes','opt_update_title',$ath->getName()).'</h2>';
+		include ('form-updateextrafieldelement.php');
 
-		$ao = new ArtifactBoxOptions($ath,$id);
-		if (!$ao || !is_object($ao)) {
-			$feedback .= 'Unable to create ArtifactSelectionBox Object';
-		} elseif ($ao->isError()) {
-			$feedback .= $ao->getErrorMessage();
-		} else {
-
-			?>
-			<p>
-			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-			<input type="hidden" name="update_opt" value="y" />
-			<input type="hidden" name="id" value="<?php echo $ao->getID(); ?>" />
-
-			<p>
-			<strong><?php echo $Language->getText('tracker_admin_build_boxes','opt_name') ?>:</strong><br />
-			<input type="text" name="name" value="<?php echo $ao->getName(); ?>" /></p>
-			<p>
-			<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_build_boxes','box_change_warning') ?>
-				</span></strong></p>
-			<p>
-			<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
-			</form></p>
-			<?php
-		}
-
-		$ath->footer(array());
-
 	} elseif ($update_cat) {
-//
-//  FORM TO UPDATE CATEGORIES
-//
-		/*
-			Allow modification of a artifact category
-		*/
-		$ath->adminHeader(array('title'=>$Language->getText('tracker_admin_update_cat','title',$ath->getName())));
 
-		echo '
-			<h1>'.$Language->getText('tracker_admin_update_cat','title',$ath->getName()).'</h1>';
+		include ('form-updatecategory.php');
 
-		$ac = new ArtifactCategory($ath,$id);
-		if (!$ac || !is_object($ac)) {
-			$feedback .= 'Unable to create ArtifactCategory Object';
-		} elseif ($ac->isError()) {
-			$feedback .= $ac->getErrorMessage();
-		} else {
-			?>
-			<p>
-			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-			<input type="hidden" name="update_cat" value="y" />
-			<input type="hidden" name="id" value="<?php echo $ac->getID(); ?>" />
-			<p>
-			<strong><?php echo $Language->getText('tracker_admin_update_cat','category_name') ?>:</strong><br />
-			<input type="text" name="name" value="<?php echo $ac->getName(); ?>" /></p>
-			<p>
-			<strong><?php echo $Language->getText('tracker_admin_update_cat','auto_assign_to') ?>:</strong><br />
-			<?php echo $ath->technicianBox('assign_to',$ac->getAssignee()); ?></p>
-			<p>
-			<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_update_cat','category_change_warning') ?>
-				</span></strong></p>
-			<p>
-			<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
-			</form></p>
-			<?php
-		}
-
-		$ath->footer(array());
-
 	} elseif ($update_group) {
-//
-//  FORM TO UPDATE GROUPS
-//
-		/*
-			Allow modification of a artifact group
-		*/
-		$ath->adminHeader(array('title'=>$Language->getText('tracker_admin_update_group','title',$ath->getName()),'pagename'=>'tracker_admin_update_group','titlevals'=>array($ath->getName())));
 
-		$ag = new ArtifactGroup($ath,$id);
-		if (!$ag || !is_object($ag)) {
-			$feedback .= 'Unable to create ArtifactGroup Object';
-		} elseif ($ag->isError()) {
-			$feedback .= $ag->getErrorMessage();
-		} else {
-			?>
-			<p>
-			<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-			<input type="hidden" name="update_group" value="y" />
-			<input type="hidden" name="id" value="<?php echo $ag->getID(); ?>" />
-			<p>
-			<strong><?php echo $Language->getText('tracker_admin','group_name') ?>:</strong><br />
-			<input type="text" name="name" value="<?php echo $ag->getName(); ?>" /></p>
-			<p>
-			<strong><span style="color:red"><?php echo $Language->getText('tracker_admin_update_group','warning') ?></span></strong></p>
-			<p>
-			<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
-			</form></p>
-			<?php
-		}
+		include ('form-updategroup.php');
 
-		$ath->footer(array());
-
 	} elseif ($delete) {
 
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin','delete', $ath->getName())));
+		include ('form-deletetracker.php');
 
-		?>
-		<p>
-		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-		<input type="hidden" name="delete" value="y" /><br />
-		<?php echo $Language->getText('tracker_admin','delete_warning'); ?>
-		<p>
-		<input type="checkbox" name="sure" value="1"><?php echo $Language->getText('tracker_admin','sure') ?><br />
-		<input type="checkbox" name="really_sure" value="1"><?php echo $Language->getText('tracker_admin','really_sure') ?><br />
-		<p>
-		<input type="submit" name="post_changes" value="<?php echo $Language->getText('tracker_admin','delete') ?>" /></p>
-		</form></p>
-		<?php
-
-		$ath->footer(array());
-
 	} elseif ($update_type) {
-//
-//	FORM TO UPDATE ARTIFACT TYPES
-//
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin_update_type','title', $ath->getName()),'pagename'=>'tracker_admin_update_type','titlevals'=>array($ath->getName())));
 
-		?>
-		<p>
-		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID(); ?>" method="post">
-		<input type="hidden" name="update_type" value="y" />
-		<p>
-		<?php echo $Language->getText('tracker_admin_update_type','name') ?><br />
-		<?php if ($ath->getDataType()) {
-			echo $ath->getName();
-		} else { 
-			?>
-			<input type="text" name="name" value="<?php echo $ath->getName(); ?>" /></p>
-			<?php 
-		} 
-		?>
-		<p>
-		<strong><?php echo $Language->getText('tracker_admin_update_type','description') ?>:</strong><br />
-		<?php if ($ath->getDataType()) {
-			echo $ath->getDescription();
-		} else {
-			?>
-			<input type="text" name="description" value="<?php echo $ath->getDescription(); ?>" size="50" /></p>
-			<?php 
-		} 
-		?>
-		<p>
-<!--		<input type="checkbox" name="is_public" value="1" <?php echo (($ath->isPublic())?'checked="checked"':''); ?> /> <strong><?php echo $Language->getText('tracker_admin_update_type','publicy_available') ?></strong><br />
-		<input type="checkbox" name="allow_anon" value="1" <?php echo (($ath->allowsAnon())?'checked="checked"':''); ?> /> <strong><?php echo $Language->getText('tracker_admin_update_type','allow_anonymous') ?></strong><br />
--->		<input type="checkbox" name="use_resolution" value="1" <?php echo (($ath->useResolution())?'checked="checked"':''); ?> /> <strong><?php echo $Language->getText('tracker_admin_update_type','display_resolution') ?></strong></p>
-		<p>
-		<strong><?php echo $Language->getText('tracker_admin_update_type','send_submissions') ?>:</strong><br />
-		<input type="text" name="email_address" value="<?php echo $ath->getEmailAddress(); ?>" /></p>
-		<p>
-		<input type="checkbox" name="email_all" value="1" <?php echo (($ath->emailAll())?'checked="checked"':''); ?> /> <strong><?php echo $Language->getText('tracker_admin_update_type','email_all_changes') ?></strong><br /></p>
-		<p>
-		<strong><?php echo $Language->getText('tracker_admin_update_type','days_overdue') ?>:</strong><br />
-		<input type="text" name="due_period" value="<?php echo ($ath->getDuePeriod() / 86400); ?>" /></p>
-		<p> 
-		<strong><?php echo $Language->getText('tracker_admin_update_type','pending_timeout') ?>:</strong><br />
-		<input type="text" name="status_timeout"  value="<?php echo($ath->getStatusTimeout() / 86400); ?>" /></p>
-		<p>
-		<strong><?php echo $Language->getText('tracker_admin_update_type','submit_item_form_text') ?>:</strong><br />
-		<textarea name="submit_instructions" rows="10" cols="55" wrap="hard"><?php echo $ath->getSubmitInstructions(); ?></textarea></p>
-		<p>
-		<strong><?php echo $Language->getText('tracker_admin_update_type','browse_item_form_text') ?>:</strong><br />
-		<textarea name="browse_instructions" rows="10" cols="55" wrap="hard"><?php echo $ath->getBrowseInstructions(); ?></textarea></p>
-		<p>
-		<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
-		</form></p>
-		<?php
+		include ('form-updatetracker.php');
 
-		$ath->footer(array());
-
 	} else {
-//
-//  SHOW LINKS TO FUNCTIONS
-//
 
-		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin','title').': '.$ath->getName(),'pagename'=>'tracker_admin','titlevals'=>array($ath->getName())));
-//
-//	Reference to build a selection box for a tracker like bugs, etc
-//
-		echo '<p>
-			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&build_box=1"><strong>'.$Language->getText('tracker_admin','build_selection_box').'</strong></a><br />
-			'.$Language->getText('tracker_admin','build_selection_box_info').'</p>';
-		echo '<p>
-			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_cat=1"><strong>'.$Language->getText('tracker_admin','add_categories').'</strong></a><br />
-			'.$Language->getText('tracker_admin','add_categories_info').'</p>';
-		echo '<p>
-			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_group=1"><strong>'.$Language->getText('tracker_admin','add_groups').'</strong></a><br />
-			'.$Language->getText('tracker_admin','add_group_infos').'</p>';
-		echo '<p>
-			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_canned=1"><strong>'.$Language->getText('tracker_admin','add_canned_responses').'</strong></a><br />
-			'.$Language->getText('tracker_admin','add_canned_responses_info').'</p>';
-		echo '<p>
-			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&delete=1"><strong>'.$Language->getText('tracker_admin','delete').'</strong></a><br />
-			'.$Language->getText('tracker_admin','permanently_delete_info').'</p>';
-		echo '<p>
-			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&update_type=1"><strong>'.$Language->getText('tracker_admin','update_preferences').'</strong></a><br />
-			'.$Language->getText('tracker_admin','update_preferences_info').'.</p>';
+		include ('tracker.php');
 
-		$ath->footer(array());
 	}
 
 } elseif ($group_id) {
 
-	//
-	//  get the Group object
-	//
-	$group =& group_get_object($group_id);
-	if (!$group || !is_object($group) || $group->isError()) {
-		exit_no_group();
-	}
+	include ('ind.php');
 
-	$perm =& $group->getPermission( session_get_user() );
-
-	if ($post_changes) {
-
-		if (!$perm || !is_object($perm) || !$perm->isArtifactAdmin()) {
-			exit_permission_denied();
-		}
-
-		if ($add_at) {
-			$res=new ArtifactTypeHtml($group);
-			if (!$res->create($name,$description,$is_public,$allow_anon,$email_all,$email_address,
-				$due_period,$use_resolution,$submit_instructions,$browse_instructions)) {
-				$feedback .= $res->getErrorMessage();
-			} else {
-				header ("Location: /tracker/admin/?group_id=$group_id&atid=".$res->getID()."&update_users=1");
-			}
-
-		}
-	}
-
-
-	//
-	//	Display existing artifact types
-	//
-	$atf = new ArtifactTypeFactory($group);
-	if (!$group || !is_object($group) || $group->isError()) {
-		exit_error('Error','Could Not Get ArtifactTypeFactory');
-	}
-
-	$at_arr =& $atf->getArtifactTypes();
-
-	//required params for site_project_header();
-	$params['group']=$group_id;
-	$params['toptab']='tracker';
-	$params['pagename']='tracker_admin_choose';
-	$params['title'] = $page_title;
-	$params['sectionvals']=array(group_getname($group_id));
-	
-	echo site_project_header($params);
-	echo $HTML->subMenu(
-		array(
-			$Language->getText('group','short_tracker'),
-			$Language->getText('tracker','reporting'),
-			$Language->getText('tracker','admin')
-		),
-		array(
-			'/tracker/?group_id='.$group_id,
-			'/tracker/reporting/?group_id='.$group_id,
-			'/tracker/admin/?group_id='.$group_id
-		)
-	);
-
-	if (!$at_arr || count($at_arr) < 1) {
-		echo "<h1>".$Language->getText('tracker_admin','no_trackers_found')."</h1>";
-		echo "<p> </p>";
-	} else {
-
-		echo '
-		<p>'.$Language->getText('tracker_admin','choose_datatype').'.</p>';
-
-		/*
-			Put the result set (list of forums for this group) into a column with folders
-		*/
-		$tablearr=array($Language->getText('group','short_tracker'),$Language->getText('tracker_admin_update_type','description'));
-		echo $HTML->listTableTop($tablearr);
-
-		for ($j = 0; $j < count($at_arr); $j++) {
-			echo '
-			<tr '. $HTML->boxGetAltRowStyle($j) . '>
-				<td><a href="/tracker/admin/?atid='. $at_arr[$j]->getID() . '&group_id='.$group_id.'">' .
-					html_image("ic/tracker20w.png","20","20",array("border"=>"0")) . '  '.
-					$at_arr[$j]->getName() .'</a>
-				</td>
-				<td>'.$at_arr[$j]->getDescription() .'
-				</td>
-			</tr>';
-		}
-		echo $HTML->listTableBottom();
-	}
-
-	//
-	//	Set up blank ArtifactType
-	//
-
-	if (!$perm || !is_object($perm) || !$perm->isArtifactAdmin()) {
-		//show nothing
-	} else {
-
-	?><?php echo $Language->getText('tracker_admin','intro') ?>
-	<p>
-	<form action="<?php echo $PHP_SELF.'?group_id='.$group_id; ?>" method="post">
-	<input type="hidden" name="add_at" value="y" />
-	<p>
-	<?php echo $Language->getText('tracker_admin_update_type','name') ?><br />
-	<input type="text" name="name" value=""></p>
-	<p>
-	<strong><?php echo $Language->getText('tracker_admin_update_type','description') ?>:</strong><br />
-	<input type="text" name="description" value="" size="50" /></p>
-	<p>
-	<input type="checkbox" name="is_public" value="1" /> <strong><?php echo $Language->getText('tracker_admin_update_type','publicy_available') ?></strong><br />
-	<input type="checkbox" name="allow_anon" value="1" /> <strong><?php echo $Language->getText('tracker_admin_update_type','allow_anonymous') ?></strong><br />
-	<input type="checkbox" name="use_resolution" value="1" /> <strong><?php echo $Language->getText('tracker_admin_update_type','display_resolution') ?></strong></p>
-	<p>
-	<strong><?php echo $Language->getText('tracker_admin_update_type','send_submissions') ?>:</strong><br />
-	<input type="text" name="email_address" value="" /></p>
-	<p>
-	<input type="checkbox" name="email_all" value="1" /> <strong><?php echo $Language->getText('tracker_admin_update_type','email_all_changes') ?></strong><br /></p>
-	<p>
-	<strong><?php echo $Language->getText('tracker_admin_update_type','days_overdue') ?>:</strong><br />
-	<input type="text" name="due_period" value="30" /></p>
-	<p>
-	<strong><?php echo $Language->getText('tracker_admin_update_type','pending_timeout') ?>:</strong><br />
-	<input type="text" name="status_timeout" value="14" /></p>
-	<p>
-	<strong><?php echo $Language->getText('tracker_admin_update_type','submit_item_form_text') ?>:</strong><br />
-	<textarea name="submit_instructions" rows="10" cols="55" wrap="hard"></textarea></p>
-	<p>
-	<strong><?php echo $Language->getText('tracker_admin_update_type','browse_item_form_text') ?>:</strong><br />
-	<textarea name="browse_instructions" rows="10" cols="55" wrap="hard"></textarea></p>
-	<p>
-	<input type="submit" name="post_changes" value="<?php echo $Language->getText('general','submit') ?>" /></p>
-	</form></p>
-	<?php
-	}
-
-	echo site_project_footer(array());
-
 } else {
 
 	//browse for group first message

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/tracker.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/tracker.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/tracker.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,31 @@
+<?php
+//
+//  SHOW LINKS TO FUNCTIONS
+//
+
+		$ath->adminHeader(array ('title'=>$Language->getText('tracker_admin','title').': '.$ath->getName(),'pagename'=>'tracker_admin','titlevals'=>array($ath->getName())));
+//
+//	Reference to build a selection box for a tracker like bugs, etc
+//
+		echo '<p>
+			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_extrafield=1"><strong>'.$Language->getText('tracker_admin','build_selection_box').'</strong></a><br />
+			'.$Language->getText('tracker_admin','build_selection_box_info').'</p>';
+		echo '<p>
+			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_cat=1"><strong>'.$Language->getText('tracker_admin','add_categories').'</strong></a><br />
+			'.$Language->getText('tracker_admin','add_categories_info').'</p>';
+		echo '<p>
+			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_group=1"><strong>'.$Language->getText('tracker_admin','add_groups').'</strong></a><br />
+			'.$Language->getText('tracker_admin','add_group_infos').'</p>';
+		echo '<p>
+			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&add_canned=1"><strong>'.$Language->getText('tracker_admin','add_canned_responses').'</strong></a><br />
+			'.$Language->getText('tracker_admin','add_canned_responses_info').'</p>';
+		echo '<p>
+			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&delete=1"><strong>'.$Language->getText('tracker_admin','delete').'</strong></a><br />
+			'.$Language->getText('tracker_admin','permanently_delete_info').'</p>';
+		echo '<p>
+			<a href="'.$PHP_SELF.'?group_id='.$group_id.'&atid='.$ath->getID().'&update_type=1"><strong>'.$Language->getText('tracker_admin','update_preferences').'</strong></a><br />
+			'.$Language->getText('tracker_admin','update_preferences_info').'.</p>';
+
+		$ath->footer(array());
+
+?>

Added: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/updates.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/updates.php	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/admin/updates.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -0,0 +1,308 @@
+<?php
+		//
+		//	Create an extra field
+		//
+		if ($add_extrafield) {
+
+			$ab = new ArtifactExtraField($ath);
+		
+			if (!$ab || !is_object($ab)) {
+				$feedback .= 'Unable to create ArtifactExtraField Object';
+//			} elseif ($ab->isError())
+//				$feedback .= $ab->getErrorMessage();			
+			} else {
+				if (!$ab->create($name)) {
+					$feedback .= $Language->getText('tracker_admin_build_boxes','error_inserting_box').': '.$ab->getErrorMessage();
+					$ab->clearError();
+				} else {
+					$feedback .= $Language->getText('tracker_admin_build_boxes','box_name_inserted');
+				}
+			}
+
+		//
+		//	Add an option to a box
+		//
+		} elseif ($add_opt) {
+			$ao = new ArtifactExtraFieldElement($ath);
+			if (!$ao || !is_object($ao)) {
+				$feedback .= 'Unable to create ArtifactExtraFieldElement Object';
+//			} elseif ($ao->isError())
+//				$feedback .= $ao->getErrorMessage();			
+			} else {
+				if (!$ao->create($name,$boxid)) {
+					$feedback .= $Language->getText('tracker_admin_build_boxes','error_inserting_choice').': '.$ao->getErrorMessage();
+					$ao->clearError();
+				} else {
+					$feedback .= $Language->getText('tracker_admin_build_boxes','choice_inserted');
+				}
+		//		$add_opt= false;
+		//		$build_box= true;
+				
+			}
+
+		//
+		//	Add a category
+		//
+		} elseif ($add_cat) {
+
+			$ac = new ArtifactCategory($ath);
+			if (!$ac || !is_object($ac)) {
+				$feedback .= 'Unable to create ArtifactCategory Object';
+//			} elseif ($ac->isError()) {
+//				$feedback .= $ac->getErrorMessage();			
+			} else {
+				if (!$ac->create($name,$assign_to)) {
+					$feedback .= $Language->getText('tracker_admin','error_inserting').': '.$ac->getErrorMessage();
+					$ac->clearError();
+				} else {
+					$feedback .= $Language->getText('tracker_admin','category_inserted');
+				}
+			}
+
+		//
+		//	Add a group
+		//
+		} elseif ($add_group) {
+
+			$ag = new ArtifactGroup($ath);
+			if (!$ag || !is_object($ag)) {
+				$feedback .= 'Unable to create ArtifactGroup Object';
+//			} elseif ($ag->isError()) {
+//				$feedback .= $ag->getErrorMessage();
+			} else {
+				if (!$ag->create($name)) {
+					$feedback .= $Language->getText('tracker_admin','error_inserting').' : '.$ag->getErrorMessage();
+					$ag->clearError();
+				} else {
+					$feedback .= $Language->getText('tracker_admin','group_inserted');
+				}
+			}
+
+		//
+		//	Add a canned response
+		//
+		} elseif ($add_canned) {
+
+			$acr = new ArtifactCanned($ath);
+			if (!$acr || !is_object($acr)) {
+				$feedback .= 'Unable to create ArtifactCanned Object';
+//			} elseif ($acr->isError()) {
+//				$feedback .= $acr->getErrorMessage();			
+			} else { 
+				if (!$acr->create($title,$body)) {
+					$feedback .= $Language->getText('tracker_admin','error_inserting').' : '.$acr->getErrorMessage();
+					$acr->clearError();
+				} else {
+					$feedback .= $Language->getText('tracker_admin','canned_response_inserted');
+				}
+			}
+
+		//
+		//	Update a canned response
+		//
+		} elseif ($update_canned) {
+
+			$acr = new ArtifactCanned($ath,$id);
+			if (!$acr || !is_object($acr)) {
+				$feedback .= 'Unable to create ArtifactCanned Object';
+			} elseif ($acr->isError()) {
+				$feedback .= $acr->getErrorMessage();
+			} else {
+				if (!$acr->update($title,$body)) {
+					$feedback .= $Language->getText('tracker_admin','error_updating').' : '.$acr->getErrorMessage();
+					$acr->clearError();
+				} else {
+					$feedback .= $Language->getText('tracker_admin','canned_response_updated');
+					$update_canned=false;
+					$add_canned=true;
+				}
+			}
+
+		//
+		//	Copy Categories
+		//
+		} elseif ($copy_opt) {
+			$copy_rows=count($copyid);
+			$tracker_rows=count($selectid);
+			if ($tracker_rows > 0 && $copy_rows > 0) {
+				for ($i=0; $i < $tracker_rows; $i++) {
+					//
+					// create an object for each selected type
+					//
+					$result = db_query("SELECT * FROM artifact_extra_field_list 
+						WHERE extra_field_id='$selectid[$i]'");
+					$typeid = db_result($result,0,'group_artifact_id');
+					$athcp = new ArtifactTypeHtml($group,$typeid);
+					if (!$athcp || !is_object($athcp)) {
+						exit_error('Error','ArtifactType could not be created');
+					}
+					if ($athcp->isError()) {
+						exit_error($Language->getText('general','error'),$athcp->getErrorMessage());
+					}
+					//
+					//  Copy choices into a field (box) for each tracker selected 
+					//
+					$feedback .= 'From Tracker: ';
+					$feedback .= $athcp->getName();				
+					$feedback .= ' into Tracker: ';
+					$feedback .= $athcp->getName();
+					$aef =new ArtifactExtraField($athcp,$selectid[$i]);
+					$feedback .= ', Box: ';
+					$feedback .= $aef->getName();
+					$feedback .= '<br />';
+			
+					$aefe = new ArtifactExtraFieldElement($athcp);
+					if (!$aefe || !is_object($aefe)) {
+						$feedback .= 'Unable to create ArtifactExtraFieldElement Object';
+					} elseif ($aefe->isError()) {
+						$feedback .= $aefe->getErrorMessage();			
+					} else {
+						for ($k=0; $k < $copy_rows; $k++) {
+							$name=$ath->getElementName($copyid[$k]);
+							if (!$aefe->create($name,$selectid[$i])) {
+								$feedback .= $Language->getText('tracker_admin_build_boxes','error_inserting_choice').': '.$aefe->getErrorMessage();
+								$aefe->clearError();
+							} else {
+/*
+//WTF IS THIS?
+								unset ($abo);
+								$abo = new ArtifactExtraFieldElement($athcp);
+								if (!$abo || !is_object($abo)) {
+									$feedback .= 'Unable to create ArtifactExtraFieldElement Object';
+								} elseif ($abo->isError()) {
+									$feedback .= $abo->getErrorMessage();			
+								} else { 
+*/
+									$feedback .= '- Copied choice:';
+									$feedback .= $name;
+/*
+								}
+								$feedback .= '<br />';
+								unset($ab);
+*/
+							}
+						} 
+					}
+				}
+//				unset ($abo);
+//				unset ($athcp);
+				$feedback .= '<br />';
+			
+			} else {
+				$feedback .= 'you are required to select both one or more choices and one or more trackers';
+			}
+
+		//
+		//	Update an extra field
+		//
+		} elseif ($update_box) {
+
+			$ac = new ArtifactExtraField($ath,$id);
+			if (!$ac || !is_object($ac)) {
+				$feedback .= 'Unable to create ArtifactExtraField Object';
+			} elseif ($ac->isError()) {
+				$feedback .= $ac->getErrorMessage();
+			} else {
+				if (!$ac->update($name)) {
+					$feedback .= $Language->getText('tracker_admin_build_boxes','error_updating').' : '.$ac->getErrorMessage();
+					$ac->clearError();
+				} else {
+					$feedback .= $Language->getText('tracker_admin_build_boxes','box_name_updated');
+					$update_box=false;
+					$add_extrafield=true;
+				}
+			}
+
+		//
+		//	Update an option 
+		//
+		} elseif ($update_opt) {
+
+			$ao = new ArtifactExtraFieldElement($ath,$id);
+			if (!$ao || !is_object($ao)) {
+				$feedback .= 'Unable to create ArtifactExtraFieldElement Object';
+			} elseif ($ao->isError()) {
+				$feedback .= $ao->getErrorMessage();
+			} else {
+				if (!$ao->update($name,$boxid,$id)) {
+					$feedback .= $Language->getText('tracker_admin_build_boxes','error_updating').' : '.$ao->getErrorMessage();
+					$ao->clearError();
+				} else {
+					$feedback .= $Language->getText('tracker_admin_build_boxes','choice_updated');
+					$update_opt=false;
+					$add_extrafield=true;
+				}
+			}
+
+		//
+		//	Update ArtifactCategory
+		//
+		} elseif ($update_cat) {
+
+			$ac = new ArtifactCategory($ath,$id);
+			if (!$ac || !is_object($ac)) {
+				$feedback .= 'Unable to create ArtifactCategory Object';
+			} elseif ($ac->isError()) {
+				$feedback .= $ac->getErrorMessage();
+			} else {
+				if (!$ac->update($name,$assign_to)) {
+					$feedback .= $Language->getText('tracker_admin','error_updating').' : '.$ac->getErrorMessage();
+					$ac->clearError();
+				} else {
+					$feedback .= $Language->getText('tracker_admin','category_updated');
+					$update_cat=false;
+					$add_cat=true;
+				}
+			}
+
+		//
+		//	Update an artifact group select box
+		//
+		} elseif ($update_group) {
+
+			$ag = new ArtifactGroup($ath,$id);
+			if (!$ag || !is_object($ag)) {
+				$feedback .= 'Unable to create ArtifactGroup Object';
+			} elseif ($ag->isError()) {
+				$feedback .= $ag->getErrorMessage();
+			} else {
+				if (!$ag->update($name)) {
+					$feedback .= $Language->getText('tracker_admin','error_updating').' : '.$ag->getErrorMessage();
+					$ag->clearError();
+				} else {
+					$feedback .= $Language->getText('tracker_admin','group_updated');
+					$update_group=false;
+					$add_group=true;
+				}
+			}
+
+		//
+		//	Update a tracker
+		//
+		} elseif ($update_type) {
+
+			if (!$ath->update($name,$description,$email_all,$email_address,
+				$due_period,$status_timeout,$use_resolution,$submit_instructions,$browse_instructions)) {
+				$feedback .= $Language->getText('tracker_admin','error_updating').' : '.$ath->getErrorMessage();
+				$ath->clearError();
+			} else {
+				$feedback .= $Language->getText('tracker_admin','tracker_updated');
+			}
+
+		//
+		//	Delete a tracker
+		//
+		} elseif ($delete) {
+
+			if (!$ath->delete($sure,$really_sure)) {
+				$feedback .= $Language->getText('tracker_admin','error_updating').' : '.$ath->getErrorMessage();
+				unset($ath);
+				$delete=0;
+				$atid=0;
+			} else {
+				$feedback .= $Language->getText('tracker_admin','deleted');
+			}
+
+		}
+
+?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/browse.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/browse.php	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/browse.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -139,8 +139,9 @@
 /**
  *
  *  Build pop-up boxes for BROWSE boxes and choices configured by ADMIN
+BEING REBUILT BY AARON FARR
  *
- */
+ * /
 echo '<tr>';
 	$result=$ath->getSelectionBoxes();
 	$rows=db_numrows($result);
@@ -149,7 +150,7 @@
 		echo '<tr>';
 		for ($i=0; $i < $rows; $i++) {
 			$newrow=is_integer(($i+1)/5);
-			echo '<td><span style="font-size:smaller">'.db_result($result,$i,'selection_box_name').'</span></br \>';
+			echo '<td><span style="font-size:smaller">'.db_result($result,$i,'field_name').'</span></br \>';
 			
 			$choice=$extra_fields_choice[$i];
 			echo $ath->selectionBox(db_result($result,$i,'id'),$choice,$Language->getText('tracker_admin_build_boxes','status_any'));
@@ -160,6 +161,7 @@
 		}
 	}
 	echo '</tr>';
+*/
 	echo '<tr>
 		<td align="right"><span style="font-size:smaller">'.$Language->getText('tracker_browse','sort_by').': <a href="javascript:help_window(\'/help/tracker.php?helpname=sort_by\')"><strong>(?)</strong></a></span></td>'.
 		'<td><span style="font-size:smaller">'. 
@@ -176,7 +178,9 @@
 
 if ($art_arr && count($art_arr) > 0) {
 
-	if ($set=='custom') {
+	/*if ($set=='custom') {
+//BEING REDONE BY AARON FARR
+
 	//
 	// validate that any admin configured extra fields meet its selection criteria
 
@@ -221,7 +225,8 @@
 				$art_arr=array_values($art_arr);
 			}
 		}		
-	}
+	}*/
+
 	if ($set=='custom') {
 		$set .= '&_assigned_to='.$_assigned_to.'&_status='.$_status.'&_category='.$_category.'&_group='.$_group.'&_sort_col='.$_sort_col.'&_sort_ord='.$_sort_ord;
 	}
@@ -339,7 +344,7 @@
 			</tr>';
 
 
-		//
+/*		//
 		//	build input pop-up boxes for boxes and choices configured by ADMIN
 		//
 		$result=$ath->getSelectionBoxes();
@@ -349,7 +354,7 @@
 			echo '<tr>';
 			for ($i=0; $i < $rows; $i++) {
 				$newrow= is_integer($i/2);
-				echo '<td><strong>'.db_result($result,$i,'selection_box_name').'</strong><br \>';
+				echo '<td><strong>'.db_result($result,$i,'field_name').'</strong><br \>';
 				echo $ath->selectionBox(db_result($result,$i,'id'),'xzxz',$Language->getText('tracker_browse','no_change'));
 		
 				if (!$newrow) {
@@ -357,6 +362,7 @@
 				}
 			}
 		}
+*/
 		echo   '<tr>
 			<td><strong>'.$Language->getText('tracker','priority').': <a href="javascript:help_window(\'/help/tracker.php?helpname=priority\')"><strong>(?)</strong></a>
 				</strong><br />';

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/detail.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/detail.php	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/detail.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -65,34 +65,10 @@
 			<td><strong><?php echo $Language->getText('tracker','status') ?>:</strong><br /><?php echo $ah->getStatusName(); ?></td>
 		</tr>
 
-	<?php
-//
-//	build input pop-up boxes for boxes and choices configured by ADMIN
-//
-   	$result=$ath->getSelectionBoxes();
-	$resultc=$ath->getArtifactChoices($ah->getID()); 
-	echo "<p> </p>";
-   	$rows=db_numrows($result);
-	$origrows=db_numrows($resultc);	
-	if ($result &&$rows > 0) {
-		echo '<tr>';
-		for ($i=0; $i < $rows; $i++) {
-			$newrow= is_integer($i/2);
-			
-			echo '<td><strong>'.db_result($result,$i,'selection_box_name').'</strong><br \>';
-			$resulto=$ath->getBoxOptionsName(db_result($resultc,$i,'choice_id'));
-			
-			if (($i < $origrows) && (db_result($resultc,$i,'choice_id') !== '100')) {
-				echo db_result($resulto,'0','box_options_name');
-			}else{
-				echo 'None';
-			}
-			if (!$newrow) {
-				echo '</tr><tr>';
-			}
-		}
-	}
-	?>
+    <?php
+        $ath->renderExtraFields($ah->getExtraFieldData(),true);
+    ?>
+
 		<tr><td colspan="2"><strong><?php echo $Language->getText('tracker','summary') ?>:</strong><br /><?php echo $ah->getSummary(); ?></td></tr>
 
 		<form action="<?php echo $PHP_SELF; ?>?group_id=<?php echo $group_id; ?>&atid=<?php echo $ath->getID(); ?>" METHOD="POST">

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/include/ArtifactTypeHtml.class
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/include/ArtifactTypeHtml.class	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/include/ArtifactTypeHtml.class	2011-02-24 16:36:28 UTC (rev 10039)
@@ -13,6 +13,8 @@
 
 
 require_once('common/tracker/ArtifactType.class');
+require_once('common/tracker/ArtifactExtraField.class');
+require_once('common/tracker/ArtifactExtraFieldElement.class');
 
 class ArtifactTypeHtml extends ArtifactType {
 
@@ -43,24 +45,19 @@
 		$labels = array();
 		$links  = array();
 
-		$labels[] = $Language->getText('group','short_tracker');
-		$links[]  = '/tracker/?group_id='.$group_id;
-
+		$labels[] = $this->getName().': '.$Language->getText('tracker_artifacttype','browse');
+		$links[]  = '/tracker/?func=browse&group_id='.$group_id.'&atid='. $this->getID();
 		$labels[] = $Language->getText('tracker_artifacttype','submit_new');
 		$links[]  = '/tracker/?func=add&group_id='.$group_id.'&atid='. $this->getID();
-		$labels[] = $Language->getText('tracker_artifacttype','browse');
-		$links[]  = '/tracker/?func=browse&group_id='.$group_id.'&atid='. $this->getID();
 
 		if (session_loggedin()) {
 			$labels[] = $Language->getText('tracker_artifacttype','reporting');
 			$links[]  = '/tracker/reporting/?group_id='.$group_id.'&atid='. $this->getID();
 		}
 		$labels[] = $Language->getText('tracker_artifacttype','admin');
-		$links[]  = '/tracker/admin/?group_id='.$group_id;
+		$links[]  = '/tracker/admin/?group_id='.$group_id.'&atid='.$this->getID();
 
 		echo $HTML->subMenu($labels,$links);
-
-		echo '<h3>'.$Language->getText('tracker', 'pagetitle').': <a href="/tracker/?group_id='.$group_id.'&atid='.$this->getID().'">'.$this->getName().'</a></h3><p>';
 	}
 
 	function footer($params) {
@@ -70,47 +67,74 @@
 	function adminHeader($params) {
 		global $Language;
 		echo $this->header($params);
-		$group_id= $this->Group->getID();
-		echo '<strong>'.$Language->getText('tracker_artifacttype','admin_functions').': <a href="/tracker/admin/?group_id='.$group_id.'">'.$Language->getText('tracker_artifacttype','add_artifact_types').'</a>';
-		echo ' | <a href="/tracker/admin/?group_id='.$group_id.'&atid='. $this->getID() .'">'.$Language->getText('tracker_artifacttype','edit_options').': '. $this->getName() .'</a></strong>';
+//		$group_id= $this->Group->getID();
+//		echo '<strong>'.$Language->getText('tracker_artifacttype','admin_functions').': <a href="/tracker/admin/?group_id='.$group_id.'">'.$Language->getText('tracker_artifacttype','add_artifact_types').'</a>';
+//		echo ' | <a href="/tracker/admin/?group_id='.$group_id.'&atid='. $this->getID() .'">'.$Language->getText('tracker_artifacttype','edit_options').': '. $this->getName() .'</a></strong>';
 	}
-	/**
-	 *	buildPopUpBoxes - presents the pop-up boxes and choices  
-	 *	configured by the admin
-	 */
-	 	function buildPopUpBoxes () {
-			global $Language, $group_id;
-   			$result=$this->getSelectionBoxes(); 
-			echo "<p> </p>";
-   			$rows=db_numrows($result);
-			if ($result &&$rows > 0) {
-				echo '<tr>';
-				for ($i=0; $i < $rows; $i++) {
-				$newrow= is_integer($i/2);
-				echo '<td><strong>'.db_result($result,$i,'selection_box_name').'</strong><br \>';
-				echo $this->selectionBox(db_result($result,$i,'id'));
-				echo ' <a href="/tracker/admin/?group_id='.$group_id.'&atid='. $this->getID() . '&build_box=1">('.$Language->getText('tracker','admin').')</a>';
-				if (!$newrow) {
-					echo '</tr><tr>';
-				}
+
+	function renderExtraFields($selected=array(),$show_100=false,$text_100='none') {
+		$efarr =& $this->getExtraFields();
+		$count=count($efarr);
+		//each two columns, we'll reset this and start a new row
+
+//TODO - add code for "display only" such as mod-limited and detail.php pages
+
+		$col_count=0;
+		for ($i=0; $i<$count; $i++) {
+			if ($efarr[$i]['field_type'] == ARTIFACT_EXTRAFIELDTYPE_SELECT) {
+
+				echo '
+					<td width="50%"><strong>'.$efarr[$i]['field_name'].'</strong><br />'.
+						$this->renderSelect($efarr[$i]['extra_field_id'],$selected[$efarr[$i]['extra_field_id']],$show_100,$text_100).'</td>';
+
+
+			} elseif ($efarr[$i]['field_type'] == ARTIFACT_EXTRAFIELDTYPE_CHECKBOX) {
+//TODO
+
+			} elseif ($efarr[$i]['field_type'] == ARTIFACT_EXTRAFIELDTYPE_RADIO) {
+//TODO
+
+			} elseif ($efarr[$i]['field_type'] == ARTIFACT_EXTRAFIELDTYPE_TEXT) {
+//TODO
+
+			} elseif ($efarr[$i]['field_type'] == ARTIFACT_EXTRAFIELDTYPE_TEXTAREA) {
+//TODO
+
+			} elseif ($efarr[$i]['field_type'] == ARTIFACT_EXTRAFIELDTYPE_MULTISELECT) {
+//TODO
+
 			}
+			$col_count++;
+			//we've done two columns - if there are more to do, start a new row
+			if (($col_count == 2) && ($i != $count-1)) {
+				echo '
+				</tr>
+				<tr>';
+			}
 		}
 	}
+
 	/**
-	 *	selectionBox - this function builds pop up
+	 *	renderSelect - this function builds pop up
 	 *	box with choices.
 	 *	
-	 *	@param		int 	The result set
+	 *	@param		int 	The ID of this field.
 	 *	@param 		string	The item that should be checked
+	 *	@param		string	Whether to show the '100 row'
 	 *	@param		string	What to call the '100 row'
 	 *	@return		box and choices	
 	 */	
-	function selectionBox ($name,$checked='xzxz',$text_100='none') {
+	function renderSelect ($extra_field_id,$checked='xzxz',$show_100=false,$text_100='none') {
 		global $Language;
 		if ($text_100 == 'none'){
 			$text_100=$Language->getText('tracker_artifacttype','none');
 		}
-		return html_build_select_box ($this->getSelectionBoxOptions($name),'extra_fields_choice[]',$checked,true,$text_100);
+		$arr =& $this->getExtraFieldElements($extra_field_id);
+		for ($i=0; $i<count($arr); $i++) {
+			$keys[$i]=$arr[$i]['element_id'];
+			$vals[$i]=$arr[$i]['element_name'];
+		}
+		return html_build_select_box_from_arrays ($keys,$vals,'extra_fields['.$extra_field_id.']',$checked,$show_100,$text_100);
 	}
 
 	function categoryBox ($name='category_id',$checked='xzxz',$text_100='none') {

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/ind.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/ind.php	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/ind.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -17,28 +17,18 @@
 //required params for site_project_header();
 $params['group']=$group_id;
 $params['toptab']='tracker';
-$params['pagename']='tracker';
-$params['sectionvals']=array($group->getPublicName());
 
 echo site_project_header($params);
 echo $HTML->subMenu(
 	array(
-		$Language->getText('group','short_tracker'),
 		$Language->getText('tracker','reporting'),
 		$Language->getText('tracker','admin')
 	),
 	array(
-		'/tracker/?group_id='.$group_id,
 		'/tracker/reporting/?group_id='.$group_id,
 		'/tracker/admin/?group_id='.$group_id
-		
 	)
 );
-/*
-echo '<strong><a href="/tracker/reporting/?group_id='.$group_id.'">'.$Language->getText('tracker','reporting').'</a> | '
-	 .'<a href="/tracker/admin/?group_id='.$group_id.'">'.$Language->getText('tracker','admin').'</a>'
-	 .'</strong><p>';
-*/
 
 if (!$at_arr || count($at_arr) < 1) {
 	echo "<h1>".$Language->getText('tracker','no_trackers')."</h1>";

Deleted: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/massupdate-fields.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/massupdate-fields.php	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/massupdate-fields.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -1,53 +0,0 @@
-<?php
-/**
- * massupdate-fields.php - code to handle mass updating admin defined fields for * artifacts   
- *
- * Copyright 2004 (c) Anthony J. Pugliese
- *
- * @version   $Id$
- *
- * 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  US
- */
-$result=$ath->getSelectionBoxes();
-$resultc=$ath->getArtifactChoices($ah->getID());
-$rows=db_numrows($result);
-$setrows=db_numrows($resultc);
-$transferct=0;
-$changect=0;
-if($result &&$rows > 0) {
-	for ($j=0; $j < $rows; $j++){
-		if ($j < $setrows) {
-			if ($extra_fields_choice[$j] != 100){ 
-				if (db_result($resultc,$j,'choice_id') !== ($extra_fields_choice[$j])) {
-					
-					$ah->updateExtraFields(db_result($resultc,$j,'id'),$extra_fields_choice[$j]);
-					$old=(db_result($resultc,$j,'choice_id'));
-					$oldnames =$ath->getBoxOptionsName($old);
-					$ah->addHistory(db_result($result,$j,'selection_box_name'),db_result($oldnames,'0','box_options_name'));
-					$changect=$changect+1;
-				}
-			}	
-			}else {
-				$ah->createExtraFields($extra_fields_choice[$j]);
-			if ($extra_fields_choice[$j] !=='100') {
-				$transferct=$transferct+1;
-			}
-		}		
-	}
-}			
-?>
-

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod-limited.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod-limited.php	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod-limited.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -85,32 +85,10 @@
 		</td>
 	</tr>
 
-	<?php
-//
-//	build input pop-up boxes for boxes and choices configured by ADMIN
-//
-   	$result=$ath->getSelectionBoxes();
-	$resultc=$ath->getArtifactChoices($ah->getID()); 
-	echo "<p> </p>";
-   	$rows=db_numrows($result);
-	$origrows=db_numrows($resultc);
-	if ($result &&$rows > 0) {
-		echo '<tr>';
-		for ($i=0; $i < $rows; $i++) {
-			$newrow= is_integer($i/2);
-			echo '<td><strong>'.db_result($result,$i,'selection_box_name').'</strong><br \>';
-			$resulto = $ath->getBoxOptionsName(db_result($resultc,$i,'choice_id'));
-			if (($i < $origrows) && (db_result($resultc,$i,'choice_id') !== '100')) {
-				echo db_result($resulto,'0','box_options_name');
-			} else {
-				echo 'None';
-			}
-			if (!$newrow) {
-				echo '</tr><tr>';
-			}
-		}
-	}
-	?>
+    <?php
+        $ath->renderExtraFields($ah->getExtraFieldData(),true);
+    ?>
+
 	<tr>
 		<td><strong><?php echo $Language->getText('tracker','assigned_to')?>: <a href="javascript:help_window('/help/tracker.php?helpname=assignee')"><strong>(?)</strong></a></strong><br />
 		<?php

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod.php	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/mod.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -122,38 +122,9 @@
 	</tr>
 
 	<?php
-//
-//	build input pop-up boxes for boxes and choices configured by ADMIN
-//
-	$result=$ath->getSelectionBoxes();
-	$result1=$ath->getArtifactChoices($ah->getID());
-	$rows=db_numrows($result); 
-	echo "<p> </p>";
-   	$origrows=db_numrows($result1);
-	if ($result && $rows> 0) {
-		echo '<tr>';
-		for ($i=0; $i < $origrows; $i++) {
-			$newrow= is_integer($i/2);
-			echo '<td><strong>'.db_result($result,$i,'selection_box_name').'</strong><br \>';
-			echo $ath->selectionBox(db_result($result,$i,'id'),db_result($result1,$i,'choice_id'));
-			echo ' <a href="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&build_box=1">('.$Language->getText('tracker','admin').')</a>';
-			if (!$newrow) {
-			echo '</tr><tr>';
-			}
-		}	
-		if ($rows-$origrows > 0){
-			for ($i=$origrows; $i < $rows; $i++){
-				$newrow= is_integer($i/2);
-				echo '<td><strong>'.db_result($result,$i,'selection_box_name').'</strong><br \>';
-				echo $ath->selectionBox(db_result($result,$i,'id'),db_result($result1,$i,'choice_id'));
-				echo ' <a href="/tracker/admin/?group_id='.$group_id.'&atid='. $ath->getID() .'&build_box=1">('.$Language->getText('tracker','admin').')</a>';
-				if (!$newrow) {
-					echo '</tr><tr>';
-				}
-			}
-		}
-	}
+		$ath->renderExtraFields($ah->getExtraFieldData(),true);
 	?>
+
 	<tr>
 		<td><strong><?php echo $Language->getText('tracker','assigned_to')?>: <a href="javascript:help_window('/help/tracker.php?helpname=assignee')"><strong>(?)</strong></a></strong><br />
 		<?php

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/tracker.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/tracker.php	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/tracker.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -52,24 +52,10 @@
 					exit_error('ERROR', $Language->getText('general','invalid_email'));
 				}
 			}
-			if (!$ah->create($category_id,$artifact_group_id,$summary,$details,$assigned_to,$priority, $user_email)) {
+			if (!$ah->create($category_id,$artifact_group_id,$summary,$details,$assigned_to,$priority,$extra_fields)) {
 				exit_error('ERROR',$ah->getErrorMessage());
 			} else {
 				//
-				// Include extra fields configured by ADMIN
-				//
-					
-				$result=$ath->getSelectionBoxes();
-				$rows=db_numrows($result);
-					
-				if ($result && $rows > 0) {
-					for ($i=0; $i < $rows; $i++) {
-					$ah->createExtraFields($extra_fields_choice[$i]);
-					}
-					unset ($extra_fields_choice);
-				}
-					
-				//
 				//	Attach file to this Artifact.
 				//
 				if ($add_file) {
@@ -120,16 +106,14 @@
 					$was_error=true;
 				}
 
-		include('massupdate-fields.php');
-				if (($was_error==true) && ($changect==0) && ($transferct==0)) {
+				if ($was_error) {
 					$feedback .= ' ID: '.$artifact_id_list[$i].'::'.$ah->getErrorMessage();
 				}else {
 					$was_error=false;
 				}
 			}
 			unset($ah);
-			
-			
+
 		if (!$was_error) {
 			$feedback = $Language->getText('tracker','updated_successful');			}
 		}
@@ -162,7 +146,7 @@
 				$delete_file=false;
 			}
 			if (!$ah->update($priority,$status_id,$category_id,$artifact_group_id,$resolution_id,
-				$assigned_to,$summary,$canned_response,$details,$new_artfact_type_id)) {
+				$assigned_to,$summary,$canned_response,$details,$new_artfact_type_id,$extra_fields)) {
 				$feedback =$Language->getText('tracker','tracker_item'). ': '.$ah->getErrorMessage();
 				$ah->clearError();
 				$was_error=true;
@@ -214,17 +198,9 @@
 			//
 			//	Show just one feedback entry if no errors
 			//
-			include ('update-fields.php');
-			if (!$was_error ||  $changect>0 || $transferct>0) {
+			if (!$was_error) {
 				$feedback = $Language->getText('general','update_successful');
-			if ($ath->getID()!==$new_artfact_type_id){
-				if (!$ah->nullExtraFields($artifact_id)){
-//TODO ERROR HERE???
-//
-				}
 			}
-				
-			}
 			include ('browse.php');
 		}
 		break;
@@ -285,9 +261,9 @@
 			exit_error('ERROR','Artifact Could Not Be Created');			} else if ($ah->isError()) {
 			exit_error('ERROR',$ah->getErrorMessage());
 		} else {
-			if ($ath->userIsAdmin() || (session_loggedin() && ($ah->getSubmittedBy() == user_getid()))) {
+			if ($ath->userIsAdmin()) {
 				include 'mod.php';
-			} elseif ($ath->userIsTechnician()) {
+			} elseif ($ath->userIsTechnician() || (session_loggedin() && ($ah->getSubmittedBy() == user_getid()))) {
 				include 'mod-limited.php';
 			} else {
 				include 'detail.php';
@@ -300,4 +276,5 @@
 		break;
 	}
 }
+
 ?>

Deleted: trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/update-fields.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/update-fields.php	2011-02-24 16:36:26 UTC (rev 10038)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/tracker/update-fields.php	2011-02-24 16:36:28 UTC (rev 10039)
@@ -1,51 +0,0 @@
-<?php
-/**
- * update-fields.php - Code to update artifacts with fields configured by admin
- *
- * Copyright 2004 (c) Anthony J. Pugliese
- *
- * @version   $Id$
- *
- * 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  US
- */
-$result=$ath->getSelectionBoxes();
-$resultc=$ath->getArtifactChoices($ah->getID());
-$rows=db_numrows($result);
-$setrows=db_numrows($resultc);
-$changect=0;
-$transferct=0;
-if($result &&$rows > 0) {
-	for ($i=0; $i < $rows; $i++) {
-	if ($i < $setrows) {
-		if (db_result($resultc,$i,'choice_id') != $extra_fields_choice[$i]){
-			$ah->updateExtraFields(db_result($resultc,$i,'id'),$extra_fields_choice[$i]);
-			$old=(db_result($resultc,$i,'choice_id'));
-			$oldnames=$ath->getBoxOptionsName($old);
-			$ah->addHistory(db_result($result,$i,'selection_box_name'),db_result($oldnames,'0','box_options_name'));				
-			$changect=$changect+1;
-		}	
-		}else{
-			$ah->createExtraFields($extra_fields_choice[$i]);
-		if ($extra_fields_choice[$i] !== '100') {
-			$transferct=$transferct+1;
-		}
-		}
-	}
-	unset ($extra_fields_choice);
-}	
-?>
-



More information about the evolvis-commits mailing list