From 8e13b38a7db4efe39f8da346ecf16fe6be01ed82 Mon Sep 17 00:00:00 2001
From: Kenson Man <kenson.idv.hk@gmail.com>
Date: Sun, 2 Jun 2013 22:39:39 +0800
Subject: [PATCH 1/6] Create the related schema successfully

---
 admin/schema.php |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/admin/schema.php b/admin/schema.php
index d2b6940..ac8a1a0 100644
--- a/admin/schema.php
+++ b/admin/schema.php
@@ -198,7 +198,8 @@ $upgrade[] = Array('CreateTableSQL',Array(db_get_table('mantis_news_table'),"
 $upgrade[] = Array('CreateTableSQL',Array(db_get_table('mantis_project_category_table'),"
   project_id 		 I  UNSIGNED NOTNULL PRIMARY DEFAULT '0',
   category 		C(64) NOTNULL PRIMARY DEFAULT \" '' \",
-  user_id 		 I  UNSIGNED NOTNULL DEFAULT '0'
+  user_id 		 I  UNSIGNED NOTNULL DEFAULT '0',
+  desc_template         C(250) NOTNULL DEFAULT \" '' \"
 ",Array('mysql' => 'ENGINE=MyISAM DEFAULT CHARSET=utf8', 'pgsql' => 'WITHOUT OIDS')));
 $upgrade[] = Array('CreateTableSQL',Array(db_get_table('mantis_project_file_table'),"
   id 			 I  UNSIGNED NOTNULL PRIMARY AUTOINCREMENT,
@@ -397,7 +398,8 @@ $upgrade[] = Array( 'CreateTableSQL', Array( db_get_table( 'mantis_category_tabl
 	project_id		I		UNSIGNED NOTNULL DEFAULT '0',
 	user_id			I		UNSIGNED NOTNULL DEFAULT '0',
 	name			C(128)	NOTNULL DEFAULT \" '' \",
-	status			I		UNSIGNED NOTNULL DEFAULT '0'
+	status			I		UNSIGNED NOTNULL DEFAULT '0',
+	desc_template           C(256)  NOTNULL DEFAULT \" '' \"
 	", Array( 'mysql' => 'ENGINE=MyISAM DEFAULT CHARSET=utf8', 'pgsql' => 'WITHOUT OIDS' ) ) );
 $upgrade[] = Array( 'CreateIndexSQL', Array( 'idx_category_project_name', db_get_table( 'mantis_category_table' ), 'project_id, name', array( 'UNIQUE' ) ) );
 $upgrade[] = Array( 'InsertData', Array( db_get_table( 'mantis_category_table' ), "
-- 
1.7.10.2 (Apple Git-33)


From d7312cadf15237656e10ffc16ec2672e4e925140 Mon Sep 17 00:00:00 2001
From: Kenson Man <kenson.idv.hk@gmail.com>
Date: Sun, 2 Jun 2013 23:50:31 +0800
Subject: [PATCH 2/6] Just modify/added the template input field

---
 core/category_api.php                |   17 ++++++++++-------
 lang/strings_chinese_simplified.txt  |    1 +
 lang/strings_chinese_traditional.txt |    1 +
 lang/strings_english.txt             |    1 +
 manage_proj_cat_add.php              |    3 ++-
 manage_proj_cat_edit_page.php        |    9 +++++++++
 manage_proj_edit_page.php            |    1 +
 manage_proj_page.php                 |   11 ++++++++++-
 8 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/core/category_api.php b/core/category_api.php
index e188d85..dfd6e84 100644
--- a/core/category_api.php
+++ b/core/category_api.php
@@ -105,10 +105,11 @@ function category_exists( $p_category_id ) {
  * Add a new category to the project
  * @param int $p_project_id Project id
  * @param string $p_name Category Name
+ * @param string $p_desc_template Description template
  * @return int Category ID
  * @access public
  */
- function category_add( $p_project_id, $p_name ) {
+ function category_add( $p_project_id, $p_name, $p_desc_template ) {
 	$c_project_id = db_prepare_int( $p_project_id );
 
 	if( is_blank( $p_name ) ) {
@@ -121,10 +122,10 @@ function category_exists( $p_category_id ) {
 	$t_category_table = db_get_table( 'mantis_category_table' );
 
 	$query = "INSERT INTO $t_category_table
-					( project_id, name )
+					( project_id, name, desc_template )
 				  VALUES
-					( " . db_param() . ', ' . db_param() . ' )';
-	db_query_bound( $query, array( $c_project_id, $p_name ) );
+					( " . db_param() . ', ' . db_param() . ', ' . db_param() . ' )';
+	db_query_bound( $query, array( $c_project_id, $p_name, $p_desc_template ) );
 
 	# db_query errors on failure so:
 	return db_insert_id( $t_category_table );
@@ -134,11 +135,12 @@ function category_exists( $p_category_id ) {
  * Update the name and user associated with the category
  * @param int $p_category_id Category id
  * @param string $p_name Category Name
+ * @param string $p_desc_template Description template
  * @param int $p_assigned_to User ID that category is assigned to
  * @return bool
  * @access public
  */
- function category_update( $p_category_id, $p_name, $p_assigned_to ) {
+ function category_update( $p_category_id, $p_name, $p_desc_template, $p_assigned_to ) {
 	if( is_blank( $p_name ) ) {
 		error_parameters( lang_get( 'category' ) );
 		trigger_error( ERROR_EMPTY_FIELD, ERROR );
@@ -154,9 +156,10 @@ function category_exists( $p_category_id ) {
 
 	$query = "UPDATE $t_category_table
 				  SET name=" . db_param() . ',
-					user_id=' . db_param() . '
+					user_id=' . db_param() . ',
+					desc_template=' . db_param() . '
 				  WHERE id=' . db_param();
-	db_query_bound( $query, array( $p_name, $c_assigned_to, $c_category_id ) );
+	db_query_bound( $query, array( $p_name, $c_assigned_to, $p_desc_template, $c_category_id ) );
 
 	# Add bug history entries if we update the category's name
 	if( $t_old_category['name'] != $p_name ) {
diff --git a/lang/strings_chinese_simplified.txt b/lang/strings_chinese_simplified.txt
index c4bda42..0008a67 100644
--- a/lang/strings_chinese_simplified.txt
+++ b/lang/strings_chinese_simplified.txt
@@ -516,6 +516,7 @@ $s_update_simple_link = '简易更新';
 $s_updating_bug_advanced_title = '正在更新问题信息';
 $s_id = '编号';
 $s_category = '分类';
+$s_category_desc_template = '描述模板';
 $s_severity = '严重性';
 $s_reproducibility = '出现频率';
 $s_date_submitted = '报告日期';
diff --git a/lang/strings_chinese_traditional.txt b/lang/strings_chinese_traditional.txt
index 2bf02e6..6ce0417 100644
--- a/lang/strings_chinese_traditional.txt
+++ b/lang/strings_chinese_traditional.txt
@@ -509,6 +509,7 @@ $s_update_simple_link = '簡易更新';
 $s_updating_bug_advanced_title = '更新問題資訊';
 $s_id = '編號';
 $s_category = '類別';
+$s_category_desc_template='描述模板'
 $s_severity = '嚴重性';
 $s_reproducibility = '出現頻率';
 $s_date_submitted = '回報日期';
diff --git a/lang/strings_english.txt b/lang/strings_english.txt
index c14081b..3215386 100644
--- a/lang/strings_english.txt
+++ b/lang/strings_english.txt
@@ -634,6 +634,7 @@ $s_steps_to_reproduce = 'Steps To Reproduce';
 $s_update_information_button = 'Update Information';
 $s_sticky_issue = 'Sticky Issue';
 $s_profile = 'Profile';
+$s_category_desc_template = 'Description Template';
 
 # bug_update_page.php
 $s_updating_bug_simple_title = 'Updating Issue Information';
diff --git a/manage_proj_cat_add.php b/manage_proj_cat_add.php
index 455651b..c900656 100644
--- a/manage_proj_cat_add.php
+++ b/manage_proj_cat_add.php
@@ -33,6 +33,7 @@
 
 	$f_project_id	= gpc_get_int( 'project_id' );
 	$f_name			= gpc_get_string( 'name' );
+	$f_desc_template = gpc_get_string('desc_template');
 
 	access_ensure_project_level( config_get( 'manage_project_threshold' ), $f_project_id );
 
@@ -51,7 +52,7 @@
 
 		$t_name = trim( $t_name );
 		if ( category_is_unique( $f_project_id, $t_name ) ) {
-			category_add( $f_project_id, $t_name );
+			category_add( $f_project_id, $t_name, $f_desc_template );
 		} else if ( 1 == $t_category_count ) {
 			# We only error out on duplicates when a single value was
 			#  given.  If multiple values were given, we just add the
diff --git a/manage_proj_cat_edit_page.php b/manage_proj_cat_edit_page.php
index 08b320e..1a761bb 100644
--- a/manage_proj_cat_edit_page.php
+++ b/manage_proj_cat_edit_page.php
@@ -36,6 +36,7 @@
 	$t_assigned_to = $t_row['user_id'];
 	$t_project_id = $t_row['project_id'];
 	$t_name = $t_row['name'];
+	$t_desc_template = $t_row['desc_template'];
 
 	access_ensure_project_level( config_get( 'manage_project_threshold' ), $t_project_id );
 
@@ -66,6 +67,14 @@
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
 	<td class="category">
+		<?php echo lang_get( 'category_desc_template' ) ?>
+	</td>
+	<td>
+		<textarea name="desc_template" row="3" cols="20"><?php echo string_attribute( $t_desc_template ) ?></textarea>
+	</td>
+</tr>
+<tr <?php echo helper_alternate_class() ?>>
+	<td class="category">
 		<?php echo lang_get( 'assigned_to' ) ?>
 	</td>
 	<td>
diff --git a/manage_proj_edit_page.php b/manage_proj_edit_page.php
index fd23a15..acd8b41 100644
--- a/manage_proj_edit_page.php
+++ b/manage_proj_edit_page.php
@@ -379,6 +379,7 @@ if ( access_has_global_level ( config_get( 'delete_project_threshold' ) ) ) { ?>
 			<?php echo form_security_field( 'manage_proj_cat_add' ) ?>
 			<input type="hidden" name="project_id" value="<?php echo $f_project_id ?>" />
 			<input type="text" name="name" size="32" maxlength="128" />
+			<textarea name="desc_template" row="3" cols="20"></textarea>
 			<input type="submit" class="button" value="<?php echo lang_get( 'add_category_button' ) ?>" />
 		</form>
 	</td>
diff --git a/manage_proj_page.php b/manage_proj_page.php
index dd333e8..7468d2a 100644
--- a/manage_proj_page.php
+++ b/manage_proj_page.php
@@ -221,7 +221,16 @@
 		<form method="post" action="manage_proj_cat_add.php">
 			<?php echo form_security_field( 'manage_proj_cat_add' ) ?>
 			<input type="hidden" name="project_id" value="<?php echo ALL_PROJECTS ?>" />
-			<input type="text" name="name" size="32" maxlength="128" />
+			<div style="vertical-align:top">
+				<div style="display:inline-block; vertical-align:top">
+					<div><?php echo lang_get ('category') ?></div>
+					<input type="text" name="name" size="32" maxlength="128" />
+				</div>
+				<div style="display:inline-block; vertical-align:top">
+					<div><?php echo lang_get ('category_desc_template') ?></div>
+					<textarea rows="3" cols="32" name="desc_template"></textarea>
+				</div>
+			</div>
 			<input type="submit" class="button" value="<?php echo lang_get( 'add_category_button' ) ?>" />
 		</form>
 	</td>
-- 
1.7.10.2 (Apple Git-33)


From f6e6cd9824e6e18e43156f353417029df13e54d4 Mon Sep 17 00:00:00 2001
From: Kenson Man <kenson.idv.hk@gmail.com>
Date: Mon, 3 Jun 2013 16:23:25 +0800
Subject: [PATCH 3/6] Alter the manipulation api of category, and also update
 the layout

---
 api/soap/mc_project_api.php |    3 ++-
 core/category_api.php       |   23 +++++++++++++++++++++++
 manage_proj_cat_update.php  |    3 ++-
 3 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/api/soap/mc_project_api.php b/api/soap/mc_project_api.php
index 6dd29f5..bd61315 100644
--- a/api/soap/mc_project_api.php
+++ b/api/soap/mc_project_api.php
@@ -272,9 +272,10 @@ function mc_project_rename_category_by_name( $p_username, $p_password, $p_projec
 
         // find the id of the category
         $p_category_id = category_get_id_by_name( $p_category_name, $p_project_id );
+	$p_desc_template = category_get_field( $p_category_id, 'desc_template');
 
         // update the category
-        return category_update( $p_category_id, $p_category_name_new, $p_assigned_to );
+        return category_update( $p_category_id, $p_category_name_new, $p_desc_template, $p_assigned_to );
 }
 
 /**
diff --git a/core/category_api.php b/core/category_api.php
index dfd6e84..85f6e96 100644
--- a/core/category_api.php
+++ b/core/category_api.php
@@ -610,3 +610,26 @@ function category_full_name( $p_category_id, $p_show_project = true, $p_current_
 		return $t_row['name'];
 	}
 }
+
+/**
+ * Retrieve the desc_template according to the category-id
+ */
+function category_get_desc_template_by_id( $p_category_name, $p_project_id, $p_trigger_errors = true ){ 
+	$t_category_table = db_get_table( 'mantis_category_table' );
+	$t_project_name = project_get_name( $p_project_id );
+
+	$t_query = "SELECT desc_template FROM $t_category_table
+				WHERE name=" . db_param() . " AND project_id=" . db_param();
+	$t_result = db_query_bound( $t_query, array( $p_category_name, (int) $p_project_id ) );
+	$t_count = db_num_rows( $t_result );
+	if( 1 > $t_count ) {
+		if( $p_trigger_errors ) {
+			error_parameters( $p_category_name, $t_project_name );
+			trigger_error( ERROR_CATEGORY_NOT_FOUND_FOR_PROJECT, ERROR );
+		} else {
+			return false;
+		}
+	}
+
+	return db_result( $t_result );
+}
diff --git a/manage_proj_cat_update.php b/manage_proj_cat_update.php
index 7d80b9e..7421ebe 100644
--- a/manage_proj_cat_update.php
+++ b/manage_proj_cat_update.php
@@ -35,6 +35,7 @@
 	$f_project_id		= gpc_get_int( 'project_id', ALL_PROJECTS );
 	$f_name				= trim( gpc_get_string( 'name' ) );
 	$f_assigned_to		= gpc_get_int( 'assigned_to', 0 );
+	$f_desc_template        = trim(gpc_get_string('desc_template'));
 
 	access_ensure_project_level( config_get( 'manage_project_threshold' ), $f_project_id );
 
@@ -51,7 +52,7 @@
 		category_ensure_unique( $t_project_id, $f_name );
 	}
 
-	category_update( $f_category_id, $f_name, $f_assigned_to );
+	category_update( $f_category_id, $f_name, $f_desc_template, $f_assigned_to );
 
 	form_security_purge( 'manage_proj_cat_update' );
 
-- 
1.7.10.2 (Apple Git-33)


From c3f44f3233f3e80b13c06f7d00daaf9d236f9c09 Mon Sep 17 00:00:00 2001
From: Kenson Man <kenson.idv.hk@gmail.com>
Date: Mon, 3 Jun 2013 17:35:42 +0800
Subject: [PATCH 4/6] Add the javascript for the desc-template

---
 bug_report_page.php |   14 ++++++++++++--
 core/print_api.php  |   20 ++++++++++++++++++++
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/bug_report_page.php b/bug_report_page.php
index f7cfdff..b1622da 100644
--- a/bug_report_page.php
+++ b/bug_report_page.php
@@ -197,7 +197,7 @@
 			<?php if ( $t_changed_project ) {
 				echo "[" . project_get_field( $t_bug->project_id, 'name' ) . "] ";
 			} ?>
-			<select <?php echo helper_get_tab_index() ?> name="category_id">
+			<select <?php echo helper_get_tab_index() ?> id="categoryIdFld" name="category_id" onchange="category_id_changed(this.options.selectedIndex)">
 				<?php
 					print_category_option_list( $f_category_id );
 				?>
@@ -480,7 +480,8 @@
 			<span class="required">*</span><?php print_documentation_link( 'description' ) ?>
 		</td>
 		<td>
-			<textarea <?php echo helper_get_tab_index() ?> name="description" cols="80" rows="10"><?php echo string_textarea( $f_description ) ?></textarea>
+			<textarea id="descTemplateTextArea" <?php echo helper_get_tab_index() ?> name="description" cols="80" rows="10"><?php echo string_textarea( $f_description ) ?></textarea>
+			<?php print_category_desc_templates($t_project_id) ?>
 		</td>
 	</tr>
 
@@ -623,6 +624,15 @@
 	window.document.report_bug_form.category_id.focus();
 -->
 </script>
+<!-- desc-template -->
+<script type="text/javascript" language="JavaScript"><!--
+	var category_id_changed=function( int_selectedIndex ){
+		if(int_selectedIndex<1)return;
+		var str_selectedValue=document.getElementById('categoryIdFld').options[int_selectedIndex].value;
+		var str_descTemplate=document.getElementById("desc_template_for_category_"+str_selectedValue).innerHTML;
+		document.getElementById('descTemplateTextArea').value=str_descTemplate;
+	};
+//--></script>
 <?php  }
 if ( $tpl_show_due_date ) {
 	date_finish_calendar( 'due_date', 'trigger' );
diff --git a/core/print_api.php b/core/print_api.php
index 6a36002..1903b29 100644
--- a/core/print_api.php
+++ b/core/print_api.php
@@ -718,6 +718,26 @@ function print_category_option_list( $p_category_id = 0, $p_project_id = null )
 }
 
 /**
+ *  Print all available category's desc-template into the invisible <div>. 
+ *  It will be used when the category field has been changed, the description content will be replaced by the text of those <div> tag.
+ *  @param p_project_id int The project id
+ */
+function print_category_desc_templates ($p_project_id = null){
+	if( null === $p_project_id ) {
+		$t_project_id = helper_get_current_project();
+	} else {
+		$t_project_id = $p_project_id;
+	}
+	$cat_arr = category_get_all_rows( $t_project_id, null, true );
+
+	foreach( $cat_arr as $t_category_row ) {
+		$t_category_id = $t_category_row['id'];
+		echo "<div id=\"desc_template_for_category_$t_category_id\" style=\"display:none\">";
+		echo $t_category_row['desc_template'] . '</div>';
+	}
+}
+
+/**
  *	Now that categories are identified by numerical ID, we need an old-style name
  *	based option list to keep existing filter functionality.
  *	@param string $p_category_name The selected category
-- 
1.7.10.2 (Apple Git-33)


From 645604df4f32be6e84ffd9f8731c7d7a909e23df Mon Sep 17 00:00:00 2001
From: Kenson Man <kenson.idv.hk@gmail.com>
Date: Mon, 3 Jun 2013 18:07:08 +0800
Subject: [PATCH 5/6] Configuration support for "use_desc_template"

---
 bug_report_page.php           |    5 +++--
 manage_proj_cat_edit_page.php |    3 ++-
 manage_proj_page.php          |    5 ++++-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/bug_report_page.php b/bug_report_page.php
index b1622da..dab9f6b 100644
--- a/bug_report_page.php
+++ b/bug_report_page.php
@@ -481,7 +481,7 @@
 		</td>
 		<td>
 			<textarea id="descTemplateTextArea" <?php echo helper_get_tab_index() ?> name="description" cols="80" rows="10"><?php echo string_textarea( $f_description ) ?></textarea>
-			<?php print_category_desc_templates($t_project_id) ?>
+			<?php if( ON == config_get( 'use_desc_template', ON)) print_category_desc_templates($t_project_id) ?>
 		</td>
 	</tr>
 
@@ -625,6 +625,7 @@
 -->
 </script>
 <!-- desc-template -->
+<?php if ( ON == config_get( 'use_desc_template', ON ) ) { ?>
 <script type="text/javascript" language="JavaScript"><!--
 	var category_id_changed=function( int_selectedIndex ){
 		if(int_selectedIndex<1)return;
@@ -633,7 +634,7 @@
 		document.getElementById('descTemplateTextArea').value=str_descTemplate;
 	};
 //--></script>
-<?php  }
+<?php  }}
 if ( $tpl_show_due_date ) {
 	date_finish_calendar( 'due_date', 'trigger' );
 }
diff --git a/manage_proj_cat_edit_page.php b/manage_proj_cat_edit_page.php
index 1a761bb..fa299f0 100644
--- a/manage_proj_cat_edit_page.php
+++ b/manage_proj_cat_edit_page.php
@@ -65,6 +65,7 @@
 		<input type="text" name="name" size="32" maxlength="128" value="<?php echo string_attribute( $t_name ) ?>" />
 	</td>
 </tr>
+<?php if( ON==config_get('use_desc_template', ON)) {?>
 <tr <?php echo helper_alternate_class() ?>>
 	<td class="category">
 		<?php echo lang_get( 'category_desc_template' ) ?>
@@ -72,7 +73,7 @@
 	<td>
 		<textarea name="desc_template" row="3" cols="20"><?php echo string_attribute( $t_desc_template ) ?></textarea>
 	</td>
-</tr>
+</tr><?php } ?>
 <tr <?php echo helper_alternate_class() ?>>
 	<td class="category">
 		<?php echo lang_get( 'assigned_to' ) ?>
diff --git a/manage_proj_page.php b/manage_proj_page.php
index 7468d2a..cae8822 100644
--- a/manage_proj_page.php
+++ b/manage_proj_page.php
@@ -223,13 +223,16 @@
 			<input type="hidden" name="project_id" value="<?php echo ALL_PROJECTS ?>" />
 			<div style="vertical-align:top">
 				<div style="display:inline-block; vertical-align:top">
-					<div><?php echo lang_get ('category') ?></div>
+					<?php if( ON == config_get( 'use_desc_template', ON ) ) ?>
+						<div><?php echo lang_get('category') ?></div>
 					<input type="text" name="name" size="32" maxlength="128" />
 				</div>
+				<?php if ( ON == config_get( 'use_desc_template', ON ) ) { ?>
 				<div style="display:inline-block; vertical-align:top">
 					<div><?php echo lang_get ('category_desc_template') ?></div>
 					<textarea rows="3" cols="32" name="desc_template"></textarea>
 				</div>
+				<?php } ?>
 			</div>
 			<input type="submit" class="button" value="<?php echo lang_get( 'add_category_button' ) ?>" />
 		</form>
-- 
1.7.10.2 (Apple Git-33)


From a96c885308d3fba00a482a97627812ad5261666e Mon Sep 17 00:00:00 2001
From: Kenson Man <kenson.idv.hk@gmail.com>
Date: Mon, 3 Jun 2013 22:08:52 +0800
Subject: [PATCH 6/6] Addiontal Information Template support

---
 admin/schema.php                     |    6 +++--
 api/soap/mc_project_api.php          |    3 ++-
 bug_report_page.php                  |   18 ++++++++++-----
 core/category_api.php                |   40 ++++++++++++++++++++++++++++------
 core/print_api.php                   |   20 +++++++++++++++++
 lang/strings_chinese_simplified.txt  |    1 +
 lang/strings_chinese_traditional.txt |    3 ++-
 lang/strings_english.txt             |    1 +
 manage_proj_cat_add.php              |    3 ++-
 manage_proj_cat_edit_page.php        |   10 +++++++++
 manage_proj_cat_update.php           |    3 ++-
 manage_proj_edit_page.php            |    3 ++-
 manage_proj_page.php                 |    9 +++++++-
 13 files changed, 100 insertions(+), 20 deletions(-)

diff --git a/admin/schema.php b/admin/schema.php
index ac8a1a0..ede823b 100644
--- a/admin/schema.php
+++ b/admin/schema.php
@@ -199,7 +199,8 @@ $upgrade[] = Array('CreateTableSQL',Array(db_get_table('mantis_project_category_
   project_id 		 I  UNSIGNED NOTNULL PRIMARY DEFAULT '0',
   category 		C(64) NOTNULL PRIMARY DEFAULT \" '' \",
   user_id 		 I  UNSIGNED NOTNULL DEFAULT '0',
-  desc_template         C(250) NOTNULL DEFAULT \" '' \"
+  desc_template         C(250) NOTNULL DEFAULT \" '' \",
+  addi_template         C(250) NOTNULL DEFAULT \" '' \"
 ",Array('mysql' => 'ENGINE=MyISAM DEFAULT CHARSET=utf8', 'pgsql' => 'WITHOUT OIDS')));
 $upgrade[] = Array('CreateTableSQL',Array(db_get_table('mantis_project_file_table'),"
   id 			 I  UNSIGNED NOTNULL PRIMARY AUTOINCREMENT,
@@ -399,7 +400,8 @@ $upgrade[] = Array( 'CreateTableSQL', Array( db_get_table( 'mantis_category_tabl
 	user_id			I		UNSIGNED NOTNULL DEFAULT '0',
 	name			C(128)	NOTNULL DEFAULT \" '' \",
 	status			I		UNSIGNED NOTNULL DEFAULT '0',
-	desc_template           C(256)  NOTNULL DEFAULT \" '' \"
+	desc_template           C(256)  NOTNULL DEFAULT \" '' \",
+	addi_template           C(256)  NOTNULL DEFAULT \" '' \"
 	", Array( 'mysql' => 'ENGINE=MyISAM DEFAULT CHARSET=utf8', 'pgsql' => 'WITHOUT OIDS' ) ) );
 $upgrade[] = Array( 'CreateIndexSQL', Array( 'idx_category_project_name', db_get_table( 'mantis_category_table' ), 'project_id, name', array( 'UNIQUE' ) ) );
 $upgrade[] = Array( 'InsertData', Array( db_get_table( 'mantis_category_table' ), "
diff --git a/api/soap/mc_project_api.php b/api/soap/mc_project_api.php
index bd61315..53fc406 100644
--- a/api/soap/mc_project_api.php
+++ b/api/soap/mc_project_api.php
@@ -273,9 +273,10 @@ function mc_project_rename_category_by_name( $p_username, $p_password, $p_projec
         // find the id of the category
         $p_category_id = category_get_id_by_name( $p_category_name, $p_project_id );
 	$p_desc_template = category_get_field( $p_category_id, 'desc_template');
+	$p_addi_template = category_get_field( $p_category_id, 'addi_template');
 
         // update the category
-        return category_update( $p_category_id, $p_category_name_new, $p_desc_template, $p_assigned_to );
+        return category_update( $p_category_id, $p_category_name_new, $p_desc_template, $p_addi_template, $p_assigned_to );
 }
 
 /**
diff --git a/bug_report_page.php b/bug_report_page.php
index dab9f6b..eeef6a7 100644
--- a/bug_report_page.php
+++ b/bug_report_page.php
@@ -502,7 +502,8 @@
 			<?php print_documentation_link( 'additional_information' ) ?>
 		</td>
 		<td>
-			<textarea <?php echo helper_get_tab_index() ?> name="additional_info" cols="80" rows="10"><?php echo string_textarea( $f_additional_info ) ?></textarea>
+			<textarea id="addiTemplateTextArea" <?php echo helper_get_tab_index() ?> name="additional_info" cols="80" rows="10"><?php echo string_textarea( $f_additional_info ) ?></textarea>
+			<?php if( ON == config_get( 'use_addi_template', ON)) print_category_addi_templates($t_project_id) ?>
 		</td>
 	</tr>
 <?php
@@ -625,16 +626,23 @@
 -->
 </script>
 <!-- desc-template -->
-<?php if ( ON == config_get( 'use_desc_template', ON ) ) { ?>
+<?php if ( (ON==config_get( 'use_desc_template', ON )) or (ON==config_get('use_addi_template', ON))) { ?>
 <script type="text/javascript" language="JavaScript"><!--
 	var category_id_changed=function( int_selectedIndex ){
 		if(int_selectedIndex<1)return;
 		var str_selectedValue=document.getElementById('categoryIdFld').options[int_selectedIndex].value;
+		//desc-template <?php if(ON==config_get('use_desc_template', ON)){ echo "\n"; ?>
 		var str_descTemplate=document.getElementById("desc_template_for_category_"+str_selectedValue).innerHTML;
-		document.getElementById('descTemplateTextArea').value=str_descTemplate;
+		document.getElementById('descTemplateTextArea').value=str_descTemplate;	
+		//end<?php } ?> 
+		//addi-template <?php if(ON==config_get('use_addi_template', ON)){ echo "\n"; ?>
+		var str_addiTemplate=document.getElementById("addi_template_for_category_"+str_selectedValue).innerHTML;
+		document.getElementById('addiTemplateTextArea').value=str_addiTemplate;	
+		//end<?php } ?>
+
 	};
-//--></script>
-<?php  }}
+//--></script> <?php } ?>
+<?php  }
 if ( $tpl_show_due_date ) {
 	date_finish_calendar( 'due_date', 'trigger' );
 }
diff --git a/core/category_api.php b/core/category_api.php
index 85f6e96..d924789 100644
--- a/core/category_api.php
+++ b/core/category_api.php
@@ -106,10 +106,11 @@ function category_exists( $p_category_id ) {
  * @param int $p_project_id Project id
  * @param string $p_name Category Name
  * @param string $p_desc_template Description template
+ * @param string $p_addi_template Additional Information template
  * @return int Category ID
  * @access public
  */
- function category_add( $p_project_id, $p_name, $p_desc_template ) {
+ function category_add( $p_project_id, $p_name, $p_desc_template, $p_addi_template ) {
 	$c_project_id = db_prepare_int( $p_project_id );
 
 	if( is_blank( $p_name ) ) {
@@ -122,10 +123,10 @@ function category_exists( $p_category_id ) {
 	$t_category_table = db_get_table( 'mantis_category_table' );
 
 	$query = "INSERT INTO $t_category_table
-					( project_id, name, desc_template )
+					( project_id, name, desc_template, addi_template )
 				  VALUES
-					( " . db_param() . ', ' . db_param() . ', ' . db_param() . ' )';
-	db_query_bound( $query, array( $c_project_id, $p_name, $p_desc_template ) );
+					( " . db_param() . ', ' . db_param() . ', ' . db_param() . ', ' . db_param() . ' )';
+	db_query_bound( $query, array( $c_project_id, $p_name, $p_desc_template, $p_addi_template ) );
 
 	# db_query errors on failure so:
 	return db_insert_id( $t_category_table );
@@ -136,11 +137,12 @@ function category_exists( $p_category_id ) {
  * @param int $p_category_id Category id
  * @param string $p_name Category Name
  * @param string $p_desc_template Description template
+ * @param string $p_addi_template Additional Information Template
  * @param int $p_assigned_to User ID that category is assigned to
  * @return bool
  * @access public
  */
- function category_update( $p_category_id, $p_name, $p_desc_template, $p_assigned_to ) {
+ function category_update( $p_category_id, $p_name, $p_desc_template, $p_addi_template, $p_assigned_to ) {
 	if( is_blank( $p_name ) ) {
 		error_parameters( lang_get( 'category' ) );
 		trigger_error( ERROR_EMPTY_FIELD, ERROR );
@@ -157,9 +159,10 @@ function category_exists( $p_category_id ) {
 	$query = "UPDATE $t_category_table
 				  SET name=" . db_param() . ',
 					user_id=' . db_param() . ',
-					desc_template=' . db_param() . '
+					desc_template=' . db_param() . ',
+					addi_template=' . db_param() . '
 				  WHERE id=' . db_param();
-	db_query_bound( $query, array( $p_name, $c_assigned_to, $p_desc_template, $c_category_id ) );
+	db_query_bound( $query, array( $p_name, $c_assigned_to, $p_desc_template, $p_addi_template, $c_category_id ) );
 
 	# Add bug history entries if we update the category's name
 	if( $t_old_category['name'] != $p_name ) {
@@ -633,3 +636,26 @@ function category_get_desc_template_by_id( $p_category_name, $p_project_id, $p_t
 
 	return db_result( $t_result );
 }
+
+/**
+ * Retrieve the addi_template according to the category-id
+ */
+function category_get_addi_template_by_id( $p_category_name, $p_project_id, $p_trigger_errors = true ){ 
+	$t_category_table = db_get_table( 'mantis_category_table' );
+	$t_project_name = project_get_name( $p_project_id );
+
+	$t_query = "SELECT addi_template FROM $t_category_table
+				WHERE name=" . db_param() . " AND project_id=" . db_param();
+	$t_result = db_query_bound( $t_query, array( $p_category_name, (int) $p_project_id ) );
+	$t_count = db_num_rows( $t_result );
+	if( 1 > $t_count ) {
+		if( $p_trigger_errors ) {
+			error_parameters( $p_category_name, $t_project_name );
+			trigger_error( ERROR_CATEGORY_NOT_FOUND_FOR_PROJECT, ERROR );
+		} else {
+			return false;
+		}
+	}
+
+	return db_result( $t_result );
+}
diff --git a/core/print_api.php b/core/print_api.php
index 1903b29..762173c 100644
--- a/core/print_api.php
+++ b/core/print_api.php
@@ -738,6 +738,26 @@ function print_category_desc_templates ($p_project_id = null){
 }
 
 /**
+ *  Print all available category's additional-information-template into the invisible <div>. 
+ *  It will be used when the category field has been changed, the addiription content will be replaced by the text of those <div> tag.
+ *  @param p_project_id int The project id
+ */
+function print_category_addi_templates ($p_project_id = null){
+	if( null === $p_project_id ) {
+		$t_project_id = helper_get_current_project();
+	} else {
+		$t_project_id = $p_project_id;
+	}
+	$cat_arr = category_get_all_rows( $t_project_id, null, true );
+
+	foreach( $cat_arr as $t_category_row ) {
+		$t_category_id = $t_category_row['id'];
+		echo "<div id=\"addi_template_for_category_$t_category_id\" style=\"display:none\">";
+		echo $t_category_row['addi_template'] . '</div>';
+	}
+}
+
+/**
  *	Now that categories are identified by numerical ID, we need an old-style name
  *	based option list to keep existing filter functionality.
  *	@param string $p_category_name The selected category
diff --git a/lang/strings_chinese_simplified.txt b/lang/strings_chinese_simplified.txt
index 0008a67..f3213c5 100644
--- a/lang/strings_chinese_simplified.txt
+++ b/lang/strings_chinese_simplified.txt
@@ -517,6 +517,7 @@ $s_updating_bug_advanced_title = '正在更新问题信息';
 $s_id = '编号';
 $s_category = '分类';
 $s_category_desc_template = '描述模板';
+$s_category_addi_template = '附注模板';
 $s_severity = '严重性';
 $s_reproducibility = '出现频率';
 $s_date_submitted = '报告日期';
diff --git a/lang/strings_chinese_traditional.txt b/lang/strings_chinese_traditional.txt
index 6ce0417..94cb489 100644
--- a/lang/strings_chinese_traditional.txt
+++ b/lang/strings_chinese_traditional.txt
@@ -509,7 +509,8 @@ $s_update_simple_link = '簡易更新';
 $s_updating_bug_advanced_title = '更新問題資訊';
 $s_id = '編號';
 $s_category = '類別';
-$s_category_desc_template='描述模板'
+$s_category_desc_template='描述模板';
+$s_category_addi_template='附註模板';
 $s_severity = '嚴重性';
 $s_reproducibility = '出現頻率';
 $s_date_submitted = '回報日期';
diff --git a/lang/strings_english.txt b/lang/strings_english.txt
index 3215386..2ac6d91 100644
--- a/lang/strings_english.txt
+++ b/lang/strings_english.txt
@@ -635,6 +635,7 @@ $s_update_information_button = 'Update Information';
 $s_sticky_issue = 'Sticky Issue';
 $s_profile = 'Profile';
 $s_category_desc_template = 'Description Template';
+$s_category_addi_template = 'Additional Information Template';
 
 # bug_update_page.php
 $s_updating_bug_simple_title = 'Updating Issue Information';
diff --git a/manage_proj_cat_add.php b/manage_proj_cat_add.php
index c900656..d170ddc 100644
--- a/manage_proj_cat_add.php
+++ b/manage_proj_cat_add.php
@@ -34,6 +34,7 @@
 	$f_project_id	= gpc_get_int( 'project_id' );
 	$f_name			= gpc_get_string( 'name' );
 	$f_desc_template = gpc_get_string('desc_template');
+	$f_addi_template = gpc_get_string('addi_template');
 
 	access_ensure_project_level( config_get( 'manage_project_threshold' ), $f_project_id );
 
@@ -52,7 +53,7 @@
 
 		$t_name = trim( $t_name );
 		if ( category_is_unique( $f_project_id, $t_name ) ) {
-			category_add( $f_project_id, $t_name, $f_desc_template );
+			category_add( $f_project_id, $t_name, $f_desc_template, $f_addi_template );
 		} else if ( 1 == $t_category_count ) {
 			# We only error out on duplicates when a single value was
 			#  given.  If multiple values were given, we just add the
diff --git a/manage_proj_cat_edit_page.php b/manage_proj_cat_edit_page.php
index fa299f0..1d8827d 100644
--- a/manage_proj_cat_edit_page.php
+++ b/manage_proj_cat_edit_page.php
@@ -37,6 +37,7 @@
 	$t_project_id = $t_row['project_id'];
 	$t_name = $t_row['name'];
 	$t_desc_template = $t_row['desc_template'];
+	$t_addi_template = $t_row['addi_template'];
 
 	access_ensure_project_level( config_get( 'manage_project_threshold' ), $t_project_id );
 
@@ -74,6 +75,15 @@
 		<textarea name="desc_template" row="3" cols="20"><?php echo string_attribute( $t_desc_template ) ?></textarea>
 	</td>
 </tr><?php } ?>
+<?php if( ON==config_get('use_addi_template', ON)) {?>
+<tr <?php echo helper_alternate_class() ?>>
+	<td class="category">
+		<?php echo lang_get( 'category_addi_template' ) ?>
+	</td>
+	<td>
+		<textarea name="addi_template" row="3" cols="20"><?php echo string_attribute( $t_addi_template ) ?></textarea>
+	</td>
+</tr><?php } ?>
 <tr <?php echo helper_alternate_class() ?>>
 	<td class="category">
 		<?php echo lang_get( 'assigned_to' ) ?>
diff --git a/manage_proj_cat_update.php b/manage_proj_cat_update.php
index 7421ebe..54d2bbe 100644
--- a/manage_proj_cat_update.php
+++ b/manage_proj_cat_update.php
@@ -36,6 +36,7 @@
 	$f_name				= trim( gpc_get_string( 'name' ) );
 	$f_assigned_to		= gpc_get_int( 'assigned_to', 0 );
 	$f_desc_template        = trim(gpc_get_string('desc_template'));
+	$f_addi_template        = trim(gpc_get_string('addi_template'));
 
 	access_ensure_project_level( config_get( 'manage_project_threshold' ), $f_project_id );
 
@@ -52,7 +53,7 @@
 		category_ensure_unique( $t_project_id, $f_name );
 	}
 
-	category_update( $f_category_id, $f_name, $f_desc_template, $f_assigned_to );
+	category_update( $f_category_id, $f_name, $f_desc_template, $f_addi_template, $f_assigned_to );
 
 	form_security_purge( 'manage_proj_cat_update' );
 
diff --git a/manage_proj_edit_page.php b/manage_proj_edit_page.php
index acd8b41..191bc9a 100644
--- a/manage_proj_edit_page.php
+++ b/manage_proj_edit_page.php
@@ -379,7 +379,8 @@ if ( access_has_global_level ( config_get( 'delete_project_threshold' ) ) ) { ?>
 			<?php echo form_security_field( 'manage_proj_cat_add' ) ?>
 			<input type="hidden" name="project_id" value="<?php echo $f_project_id ?>" />
 			<input type="text" name="name" size="32" maxlength="128" />
-			<textarea name="desc_template" row="3" cols="20"></textarea>
+			<?php if( ON==config_get('use_desc_template', ON)) {?><textarea name="desc_template" row="3" cols="20"></textarea><?php } ?>
+			<?php if( ON==config_get('use_addi_template', ON)) {?><textarea name="addi_template" row="3" cols="20"></textarea><?php } ?>
 			<input type="submit" class="button" value="<?php echo lang_get( 'add_category_button' ) ?>" />
 		</form>
 	</td>
diff --git a/manage_proj_page.php b/manage_proj_page.php
index cae8822..83ec6c5 100644
--- a/manage_proj_page.php
+++ b/manage_proj_page.php
@@ -223,8 +223,9 @@
 			<input type="hidden" name="project_id" value="<?php echo ALL_PROJECTS ?>" />
 			<div style="vertical-align:top">
 				<div style="display:inline-block; vertical-align:top">
-					<?php if( ON == config_get( 'use_desc_template', ON ) ) ?>
+					<?php if((ON==config_get('use_desc_template', ON)) or (ON==config_get('use_addi_template', ON))){ ?>
 						<div><?php echo lang_get('category') ?></div>
+					<?php } ?>
 					<input type="text" name="name" size="32" maxlength="128" />
 				</div>
 				<?php if ( ON == config_get( 'use_desc_template', ON ) ) { ?>
@@ -233,6 +234,12 @@
 					<textarea rows="3" cols="32" name="desc_template"></textarea>
 				</div>
 				<?php } ?>
+				<?php if ( ON == config_get( 'use_addi_template', ON ) ) { ?>
+				<div style="display:inline-block; vertical-align:top">
+					<div><?php echo lang_get ('category_addi_template') ?></div>
+					<textarea rows="3" cols="32" name="addi_template"></textarea>
+				</div>
+				<?php } ?>
 			</div>
 			<input type="submit" class="button" value="<?php echo lang_get( 'add_category_button' ) ?>" />
 		</form>
-- 
1.7.10.2 (Apple Git-33)

