Jelajahi Sumber

Implemented the three types of changes and factorized their lifecycle
Created incident/request/change dictionnaries

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@549 a333f486-631f-4898-b8df-5754b55c2be0

romainq 15 tahun lalu
induk
melakukan
f8e66f3ec2

+ 6 - 0
core/metamodel.class.php

@@ -1292,6 +1292,12 @@ abstract class MetaModel
 		self::$m_aTransitions[$sTargetClass][$sStateCode] = array();
 	}
 
+	public static function Init_OverloadStateAttribute($sStateCode, $sAttCode, $iFlags)
+	{
+		$sTargetClass = self::GetCallersPHPClass("Init");
+		self::$m_aStates[$sTargetClass][$sStateCode]['attribute_list'][$sAttCode] = $iFlags;
+	}
+
 	public static function Init_DefineStimulus($oStimulus)
 	{
 		$sTargetClass = self::GetCallersPHPClass("Init");

+ 296 - 12
modules/itop-change-mgmt-1.0.0/en.dict.itop-change-mgmt.php

@@ -23,6 +23,16 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
+Dict::Add('EN US', 'English', 'English', array(
+	'Menu:ChangeManagement' => 'Change management',
+	'Menu:WaitingAcceptance' => 'Changes awaiting acceptance',
+	'Menu:WaitingAcceptance+' => '',
+	'Menu:WaitingApproval' => 'Changes awaiting approval',
+	'Menu:WaitingApproval+' => '',
+	'Menu:Changes' => 'All changes',
+	'Menu:Changes+' => '',
+));
+
 // Dictionnay conventions
 // Class:<class_name>
 // Class:<class_name>+
@@ -33,19 +43,293 @@
 // Class:<class_name>/Stimulus:<stimulus_code>
 // Class:<class_name>/Stimulus:<stimulus_code>+
 
-//////////////////////////////////////////////////////////////////////
-// Classes in 'bizmodel'
-//////////////////////////////////////////////////////////////////////
+
+//
+// Class: Change
 //
 
-// Dictionnay conventions
-// Class:<class_name>
-// Class:<class_name>+
-// Class:<class_name>/Attribute:<attribute_code>
-// Class:<class_name>/Attribute:<attribute_code>+
-// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
-// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
-// Class:<class_name>/Stimulus:<stimulus_code>
-// Class:<class_name>/Stimulus:<stimulus_code>+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:Change' => 'Change',
+	'Class:Change+' => '',
+	'Class:Change/Attribute:start_date' => 'Planned startup',
+	'Class:Change/Attribute:start_date+' => '',
+	'Class:Change/Attribute:status' => 'Status',
+	'Class:Change/Attribute:status+' => '',
+	'Class:Change/Attribute:status/Value:new' => 'New',
+	'Class:Change/Attribute:status/Value:new+' => '',
+	'Class:Change/Attribute:status/Value:validated' => 'Validated',
+	'Class:Change/Attribute:status/Value:validated+' => '',
+	'Class:Change/Attribute:status/Value:rejected' => 'Rejected',
+	'Class:Change/Attribute:status/Value:rejected+' => '',
+	'Class:Change/Attribute:status/Value:assigned' => 'Assigned',
+	'Class:Change/Attribute:status/Value:assigned+' => '',
+	'Class:Change/Attribute:status/Value:plannedscheduled' => 'Planned and scheduled',
+	'Class:Change/Attribute:status/Value:plannedscheduled+' => '',
+	'Class:Change/Attribute:status/Value:approved' => 'Approved',
+	'Class:Change/Attribute:status/Value:approved+' => '',
+	'Class:Change/Attribute:status/Value:notapproved' => 'Rejected',
+	'Class:Change/Attribute:status/Value:notapproved+' => '',
+	'Class:Change/Attribute:status/Value:implemented' => 'Implemented',
+	'Class:Change/Attribute:status/Value:implemented+' => '',
+	'Class:Change/Attribute:status/Value:monitored' => 'Monitored',
+	'Class:Change/Attribute:status/Value:monitored+' => '',
+	'Class:Change/Attribute:status/Value:closed' => 'Closed',
+	'Class:Change/Attribute:status/Value:closed+' => '',
+	'Class:Change/Attribute:reason' => 'Reason',
+	'Class:Change/Attribute:reason+' => '',
+	'Class:Change/Attribute:requestor_id' => 'Requestor',
+	'Class:Change/Attribute:requestor_id+' => '',
+	'Class:Change/Attribute:requestor_email' => 'Requestor',
+	'Class:Change/Attribute:requestor_email+' => '',
+	'Class:Change/Attribute:customer_id' => 'Customer',
+	'Class:Change/Attribute:customer_id+' => '',
+	'Class:Change/Attribute:customer_name' => 'Customer',
+	'Class:Change/Attribute:customer_name+' => '',
+	'Class:Change/Attribute:workgroup_id' => 'Workgroup',
+	'Class:Change/Attribute:workgroup_id+' => '',
+	'Class:Change/Attribute:workgroup_name' => 'Workgroup',
+	'Class:Change/Attribute:workgroup_name+' => '',
+	'Class:Change/Attribute:creation_date' => 'Created',
+	'Class:Change/Attribute:creation_date+' => '',
+	'Class:Change/Attribute:last_update' => 'Last update',
+	'Class:Change/Attribute:last_update+' => '',
+	'Class:Change/Attribute:end_date' => 'End date',
+	'Class:Change/Attribute:end_date+' => '',
+	'Class:Change/Attribute:close_date' => 'Closed',
+	'Class:Change/Attribute:close_date+' => '',
+	'Class:Change/Attribute:impact' => 'Impact',
+	'Class:Change/Attribute:impact+' => '',
+	'Class:Change/Attribute:agent_id' => 'Agent',
+	'Class:Change/Attribute:agent_id+' => '',
+	'Class:Change/Attribute:agent_name' => 'Agent',
+	'Class:Change/Attribute:agent_name+' => '',
+	'Class:Change/Attribute:agent_email' => 'Agent',
+	'Class:Change/Attribute:agent_email+' => '',
+	'Class:Change/Attribute:supervisor_group_id' => 'Supervisor team',
+	'Class:Change/Attribute:supervisor_group_id+' => '',
+	'Class:Change/Attribute:supervisor_group_name' => 'Supervisor team',
+	'Class:Change/Attribute:supervisor_group_name+' => '',
+	'Class:Change/Attribute:supervisor_id' => 'Supervisor',
+	'Class:Change/Attribute:supervisor_id+' => '',
+	'Class:Change/Attribute:supervisor_email' => 'Supervisor',
+	'Class:Change/Attribute:supervisor_email+' => '',
+	'Class:Change/Attribute:manager_group_id' => 'Manager team',
+	'Class:Change/Attribute:manager_group_id+' => '',
+	'Class:Change/Attribute:manager_group_name' => 'Manager team',
+	'Class:Change/Attribute:manager_group_name+' => '',
+	'Class:Change/Attribute:manager_id' => 'Manager',
+	'Class:Change/Attribute:manager_id+' => '',
+	'Class:Change/Attribute:manager_email' => 'Manager',
+	'Class:Change/Attribute:manager_email+' => '',
+	'Class:Change/Attribute:outage' => 'Outage',
+	'Class:Change/Attribute:outage+' => '',
+	'Class:Change/Attribute:change_request' => 'Request',
+	'Class:Change/Attribute:change_request+' => '',
+	'Class:Change/Attribute:change_log' => 'Log',
+	'Class:Change/Attribute:change_log+' => '',
+	'Class:Change/Attribute:fallback' => 'Fallback plan',
+	'Class:Change/Attribute:fallback+' => '',
+	'Class:Change/Stimulus:ev_validate' => 'Validate',
+	'Class:Change/Stimulus:ev_validate+' => '',
+	'Class:Change/Stimulus:ev_reject' => 'Reject',
+	'Class:Change/Stimulus:ev_reject+' => '',
+	'Class:Change/Stimulus:ev_assign' => 'Assign',
+	'Class:Change/Stimulus:ev_assign+' => '',
+	'Class:Change/Stimulus:ev_reopen' => 'Reopen',
+	'Class:Change/Stimulus:ev_reopen+' => '',
+	'Class:Change/Stimulus:ev_plan' => 'Plan',
+	'Class:Change/Stimulus:ev_plan+' => '',
+	'Class:Change/Stimulus:ev_approve' => 'Approve',
+	'Class:Change/Stimulus:ev_approve+' => '',
+	'Class:Change/Stimulus:ev_replan' => 'Replan',
+	'Class:Change/Stimulus:ev_replan+' => '',
+	'Class:Change/Stimulus:ev_notapprove' => 'Reject',
+	'Class:Change/Stimulus:ev_notapprove+' => '',
+	'Class:Change/Stimulus:ev_implement' => 'Implement',
+	'Class:Change/Stimulus:ev_implement+' => '',
+	'Class:Change/Stimulus:ev_monitor' => 'Monitor',
+	'Class:Change/Stimulus:ev_monitor+' => '',
+	'Class:Change/Stimulus:ev_finish' => 'Finish',
+	'Class:Change/Stimulus:ev_finish+' => '',
+));
+
+//
+// Class: RoutineChange
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:RoutineChange' => 'Routine Change',
+	'Class:RoutineChange+' => '',
+	'Class:Change/Attribute:status/Value:new' => 'New',
+	'Class:Change/Attribute:status/Value:new+' => '',
+	'Class:Change/Attribute:status/Value:assigned' => 'Assigned',
+	'Class:Change/Attribute:status/Value:assigned+' => '',
+	'Class:Change/Attribute:status/Value:plannedscheduled' => 'Planned and scheduled',
+	'Class:Change/Attribute:status/Value:plannedscheduled+' => '',
+	'Class:Change/Attribute:status/Value:approved' => 'Approved',
+	'Class:Change/Attribute:status/Value:approved+' => '',
+	'Class:Change/Attribute:status/Value:implemented' => 'Implemented',
+	'Class:Change/Attribute:status/Value:implemented+' => '',
+	'Class:Change/Attribute:status/Value:monitored' => 'Monitored',
+	'Class:Change/Attribute:status/Value:monitored+' => '',
+	'Class:Change/Attribute:status/Value:closed' => 'Closed',
+	'Class:Change/Attribute:status/Value:closed+' => '',
+	'Class:RoutineChange/Stimulus:ev_validate' => 'Validate',
+	'Class:RoutineChange/Stimulus:ev_validate+' => '',
+	'Class:RoutineChange/Stimulus:ev_assign' => 'Assign',
+	'Class:RoutineChange/Stimulus:ev_assign+' => '',
+	'Class:RoutineChange/Stimulus:ev_reopen' => 'Reopen',
+	'Class:RoutineChange/Stimulus:ev_reopen+' => '',
+	'Class:RoutineChange/Stimulus:ev_plan' => 'Plan',
+	'Class:RoutineChange/Stimulus:ev_plan+' => '',
+	'Class:RoutineChange/Stimulus:ev_replan' => 'Replan',
+	'Class:RoutineChange/Stimulus:ev_replan+' => '',
+	'Class:RoutineChange/Stimulus:ev_implement' => 'Implement',
+	'Class:RoutineChange/Stimulus:ev_implement+' => '',
+	'Class:RoutineChange/Stimulus:ev_monitor' => 'Monitor',
+	'Class:RoutineChange/Stimulus:ev_monitor+' => '',
+	'Class:RoutineChange/Stimulus:ev_finish' => 'Finish',
+	'Class:RoutineChange/Stimulus:ev_finish+' => '',
+));
+
+//
+// Class: ApprovedChange
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:ApprovedChange' => 'Approved Changes',
+	'Class:ApprovedChange+' => '',
+	'Class:ApprovedChange/Attribute:approval_date' => 'approval_date',
+	'Class:ApprovedChange/Attribute:approval_date+' => '',
+	'Class:ApprovedChange/Attribute:approval_comment' => 'approval_comment',
+	'Class:ApprovedChange/Attribute:approval_comment+' => '',
+	'Class:ApprovedChange/Stimulus:ev_validate' => 'Validate',
+	'Class:ApprovedChange/Stimulus:ev_validate+' => '',
+	'Class:ApprovedChange/Stimulus:ev_reject' => 'Reject',
+	'Class:ApprovedChange/Stimulus:ev_reject+' => '',
+	'Class:ApprovedChange/Stimulus:ev_assign' => 'Assign',
+	'Class:ApprovedChange/Stimulus:ev_assign+' => '',
+	'Class:ApprovedChange/Stimulus:ev_reopen' => 'Reopen',
+	'Class:ApprovedChange/Stimulus:ev_reopen+' => '',
+	'Class:ApprovedChange/Stimulus:ev_plan' => 'Plan',
+	'Class:ApprovedChange/Stimulus:ev_plan+' => '',
+	'Class:ApprovedChange/Stimulus:ev_approve' => 'Approve',
+	'Class:ApprovedChange/Stimulus:ev_approve+' => '',
+	'Class:ApprovedChange/Stimulus:ev_replan' => 'Replan',
+	'Class:ApprovedChange/Stimulus:ev_replan+' => '',
+	'Class:ApprovedChange/Stimulus:ev_notapprove' => 'Reject approval',
+	'Class:ApprovedChange/Stimulus:ev_notapprove+' => '',
+	'Class:ApprovedChange/Stimulus:ev_implement' => 'Implement',
+	'Class:ApprovedChange/Stimulus:ev_implement+' => '',
+	'Class:ApprovedChange/Stimulus:ev_monitor' => 'Monitor',
+	'Class:ApprovedChange/Stimulus:ev_monitor+' => '',
+	'Class:ApprovedChange/Stimulus:ev_finish' => 'Finish',
+	'Class:ApprovedChange/Stimulus:ev_finish+' => '',
+));
+//
+// Class: NormalChange
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:NormalChange' => 'Normal Change',
+	'Class:NormalChange+' => '',
+	'Class:Change/Attribute:status/Value:new' => 'New',
+	'Class:Change/Attribute:status/Value:new+' => '',
+	'Class:Change/Attribute:status/Value:validated' => 'Validated',
+	'Class:Change/Attribute:status/Value:validated+' => '',
+	'Class:Change/Attribute:status/Value:rejected' => 'Rejected',
+	'Class:Change/Attribute:status/Value:rejected+' => '',
+	'Class:Change/Attribute:status/Value:assigned' => 'Assigned',
+	'Class:Change/Attribute:status/Value:assigned+' => '',
+	'Class:Change/Attribute:status/Value:plannedscheduled' => 'Planned and scheduled',
+	'Class:Change/Attribute:status/Value:plannedscheduled+' => '',
+	'Class:Change/Attribute:status/Value:approved' => 'Approved',
+	'Class:Change/Attribute:status/Value:approved+' => '',
+	'Class:Change/Attribute:status/Value:notapproved' => 'Rejected',
+	'Class:Change/Attribute:status/Value:notapproved+' => '',
+	'Class:Change/Attribute:status/Value:implemented' => 'Implemented',
+	'Class:Change/Attribute:status/Value:implemented+' => '',
+	'Class:Change/Attribute:status/Value:monitored' => 'Monitored',
+	'Class:Change/Attribute:status/Value:monitored+' => '',
+	'Class:Change/Attribute:status/Value:closed' => 'Closed',
+	'Class:Change/Attribute:status/Value:closed+' => '',
+	'Class:NormalChange/Attribute:acceptance_date' => 'Acceptance date',
+	'Class:NormalChange/Attribute:acceptance_date+' => '',
+	'Class:NormalChange/Attribute:acceptance_comment' => 'Acceptance comment',
+	'Class:NormalChange/Attribute:acceptance_comment+' => '',
+	'Class:NormalChange/Stimulus:ev_validate' => 'Validate',
+	'Class:NormalChange/Stimulus:ev_validate+' => '',
+	'Class:NormalChange/Stimulus:ev_reject' => 'Reject',
+	'Class:NormalChange/Stimulus:ev_reject+' => '',
+	'Class:NormalChange/Stimulus:ev_assign' => 'Assign',
+	'Class:NormalChange/Stimulus:ev_assign+' => '',
+	'Class:NormalChange/Stimulus:ev_reopen' => 'Reopen',
+	'Class:NormalChange/Stimulus:ev_reopen+' => '',
+	'Class:NormalChange/Stimulus:ev_plan' => 'Plan',
+	'Class:NormalChange/Stimulus:ev_plan+' => '',
+	'Class:NormalChange/Stimulus:ev_approve' => 'Approve',
+	'Class:NormalChange/Stimulus:ev_approve+' => '',
+	'Class:NormalChange/Stimulus:ev_replan' => 'Replan',
+	'Class:NormalChange/Stimulus:ev_replan+' => '',
+	'Class:NormalChange/Stimulus:ev_notapprove' => 'Reject approval',
+	'Class:NormalChange/Stimulus:ev_notapprove+' => '',
+	'Class:NormalChange/Stimulus:ev_implement' => 'Implement',
+	'Class:NormalChange/Stimulus:ev_implement+' => '',
+	'Class:NormalChange/Stimulus:ev_monitor' => 'Monitor',
+	'Class:NormalChange/Stimulus:ev_monitor+' => '',
+	'Class:NormalChange/Stimulus:ev_finish' => 'Finish',
+	'Class:NormalChange/Stimulus:ev_finish+' => '',
+));
+
+//
+// Class: EmergencyChange
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:EmergencyChange' => 'Emergency Change',
+	'Class:EmergencyChange+' => '',
+	'Class:Change/Attribute:status/Value:new' => 'New',
+	'Class:Change/Attribute:status/Value:new+' => '',
+	'Class:Change/Attribute:status/Value:validated' => 'Validated',
+	'Class:Change/Attribute:status/Value:validated+' => '',
+	'Class:Change/Attribute:status/Value:rejected' => 'Rejected',
+	'Class:Change/Attribute:status/Value:rejected+' => '',
+	'Class:Change/Attribute:status/Value:assigned' => 'Assigned',
+	'Class:Change/Attribute:status/Value:assigned+' => '',
+	'Class:Change/Attribute:status/Value:plannedscheduled' => 'Planned and scheduled',
+	'Class:Change/Attribute:status/Value:plannedscheduled+' => '',
+	'Class:Change/Attribute:status/Value:approved' => 'Approved',
+	'Class:Change/Attribute:status/Value:approved+' => '',
+	'Class:Change/Attribute:status/Value:notapproved' => 'Rejected',
+	'Class:Change/Attribute:status/Value:notapproved+' => '',
+	'Class:Change/Attribute:status/Value:implemented' => 'Implemented',
+	'Class:Change/Attribute:status/Value:implemented+' => '',
+	'Class:Change/Attribute:status/Value:monitored' => 'Monitored',
+	'Class:Change/Attribute:status/Value:monitored+' => '',
+	'Class:Change/Attribute:status/Value:closed' => 'Closed',
+	'Class:Change/Attribute:status/Value:closed+' => '',
+	'Class:EmergencyChange/Stimulus:ev_validate' => 'Validate',
+	'Class:EmergencyChange/Stimulus:ev_validate+' => '',
+	'Class:EmergencyChange/Stimulus:ev_reject' => 'Reject',
+	'Class:EmergencyChange/Stimulus:ev_reject+' => '',
+	'Class:EmergencyChange/Stimulus:ev_assign' => 'Assign',
+	'Class:EmergencyChange/Stimulus:ev_assign+' => '',
+	'Class:EmergencyChange/Stimulus:ev_reopen' => 'Reopen',
+	'Class:EmergencyChange/Stimulus:ev_reopen+' => '',
+	'Class:EmergencyChange/Stimulus:ev_plan' => 'Plan',
+	'Class:EmergencyChange/Stimulus:ev_plan+' => '',
+	'Class:EmergencyChange/Stimulus:ev_approve' => 'Approve',
+	'Class:EmergencyChange/Stimulus:ev_approve+' => '',
+	'Class:EmergencyChange/Stimulus:ev_replan' => 'Replan',
+	'Class:EmergencyChange/Stimulus:ev_replan+' => '',
+	'Class:EmergencyChange/Stimulus:ev_notapprove' => 'Reject approval',
+	'Class:EmergencyChange/Stimulus:ev_notapprove+' => '',
+	'Class:EmergencyChange/Stimulus:ev_implement' => 'Implement',
+	'Class:EmergencyChange/Stimulus:ev_implement+' => '',
+	'Class:EmergencyChange/Stimulus:ev_monitor' => 'Monitor',
+	'Class:EmergencyChange/Stimulus:ev_monitor+' => '',
+	'Class:EmergencyChange/Stimulus:ev_finish' => 'Finish',
+	'Class:EmergencyChange/Stimulus:ev_finish+' => '',
+));
 
 ?>

+ 400 - 0
modules/itop-change-mgmt-1.0.0/model.itop-change-mgmt.php

@@ -23,4 +23,404 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
+
+
+abstract class Change extends Ticket
+{
+
+	public static function Init()
+	{
+		$aParams = array
+		(
+			"category" => "bizmodel,searchable,changemgmt",
+			"key_type" => "autoincrement",
+			"name_attcode" => "ref",
+			"state_attcode" => "status",
+			"reconc_keys" => array("ref"),
+			"db_table" => "change",
+			"db_key_field" => "id",
+			"db_finalclass_field" => "",
+			"display_template" => "",
+		);
+		MetaModel::Init_Params($aParams);
+		MetaModel::Init_InheritAttributes();
+
+		MetaModel::Init_AddAttribute(new AttributeEnum("status", array("allowed_values"=>new ValueSetEnum('approved,assigned,closed,implemented,monitored,new,notapproved,plannedscheduled,rejected,validated'), "sql"=>"status", "default_value"=>"new", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeString("reason", array("allowed_values"=>null, "sql"=>"reason", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalKey("requestor_id", array("targetclass"=>"Person", "jointype"=>null, "allowed_values"=>null, "sql"=>"requestor_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("requestor_email", array("allowed_values"=>null, "extkey_attcode"=>"requestor_id", "target_attcode"=>"email", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalKey("customer_id", array("targetclass"=>"Organization", "jointype"=>null, "allowed_values"=>null, "sql"=>"customer_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_AUTO, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("customer_name", array("allowed_values"=>null, "extkey_attcode"=>"customer_id", "target_attcode"=>"name", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalKey("workgroup_id", array("targetclass"=>"Team", "jointype"=>null, "allowed_values"=>null, "sql"=>"workgroup_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("workgroup_name", array("allowed_values"=>null, "extkey_attcode"=>"workgroup_id", "target_attcode"=>"name", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeDate("creation_date", array("allowed_values"=>null, "sql"=>"creation_date", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeDate("last_update", array("allowed_values"=>null, "sql"=>"last_update", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeDate("start_date", array("allowed_values"=>null, "sql"=>"start_date", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeDate("end_date", array("allowed_values"=>null, "sql"=>"end_date", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeDate("close_date", array("allowed_values"=>null, "sql"=>"close_date", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeString("impact", array("allowed_values"=>null, "sql"=>"impact", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalKey("agent_id", array("targetclass"=>"Person", "jointype"=>null, "allowed_values"=>null, "sql"=>"agent_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("agent_name", array("allowed_values"=>null, "extkey_attcode"=>"agent_id", "target_attcode"=>"name", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("agent_email", array("allowed_values"=>null, "extkey_attcode"=>"agent_id", "target_attcode"=>"email", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalKey("supervisor_group_id", array("targetclass"=>"Team", "jointype"=>null, "allowed_values"=>null, "sql"=>"supervisor_group_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("supervisor_group_name", array("allowed_values"=>null, "extkey_attcode"=>"supervisor_group_id", "target_attcode"=>"name", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalKey("supervisor_id", array("targetclass"=>"Person", "jointype"=>null, "allowed_values"=>null, "sql"=>"supervisor_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("supervisor_email", array("allowed_values"=>null, "extkey_attcode"=>"supervisor_id", "target_attcode"=>"email", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalKey("manager_group_id", array("targetclass"=>"Team", "jointype"=>null, "allowed_values"=>null, "sql"=>"manager_group_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("manager_group_name", array("allowed_values"=>null, "extkey_attcode"=>"manager_group_id", "target_attcode"=>"name", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalKey("manager_id", array("targetclass"=>"Person", "jointype"=>null, "allowed_values"=>null, "sql"=>"manager_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("manager_email", array("allowed_values"=>null, "extkey_attcode"=>"manager_id", "target_attcode"=>"email", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeBoolean("outage", array("allowed_values"=>null, "sql"=>"outage", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeText("change_request", array("allowed_values"=>null, "sql"=>"change_request", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeText("change_log", array("allowed_values"=>null, "sql"=>"change_log", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeText("fallback", array("allowed_values"=>null, "sql"=>"fallback", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+
+		MetaModel::Init_SetZListItems('details', array('title', 'ticket_log', 'start_date', 'document_list', 'ci_list', 'contact_list', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback'));
+		MetaModel::Init_SetZListItems('advanced_search', array('ref', 'title', 'start_date', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback'));
+		MetaModel::Init_SetZListItems('standard_search', array('ref', 'title', 'start_date', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback'));
+		MetaModel::Init_SetZListItems('list', array('title', 'start_date', 'status'));
+
+
+		MetaModel::Init_DefineState(
+			"new",
+			array(
+				"attribute_inherit" => null,
+				"attribute_list" => array(
+					'ref' => OPT_ATT_READONLY,
+					'title' => OPT_ATT_MANDATORY,
+					'reason' => OPT_ATT_MANDATORY,
+					'workgroup_id' => OPT_ATT_HIDDEN,
+					'creation_date' => OPT_ATT_READONLY,
+					'last_update' => OPT_ATT_READONLY,
+					'end_date' => OPT_ATT_HIDDEN,
+					'close_date' => OPT_ATT_HIDDEN,
+					'agent_id' => OPT_ATT_HIDDEN,
+					'supervisor_group_id' => OPT_ATT_HIDDEN,
+					'supervisor_id' => OPT_ATT_HIDDEN,
+					'manager_group_id' => OPT_ATT_HIDDEN,
+					'manager_id' => OPT_ATT_HIDDEN,
+				),
+			)
+		);
+		MetaModel::Init_DefineState(
+			"validated",
+			array(
+				"attribute_inherit" => 'new',
+				"attribute_list" => array(
+					'title' => OPT_ATT_READONLY,
+					'reason' => OPT_ATT_READONLY,
+					'workgroup_id' => OPT_ATT_MUSTCHANGE,
+					'change_request' => OPT_ATT_READONLY,
+				),
+			)
+		);
+		MetaModel::Init_DefineState(
+			"rejected",
+			array(
+				"attribute_inherit" => 'new',
+				"attribute_list" => array(
+				),
+			)
+		);
+		MetaModel::Init_DefineState(
+			"assigned",
+			array(
+				"attribute_inherit" => 'validated',
+				"attribute_list" => array(
+					'workgroup_id' => OPT_ATT_MANDATORY,
+					'agent_id' => OPT_ATT_MUSTCHANGE,
+					'supervisor_group_id' => OPT_ATT_MUSTCHANGE,
+					'supervisor_id' => OPT_ATT_MUSTCHANGE,
+					'manager_group_id' => OPT_ATT_MUSTCHANGE,
+					'manager_id' => OPT_ATT_MUSTCHANGE,
+				),
+			)
+		);
+		MetaModel::Init_DefineState(
+			"plannedscheduled",
+			array(
+				"attribute_inherit" => 'assigned',
+				"attribute_list" => array(
+					'requestor_id' => OPT_ATT_READONLY,
+					'customer_id' => OPT_ATT_READONLY,
+					'workgroup_id' => OPT_ATT_READONLY,
+					'start_date' => OPT_ATT_MANDATORY,
+					'end_date' => OPT_ATT_MANDATORY,
+					'impact' => OPT_ATT_MANDATORY,
+					'agent_id' => OPT_ATT_MANDATORY,
+					'supervisor_group_id' => OPT_ATT_MANDATORY,
+					'supervisor_id' => OPT_ATT_MANDATORY,
+					'manager_group_id' => OPT_ATT_MANDATORY,
+					'manager_id' => OPT_ATT_MANDATORY,
+					'fallback' => OPT_ATT_MANDATORY,
+				),
+			)
+		);
+		MetaModel::Init_DefineState(
+			"approved",
+			array(
+				"attribute_inherit" => 'plannedscheduled',
+				"attribute_list" => array(
+					'start_date' => OPT_ATT_READONLY,
+					'end_date' => OPT_ATT_MANDATORY,
+					'impact' => OPT_ATT_READONLY,
+					'supervisor_group_id' => OPT_ATT_READONLY,
+					'supervisor_id' => OPT_ATT_READONLY,
+					'manager_group_id' => OPT_ATT_READONLY,
+					'manager_id' => OPT_ATT_READONLY,
+					'outage' => OPT_ATT_READONLY,
+				),
+			)
+		);
+		MetaModel::Init_DefineState(
+			"notapproved",
+			array(
+				"attribute_inherit" => 'plannedscheduled',
+				"attribute_list" => array(
+					'impact' => OPT_ATT_READONLY,
+					'supervisor_group_id' => OPT_ATT_READONLY,
+					'supervisor_id' => OPT_ATT_READONLY,
+					'manager_group_id' => OPT_ATT_READONLY,
+					'manager_id' => OPT_ATT_READONLY,
+				),
+			)
+		);
+		MetaModel::Init_DefineState(
+			"implemented",
+			array(
+				"attribute_inherit" => 'approved',
+				"attribute_list" => array(
+				),
+			)
+		);
+		MetaModel::Init_DefineState(
+			"monitored",
+			array(
+				"attribute_inherit" => 'implemented',
+				"attribute_list" => array(
+					'end_date' => OPT_ATT_READONLY,
+					'agent_id' => OPT_ATT_READONLY,
+					'change_request' => OPT_ATT_READONLY,
+					'fallback' => OPT_ATT_READONLY,
+				),
+			)
+		);
+		MetaModel::Init_DefineState(
+			"closed",
+			array(
+				"attribute_inherit" => 'implemented',
+				"attribute_list" => array(
+					'close_date' => OPT_ATT_READONLY,
+				),
+			)
+		);
+
+		MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_validate", array()));
+		MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_reject", array()));
+		MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_assign", array()));
+
+		MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_reopen", array()));
+		MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_plan", array()));
+	  	MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_approve", array()));
+		MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_replan", array()));
+		MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_notapprove", array()));
+		MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_implement", array()));
+		MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_monitor", array()));
+		MetaModel::Init_DefineStimulus(new StimulusUserAction("ev_finish", array()));
+
+	}
+
+	public function SetClosureDate($sStimulusCode)
+	{
+		$this->Set('end_date', time());
+		return true;
+	}
+	public function SetLastUpDate($sStimulusCode)
+	{
+		$this->Set('last_update', time());
+		return true;
+	}
+
+	public function ComputeValues()
+	{
+		$iKey = $this->GetKey();
+		if ($iKey < 0)
+		{
+			// Object not yet in the Database
+			$iKey = MetaModel::GetNextKey(get_class($this));
+		}
+		$sName = sprintf('C-%06d', $iKey);
+		$this->Set('ref', $sName);
+	}
+}
+
+class RoutineChange extends Change
+{
+	public static function Init()
+	{
+		$aParams = array
+		(
+			"category" => "bizmodel,searchable,changemgmt",
+			"key_type" => "autoincrement",
+			"name_attcode" => "ref",
+			"state_attcode" => "",
+			"reconc_keys" => array("ref"),
+			"db_table" => "change_routine",
+			"db_key_field" => "id",
+			"db_finalclass_field" => "",
+			"display_template" => "",
+		);
+		MetaModel::Init_Params($aParams);
+		MetaModel::Init_InheritAttributes();
+		MetaModel::Init_InheritLifecycle();
+
+		MetaModel::Init_SetZListItems('details', array('title', 'ticket_log', 'start_date', 'document_list', 'ci_list', 'contact_list', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback'));
+		MetaModel::Init_SetZListItems('advanced_search', array('ref', 'title', 'start_date', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback'));
+		MetaModel::Init_SetZListItems('standard_search', array('ref', 'title', 'start_date', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback'));
+		MetaModel::Init_SetZListItems('list', array('title', 'start_date', 'status', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback'));
+
+		MetaModel::Init_DefineTransition("new", "ev_assign", array("target_state"=>"assigned", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("assigned", "ev_plan", array("target_state"=>"plannedscheduled", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("plannedscheduled", "ev_implement", array("target_state"=>"implemented", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("implemented", "ev_monitor", array("target_state"=>"monitored", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("implemented", "ev_finish", array("target_state"=>"closed", "actions"=>array('SetClosureDate','SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("monitored", "ev_finish", array("target_state"=>"closed", "actions"=>array('SetClosureDate','SetLastUpDate'), "user_restriction"=>null));		
+	}
+}
+
+abstract class ApprovedChange extends Change
+{
+	public static function Init()
+	{
+		$aParams = array
+		(
+			"category" => "bizmodel,searchable,changemgmt",
+			"key_type" => "autoincrement",
+			"name_attcode" => "ref",
+			"state_attcode" => "",
+			"reconc_keys" => array("ref"),
+			"db_table" => "change_approved",
+			"db_key_field" => "id",
+			"db_finalclass_field" => "",
+			"display_template" => "",
+		);
+		MetaModel::Init_Params($aParams);
+		MetaModel::Init_InheritAttributes();
+		MetaModel::Init_InheritLifecycle();
+
+		MetaModel::Init_AddAttribute(new AttributeDate("approval_date", array("allowed_values"=>null, "sql"=>"approval_date", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeString("approval_comment", array("allowed_values"=>null, "sql"=>"approval_comment", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+
+		MetaModel::Init_SetZListItems('details', array('title', 'ticket_log', 'start_date', 'document_list', 'ci_list', 'contact_list', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback', 'approval_date', 'approval_comment'));
+		MetaModel::Init_SetZListItems('advanced_search', array('ref', 'title', 'start_date', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback', 'approval_date', 'approval_comment'));
+		MetaModel::Init_SetZListItems('standard_search', array('ref', 'title', 'start_date', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback', 'approval_date', 'approval_comment'));
+		MetaModel::Init_SetZListItems('list', array('title', 'start_date', 'status', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback', 'approval_date', 'approval_comment'));
+
+		MetaModel::Init_OverloadStateAttribute('new', 'approval_date', OPT_ATT_HIDDEN);
+		MetaModel::Init_OverloadStateAttribute('new', 'approval_comment', OPT_ATT_HIDDEN);
+
+		MetaModel::Init_OverloadStateAttribute('approved', 'approval_date', OPT_ATT_MUSTCHANGE);
+		MetaModel::Init_OverloadStateAttribute('approved', 'approval_comment', OPT_ATT_MUSTCHANGE);
+
+		MetaModel::Init_OverloadStateAttribute('implemented', 'approval_date', OPT_ATT_READONLY);
+		MetaModel::Init_OverloadStateAttribute('implemented', 'approval_comment', OPT_ATT_READONLY);
+	}
+}
+
+class NormalChange extends ApprovedChange
+{
+	public static function Init()
+	{
+		$aParams = array
+		(
+			"category" => "bizmodel,searchable,changemgmt",
+			"key_type" => "autoincrement",
+			"name_attcode" => "ref",
+			"state_attcode" => "",
+			"reconc_keys" => array("ref"),
+			"db_table" => "change_normal",
+			"db_key_field" => "id",
+			"db_finalclass_field" => "",
+			"display_template" => "",
+		);
+		MetaModel::Init_Params($aParams);
+		MetaModel::Init_InheritAttributes();
+		MetaModel::Init_InheritLifecycle();
+
+		MetaModel::Init_AddAttribute(new AttributeDate("acceptance_date", array("allowed_values"=>null, "sql"=>"acceptance_date", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeString("acceptance_comment", array("allowed_values"=>null, "sql"=>"acceptance_comment", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+
+		MetaModel::Init_SetZListItems('details', array('title', 'ticket_log', 'start_date', 'document_list', 'ci_list', 'contact_list', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback', 'approval_date', 'approval_comment', 'acceptance_date', 'acceptance_comment'));
+		MetaModel::Init_SetZListItems('advanced_search', array('ref', 'title', 'start_date', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback'));
+		MetaModel::Init_SetZListItems('standard_search', array('ref', 'title', 'start_date', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback'));
+		MetaModel::Init_SetZListItems('list', array('title', 'start_date', 'status', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback'));
+
+		MetaModel::Init_OverloadStateAttribute('new', 'acceptance_date', OPT_ATT_HIDDEN);
+		MetaModel::Init_OverloadStateAttribute('new', 'acceptance_comment', OPT_ATT_HIDDEN);
+
+		MetaModel::Init_OverloadStateAttribute('validated', 'acceptance_date', OPT_ATT_MUSTCHANGE);
+		MetaModel::Init_OverloadStateAttribute('validated', 'acceptance_comment', OPT_ATT_MUSTCHANGE);
+
+		MetaModel::Init_OverloadStateAttribute('plannedschedule', 'acceptance_date', OPT_ATT_READONLY);
+		MetaModel::Init_OverloadStateAttribute('plannedschedule', 'acceptance_comment', OPT_ATT_READONLY);
+
+		MetaModel::Init_DefineTransition("new", "ev_validate", array("target_state"=>"validated", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("new", "ev_reject", array("target_state"=>"rejected", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("rejected", "ev_reopen", array("target_state"=>"new", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("validated", "ev_assign", array("target_state"=>"assigned", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("assigned", "ev_plan", array("target_state"=>"plannedscheduled", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("plannedscheduled", "ev_approve", array("target_state"=>"approved", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("plannedscheduled", "ev_notapprove", array("target_state"=>"notapproved", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("notapproved", "ev_replan", array("target_state"=>"plannedscheduled", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("approved", "ev_implement", array("target_state"=>"implemented", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("implemented", "ev_monitor", array("target_state"=>"monitored", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("implemented", "ev_finish", array("target_state"=>"closed", "actions"=>array('SetClosureDate','SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("monitored", "ev_finish", array("target_state"=>"closed", "actions"=>array('SetClosureDate','SetLastUpDate'), "user_restriction"=>null));		
+	}
+}
+
+class EmergencyChange extends ApprovedChange
+{
+	public static function Init()
+	{
+		$aParams = array
+		(
+			"category" => "bizmodel,searchable,changemgmt",
+			"key_type" => "autoincrement",
+			"name_attcode" => "ref",
+			"state_attcode" => "",
+			"reconc_keys" => array("ref"),
+			"db_table" => "change_emergency",
+			"db_key_field" => "id",
+			"db_finalclass_field" => "",
+			"display_template" => "",
+		);
+		MetaModel::Init_Params($aParams);
+		MetaModel::Init_InheritAttributes();
+		MetaModel::Init_InheritLifecycle();
+
+		MetaModel::Init_SetZListItems('details', array('title', 'ticket_log', 'start_date', 'document_list', 'ci_list', 'contact_list', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback', 'approval_date', 'approval_comment'));
+		MetaModel::Init_SetZListItems('advanced_search', array('ref', 'title', 'start_date', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback', 'approval_date', 'approval_comment'));
+		MetaModel::Init_SetZListItems('standard_search', array('ref', 'title', 'start_date', 'status', 'reason', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback', 'approval_date', 'approval_comment'));
+		MetaModel::Init_SetZListItems('list', array('title', 'start_date', 'status', 'requestor_id', 'customer_id', 'workgroup_id', 'creation_date', 'last_update', 'end_date', 'close_date', 'impact', 'agent_id', 'agent_email', 'supervisor_group_id', 'supervisor_id', 'manager_group_id', 'manager_id', 'outage', 'change_request', 'change_log', 'fallback', 'approval_date', 'approval_comment'));
+
+		MetaModel::Init_DefineTransition("new", "ev_assign", array("target_state"=>"assigned", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("assigned", "ev_plan", array("target_state"=>"plannedscheduled", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("plannedscheduled", "ev_approve", array("target_state"=>"approved", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("plannedscheduled", "ev_notapprove", array("target_state"=>"notapproved", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("notapproved", "ev_replan", array("target_state"=>"plannedscheduled", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("approved", "ev_implement", array("target_state"=>"implemented", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("implemented", "ev_monitor", array("target_state"=>"monitored", "actions"=>array('SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("implemented", "ev_finish", array("target_state"=>"closed", "actions"=>array('SetClosureDate','SetLastUpDate'), "user_restriction"=>null));
+		MetaModel::Init_DefineTransition("monitored", "ev_finish", array("target_state"=>"closed", "actions"=>array('SetClosureDate','SetLastUpDate'), "user_restriction"=>null));		
+	}
+}
+
+
+$oMyMenuGroup = new MenuGroup('ChangeManagement', 1 /* fRank */);
+
+new OQLMenuNode('Changes', 'SELECT Change', $oMyMenuGroup->GetIndex(), 0 /* fRank */);
+new OQLMenuNode('WaitingApproval', 'SELECT ApprovedChange WHERE status IN ("new")', $oMyMenuGroup->GetIndex(), 0 /* fRank */);
+new OQLMenuNode('WaitingAcceptance', 'SELECT NormalChange WHERE status IN ("new")', $oMyMenuGroup->GetIndex(), 0 /* fRank */);
+
 ?>

+ 26 - 12
modules/itop-incident-mgmt-1.0.0/en.dict.itop-incident-mgmt.php

@@ -23,6 +23,16 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
+Dict::Add('EN US', 'English', 'English', array(
+	'Menu:IncidentManagement' => 'Incidents',
+	'Menu:Incidents' => 'Incidents',
+	'Menu:Incidents+' => 'Incidents',
+	'Menu:ClosedIncidents' => 'Closed incidents',
+	'Menu:ClosedIncidents+' => 'Closed incidents',
+	'Menu:OpenedIncidents' => 'Opened incidents',
+	'Menu:OpenedIncidents+' => 'Opened incidents',
+));
+
 // Dictionnay conventions
 // Class:<class_name>
 // Class:<class_name>+
@@ -33,19 +43,23 @@
 // Class:<class_name>/Stimulus:<stimulus_code>
 // Class:<class_name>/Stimulus:<stimulus_code>+
 
-//////////////////////////////////////////////////////////////////////
-// Classes in 'bizmodel'
-//////////////////////////////////////////////////////////////////////
+//
+// Class: Incident
 //
 
-// Dictionnay conventions
-// Class:<class_name>
-// Class:<class_name>+
-// Class:<class_name>/Attribute:<attribute_code>
-// Class:<class_name>/Attribute:<attribute_code>+
-// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
-// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
-// Class:<class_name>/Stimulus:<stimulus_code>
-// Class:<class_name>/Stimulus:<stimulus_code>+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:Incident' => 'Incident',
+	'Class:Incident+' => '',
+	'Class:Incident/Stimulus:ev_assign' => 'Assign',
+	'Class:Incident/Stimulus:ev_assign+' => '',
+	'Class:Incident/Stimulus:ev_reassign' => 'Reassign',
+	'Class:Incident/Stimulus:ev_reassign+' => '',
+	'Class:Incident/Stimulus:ev_timeout' => 'ev_timeout',
+	'Class:Incident/Stimulus:ev_timeout+' => '',
+	'Class:Incident/Stimulus:ev_resolve' => 'Mark as resolved',
+	'Class:Incident/Stimulus:ev_resolve+' => '',
+	'Class:Incident/Stimulus:ev_close' => 'Close',
+	'Class:Incident/Stimulus:ev_close+' => '',
+));
 
 ?>

+ 26 - 12
modules/itop-request-mgmt-1.0.0/en.dict.itop-request-mgmt.php

@@ -23,6 +23,16 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
+Dict::Add('EN US', 'English', 'English', array(
+	'Menu:RequestManagement' => 'Helpdesk',
+	'Menu:UserRequests' => 'All requests',
+	'Menu:UserRequests+' => 'All requests, whatever their state',
+	'Menu:ClosedRequests' => 'Closed requests',
+	'Menu:ClosedRequests+' => 'Closed requests',
+	'Menu:OpenedRequests' => 'Opened requests',
+	'Menu:OpenedRequests+' => 'Opened requests',
+));
+
 // Dictionnay conventions
 // Class:<class_name>
 // Class:<class_name>+
@@ -33,19 +43,23 @@
 // Class:<class_name>/Stimulus:<stimulus_code>
 // Class:<class_name>/Stimulus:<stimulus_code>+
 
-//////////////////////////////////////////////////////////////////////
-// Classes in 'bizmodel'
-//////////////////////////////////////////////////////////////////////
+//
+// Class: UserRequest
 //
 
-// Dictionnay conventions
-// Class:<class_name>
-// Class:<class_name>+
-// Class:<class_name>/Attribute:<attribute_code>
-// Class:<class_name>/Attribute:<attribute_code>+
-// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
-// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
-// Class:<class_name>/Stimulus:<stimulus_code>
-// Class:<class_name>/Stimulus:<stimulus_code>+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:UserRequest' => 'User Request',
+	'Class:UserRequest+' => '',
+	'Class:UserRequest/Stimulus:ev_assign' => 'Assign',
+	'Class:UserRequest/Stimulus:ev_assign+' => '',
+	'Class:UserRequest/Stimulus:ev_reassign' => 'Reassign',
+	'Class:UserRequest/Stimulus:ev_reassign+' => '',
+	'Class:UserRequest/Stimulus:ev_timeout' => 'ev_timeout',
+	'Class:UserRequest/Stimulus:ev_timeout+' => '',
+	'Class:UserRequest/Stimulus:ev_resolve' => 'Mark as resolved',
+	'Class:UserRequest/Stimulus:ev_resolve+' => '',
+	'Class:UserRequest/Stimulus:ev_close' => 'Close',
+	'Class:UserRequest/Stimulus:ev_close+' => '',
+));
 
 ?>

+ 192 - 12
modules/itop-tickets-1.0.0/en.dict.itop-tickets.php

@@ -33,19 +33,199 @@
 // Class:<class_name>/Stimulus:<stimulus_code>
 // Class:<class_name>/Stimulus:<stimulus_code>+
 
-//////////////////////////////////////////////////////////////////////
-// Classes in 'bizmodel'
-//////////////////////////////////////////////////////////////////////
+
+//
+// Class: Ticket
 //
 
-// Dictionnay conventions
-// Class:<class_name>
-// Class:<class_name>+
-// Class:<class_name>/Attribute:<attribute_code>
-// Class:<class_name>/Attribute:<attribute_code>+
-// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
-// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
-// Class:<class_name>/Stimulus:<stimulus_code>
-// Class:<class_name>/Stimulus:<stimulus_code>+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:Ticket' => 'Ticket',
+	'Class:Ticket+' => '',
+	'Class:Ticket/Attribute:ref' => 'Ref',
+	'Class:Ticket/Attribute:ref+' => '',
+	'Class:Ticket/Attribute:title' => 'Title',
+	'Class:Ticket/Attribute:title+' => '',
+	'Class:Ticket/Attribute:ticket_log' => 'Log',
+	'Class:Ticket/Attribute:ticket_log+' => '',
+	'Class:Ticket/Attribute:start_date' => 'Started',
+	'Class:Ticket/Attribute:start_date+' => '',
+	'Class:Ticket/Attribute:document_list' => 'Documents',
+	'Class:Ticket/Attribute:document_list+' => 'Documents related to the ticket',
+	'Class:Ticket/Attribute:ci_list' => 'CIs',
+	'Class:Ticket/Attribute:ci_list+' => 'CIs concerned by the incident',
+	'Class:Ticket/Attribute:contact_list' => 'Contacts',
+	'Class:Ticket/Attribute:contact_list+' => 'Team and persons involved',
+	'Class:Ticket/Attribute:finalclass' => 'finalclass',
+	'Class:Ticket/Attribute:finalclass+' => '',
+));
+
+//
+// Class: lnkTicketToDoc
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkTicketToDoc' => 'lnkTicketToDoc',
+	'Class:lnkTicketToDoc+' => '',
+	'Class:lnkTicketToDoc/Attribute:ticket_id' => 'ticket_id',
+	'Class:lnkTicketToDoc/Attribute:ticket_id+' => '',
+	'Class:lnkTicketToDoc/Attribute:ticket_ref' => 'Ticket #',
+	'Class:lnkTicketToDoc/Attribute:ticket_ref+' => '',
+	'Class:lnkTicketToDoc/Attribute:document_id' => 'Document',
+	'Class:lnkTicketToDoc/Attribute:document_id+' => '',
+	'Class:lnkTicketToDoc/Attribute:document_name' => 'Document',
+	'Class:lnkTicketToDoc/Attribute:document_name+' => '',
+));
+
+//
+// Class: lnkTicketToContact
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkTicketToContact' => 'lnkTicketToContact',
+	'Class:lnkTicketToContact+' => '',
+	'Class:lnkTicketToContact/Attribute:ticket_id' => 'ticket_id',
+	'Class:lnkTicketToContact/Attribute:ticket_id+' => '',
+	'Class:lnkTicketToContact/Attribute:ticket_ref' => 'Ticket #',
+	'Class:lnkTicketToContact/Attribute:ticket_ref+' => '',
+	'Class:lnkTicketToContact/Attribute:contact_id' => 'Contact',
+	'Class:lnkTicketToContact/Attribute:contact_id+' => '',
+	'Class:lnkTicketToContact/Attribute:contact_name' => 'Contact',
+	'Class:lnkTicketToContact/Attribute:contact_name+' => '',
+	'Class:lnkTicketToContact/Attribute:contact_email' => 'Email',
+	'Class:lnkTicketToContact/Attribute:contact_email+' => '',
+));
+
+//
+// Class: lnkTicketToCI
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:lnkTicketToCI' => 'lnkTicketToCI',
+	'Class:lnkTicketToCI+' => '',
+	'Class:lnkTicketToCI/Attribute:ticket_id' => 'ticket_id',
+	'Class:lnkTicketToCI/Attribute:ticket_id+' => '',
+	'Class:lnkTicketToCI/Attribute:ticket_ref' => 'Ticket #',
+	'Class:lnkTicketToCI/Attribute:ticket_ref+' => '',
+	'Class:lnkTicketToCI/Attribute:ci_id' => 'CI',
+	'Class:lnkTicketToCI/Attribute:ci_id+' => '',
+	'Class:lnkTicketToCI/Attribute:ci_name' => 'CI',
+	'Class:lnkTicketToCI/Attribute:ci_name+' => '',
+	'Class:lnkTicketToCI/Attribute:ci_status' => 'CI status',
+	'Class:lnkTicketToCI/Attribute:ci_status+' => '',
+));
+
+//
+// Class: ResponseTicket
+//
+
+Dict::Add('EN US', 'English', 'English', array(
+	'Class:ResponseTicket' => 'ResponseTicket',
+	'Class:ResponseTicket+' => '',
+	'Class:ResponseTicket/Attribute:status' => 'Status',
+	'Class:ResponseTicket/Attribute:status+' => '',
+	'Class:ResponseTicket/Attribute:status/Value:new' => 'New',
+	'Class:ResponseTicket/Attribute:status/Value:new+' => 'newly opened',
+	'Class:ResponseTicket/Attribute:status/Value:escalated_tto' => 'Escalation/TTO',
+	'Class:ResponseTicket/Attribute:status/Value:escalated_tto+' => '',
+	'Class:ResponseTicket/Attribute:status/Value:assigned' => 'Assigned',
+	'Class:ResponseTicket/Attribute:status/Value:assigned+' => '',
+	'Class:ResponseTicket/Attribute:status/Value:escalated_ttr' => 'Escalation/TTR',
+	'Class:ResponseTicket/Attribute:status/Value:escalated_ttr+' => '',
+	'Class:ResponseTicket/Attribute:status/Value:resolved' => 'Resolved',
+	'Class:ResponseTicket/Attribute:status/Value:resolved+' => '',
+	'Class:ResponseTicket/Attribute:status/Value:closed' => 'Closed',
+	'Class:ResponseTicket/Attribute:status/Value:closed+' => '',
+	'Class:ResponseTicket/Attribute:caller_id' => 'Caller',
+	'Class:ResponseTicket/Attribute:caller_id+' => '',
+	'Class:ResponseTicket/Attribute:workgroup_name' => 'Workgroup',
+	'Class:ResponseTicket/Attribute:workgroup_name+' => '',
+	'Class:ResponseTicket/Attribute:customer_id' => 'Customer',
+	'Class:ResponseTicket/Attribute:customer_id+' => '',
+	'Class:ResponseTicket/Attribute:customer_name' => 'Customer',
+	'Class:ResponseTicket/Attribute:customer_name+' => '',
+	'Class:ResponseTicket/Attribute:product' => 'Product',
+	'Class:ResponseTicket/Attribute:product+' => '',
+	'Class:ResponseTicket/Attribute:impact' => 'Impact',
+	'Class:ResponseTicket/Attribute:impact+' => '',
+	'Class:ResponseTicket/Attribute:impact/Value:1' => 'A person',
+	'Class:ResponseTicket/Attribute:impact/Value:1+' => '',
+	'Class:ResponseTicket/Attribute:impact/Value:2' => 'A service',
+	'Class:ResponseTicket/Attribute:impact/Value:2+' => '',
+	'Class:ResponseTicket/Attribute:impact/Value:3' => 'A department',
+	'Class:ResponseTicket/Attribute:impact/Value:3+' => '',
+	'Class:ResponseTicket/Attribute:urgency' => 'urgency',
+	'Class:ResponseTicket/Attribute:urgency+' => '',
+	'Class:ResponseTicket/Attribute:urgency/Value:1' => 'Low',
+	'Class:ResponseTicket/Attribute:urgency/Value:1+' => '',
+	'Class:ResponseTicket/Attribute:urgency/Value:2' => 'Medium',
+	'Class:ResponseTicket/Attribute:urgency/Value:2+' => '',
+	'Class:ResponseTicket/Attribute:urgency/Value:3' => 'High',
+	'Class:ResponseTicket/Attribute:urgency/Value:3+' => '',
+	'Class:ResponseTicket/Attribute:priority' => 'priority',
+	'Class:ResponseTicket/Attribute:priority+' => '',
+	'Class:ResponseTicket/Attribute:priority/Value:1' => 'Lowest',
+	'Class:ResponseTicket/Attribute:priority/Value:1+' => '',
+	'Class:ResponseTicket/Attribute:priority/Value:2' => 'To be done',
+	'Class:ResponseTicket/Attribute:priority/Value:2+' => '',
+	'Class:ResponseTicket/Attribute:priority/Value:3' => 'Top priority',
+	'Class:ResponseTicket/Attribute:priority/Value:3+' => '',
+	'Class:ResponseTicket/Attribute:workgroup_id' => 'Workgroup',
+	'Class:ResponseTicket/Attribute:workgroup_id+' => '',
+	'Class:ResponseTicket/Attribute:agent_id' => 'Agent',
+	'Class:ResponseTicket/Attribute:agent_id+' => '',
+	'Class:ResponseTicket/Attribute:agent_name' => 'Agent',
+	'Class:ResponseTicket/Attribute:agent_name+' => '',
+	'Class:ResponseTicket/Attribute:agent_email' => 'Agent email',
+	'Class:ResponseTicket/Attribute:agent_email+' => '',
+	'Class:ResponseTicket/Attribute:related_change_id' => 'Related change',
+	'Class:ResponseTicket/Attribute:related_change_id+' => '',
+	'Class:ResponseTicket/Attribute:related_change_ref' => 'Related change',
+	'Class:ResponseTicket/Attribute:related_change_ref+' => '',
+	'Class:ResponseTicket/Attribute:closure_date' => 'Closed',
+	'Class:ResponseTicket/Attribute:closure_date+' => '',
+	'Class:ResponseTicket/Attribute:last_update' => 'Last update',
+	'Class:ResponseTicket/Attribute:last_update+' => '',
+	'Class:ResponseTicket/Attribute:assignment_date' => 'Assigned',
+	'Class:ResponseTicket/Attribute:assignment_date+' => '',
+	'Class:ResponseTicket/Attribute:escalation_deadline' => 'Escalation deadline',
+	'Class:ResponseTicket/Attribute:escalation_deadline+' => '',
+	'Class:ResponseTicket/Attribute:closure_deadline' => 'Closure deadline',
+	'Class:ResponseTicket/Attribute:closure_deadline+' => '',
+	'Class:ResponseTicket/Attribute:resolution_code' => 'Resoluion code',
+	'Class:ResponseTicket/Attribute:resolution_code+' => '',
+	'Class:ResponseTicket/Attribute:resolution_code/Value:couldnotreproduce' => 'Could not be reproduced',
+	'Class:ResponseTicket/Attribute:resolution_code/Value:couldnotreproduce+' => '',
+	'Class:ResponseTicket/Attribute:resolution_code/Value:duplicate' => 'Duplicate ticket',
+	'Class:ResponseTicket/Attribute:resolution_code/Value:duplicate+' => '',
+	'Class:ResponseTicket/Attribute:resolution_code/Value:fixed' => 'Fixed',
+	'Class:ResponseTicket/Attribute:resolution_code/Value:fixed+' => '',
+	'Class:ResponseTicket/Attribute:resolution_code/Value:irrelevant' => 'Irrelevant',
+	'Class:ResponseTicket/Attribute:resolution_code/Value:irrelevant+' => '',
+	'Class:ResponseTicket/Attribute:solution' => 'Solution',
+	'Class:ResponseTicket/Attribute:solution+' => '',
+	'Class:ResponseTicket/Attribute:user_satisfaction' => 'User satisfaction',
+	'Class:ResponseTicket/Attribute:user_satisfaction+' => '',
+	'Class:ResponseTicket/Attribute:user_satisfaction/Value:1' => '1',
+	'Class:ResponseTicket/Attribute:user_satisfaction/Value:1+' => '1',
+	'Class:ResponseTicket/Attribute:user_satisfaction/Value:2' => '2',
+	'Class:ResponseTicket/Attribute:user_satisfaction/Value:2+' => '2',
+	'Class:ResponseTicket/Attribute:user_satisfaction/Value:3' => '3',
+	'Class:ResponseTicket/Attribute:user_satisfaction/Value:3+' => '3',
+	'Class:ResponseTicket/Attribute:user_satisfaction/Value:4' => '4',
+	'Class:ResponseTicket/Attribute:user_satisfaction/Value:4+' => '4',
+	'Class:ResponseTicket/Attribute:user_commment' => 'User comment',
+	'Class:ResponseTicket/Attribute:user_commment+' => '',
+	'Class:ResponseTicket/Stimulus:ev_assign' => 'Assign',
+	'Class:ResponseTicket/Stimulus:ev_assign+' => '',
+	'Class:ResponseTicket/Stimulus:ev_reassign' => 'Reassign',
+	'Class:ResponseTicket/Stimulus:ev_reassign+' => '',
+	'Class:ResponseTicket/Stimulus:ev_timeout' => 'ev_timeout',
+	'Class:ResponseTicket/Stimulus:ev_timeout+' => '',
+	'Class:ResponseTicket/Stimulus:ev_resolve' => 'Mark a resolved',
+	'Class:ResponseTicket/Stimulus:ev_resolve+' => '',
+	'Class:ResponseTicket/Stimulus:ev_close' => 'Close',
+	'Class:ResponseTicket/Stimulus:ev_close+' => '',
+));
+
 
 ?>

+ 2 - 2
modules/itop-tickets-1.0.0/module.itop-tickets.php

@@ -31,8 +31,8 @@ SetupWebPage::AddModule(
 		
 		// Documentation
 		//
-		'doc.manual_setup' => 'aaa',
-		'doc.more_information' => 'aaa',
+		'doc.manual_setup' => '',
+		'doc.more_information' => '',
 	)
 );