diff --git a/application/menunode.class.inc.php b/application/menunode.class.inc.php
index 244209db6..a47a495a4 100644
--- a/application/menunode.class.inc.php
+++ b/application/menunode.class.inc.php
@@ -280,9 +280,11 @@ class ApplicationMenu
$oMenuNode = static::GetMenuNode($sMenuGroupIdx);
if (!($oMenuNode instanceof MenuGroup)) {
- IssueLog::Error('Menu node was not displayed as a menu group as it is actually not a menu group', LogChannels::CONSOLE, [
+ IssueLog::Error('Menu node without parent (root menu) must be of type menu group. Parent menu is missing or not visible to user.', LogChannels::CONSOLE, [
'menu_node_class' => get_class($oMenuNode),
+ 'menu_node_id' => $oMenuNode->GetMenuID(),
'menu_node_label' => $oMenuNode->GetLabel(),
+ 'current_user_id' => UserRights::GetUserId(),
]);
continue;
}
diff --git a/composer.json b/composer.json
index 14db1f5cf..e5c33b6bd 100644
--- a/composer.json
+++ b/composer.json
@@ -44,9 +44,10 @@
"ext-libsodium": "Required to use the AttributeEncryptedString.",
"ext-openssl": "Can be used as a polyfill if libsodium is not installed",
"ext-mcrypt": "Can be used as a polyfill if either libsodium and openssl are not installed (libsodium and openssl are more secure)",
+ "ext-apcu": "For better performance and stability",
+ "ext-imap": "Required by the extension \"Mail to ticket automation\""
"ext-ldap": "Required to use LDAP as an identity provider",
"ext-posix": "Not required by the core, but some extensions uses it.",
- "ext-imap": "Required by the extension \"Mail to ticket automation\""
},
"config": {
"platform": {
diff --git a/datamodels/2.x/itop-change-mgmt-itil/datamodel.itop-change-mgmt-itil.xml b/datamodels/2.x/itop-change-mgmt-itil/datamodel.itop-change-mgmt-itil.xml
index cc7b33734..f395eb843 100755
--- a/datamodels/2.x/itop-change-mgmt-itil/datamodel.itop-change-mgmt-itil.xml
+++ b/datamodels/2.x/itop-change-mgmt-itil/datamodel.itop-change-mgmt-itil.xml
@@ -993,34 +993,6 @@
}
]]>
-
-
- false
- public
- StimulusUserAction
- Set('close_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('reason', '');
- return true;
- }]]>
-
false
protected
diff --git a/datamodels/2.x/itop-change-mgmt/datamodel.itop-change-mgmt.xml b/datamodels/2.x/itop-change-mgmt/datamodel.itop-change-mgmt.xml
index fcd38726c..48973d78b 100755
--- a/datamodels/2.x/itop-change-mgmt/datamodel.itop-change-mgmt.xml
+++ b/datamodels/2.x/itop-change-mgmt/datamodel.itop-change-mgmt.xml
@@ -535,48 +535,6 @@
}
]]>
-
-
- false
- public
- LifecycleAction
- Set('approval_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('reject_reason', '');
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('close_date', time());
- return true;
- }]]>
-
false
protected
diff --git a/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml b/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml
index f7ecb63bc..6be747b4c 100755
--- a/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml
+++ b/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml
@@ -1083,64 +1083,6 @@
}
]]>
-
-
- false
- public
- LifecycleAction
- Set('assignment_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('last_pending_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('resolution_date', time());
- $iTimeSpent = time() - AttributeDateTime::GetAsUnixSeconds($this->Get('start_date'));
- $this->Set('time_spent', $iTimeSpent);
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('close_date', time());
- return true;
- }]]>
-
false
public
@@ -1238,67 +1180,6 @@
}
}]]>
-
-
- false
- public
- LifecycleAction
- $this->GetKey(),
- )
- );
- //automatically resolve child requests
- while($oRequest = $oChildRequestSet->Fetch())
- {
- if ( $oRequest->Get('status') != 'resolved')
- {
- $oRequest->set('servicesubcategory_id',$this->Get('servicesubcategory_id'));
- $oRequest->set('service_id',$this->Get('service_id'));
- $oRequest->set('team_id',$this->Get('team_id'));
- $oRequest->set('agent_id',$this->Get('agent_id'));
- $oRequest->set('resolution_code',$this->Get('resolution_code'));
- $oRequest->set('solution','Automatically resolved by incident:[[Incident:'.$this->Get('ref').']]');
- $oRequest->ApplyStimulus('ev_autoresolve');
- $oRequest->DBUpdate();
- }
- }
- }
-
- //automatically resolve child incidents
- $sOQL = "SELECT Incident WHERE parent_incident_id=:ticket";
- $oChildIncidentSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL),
- array(),
- array(
- 'ticket' => $this->GetKey(),
- )
- );
- while($oIncident = $oChildIncidentSet->Fetch())
- {
- if ( $oIncident->Get('status') != 'resolved')
- {
- $oIncident->set('servicesubcategory_id',$this->Get('servicesubcategory_id'));
- $oIncident->set('service_id',$this->Get('service_id'));
- $oIncident->set('team_id',$this->Get('team_id'));
- $oIncident->set('agent_id',$this->Get('agent_id'));
- $oIncident->set('resolution_code',$this->Get('resolution_code'));
- $oIncident->set('solution','Automatically resolved by incident:[[Incident:'.$this->Get('ref').']]');
- $oIncident->ApplyStimulus('ev_autoresolve');
- $oIncident->DBUpdate();
- }
- }
- return true;
-
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('assignment_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('resolution_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('close_date', time());
- return true;
- }]]>
-
/** Compute the priority of the ticket based on its impact and urgency
* @return integer The priority of the ticket 1(high) .. 3(low)
diff --git a/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml b/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml
index 514b6543e..60a2c938e 100755
--- a/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml
+++ b/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml
@@ -1231,78 +1231,6 @@
}
]]>
-
-
- false
- public
- LifecycleAction
- Set('assignment_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('last_pending_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('resolution_date', time());
- $iTimeSpent = time() - AttributeDateTime::GetAsUnixSeconds($this->Get('start_date'));
- $this->Set('time_spent', $iTimeSpent);
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('close_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('approver_id', UserRights::GetUserId());
- return true;
- }]]>
-
false
public
@@ -1399,41 +1327,6 @@
}
}]]>
-
-
- false
- public
- LifecycleAction
- $this->GetKey(),
- )
- );
- while($oRequest = $oChildRequestSet->Fetch())
- {
- if ( $oRequest->Get('status') != 'resolved')
- {
- $oRequest->set('servicesubcategory_id',$this->Get('servicesubcategory_id'));
- $oRequest->set('service_id',$this->Get('service_id'));
- $oRequest->set('team_id',$this->Get('team_id'));
- $oRequest->set('agent_id',$this->Get('agent_id'));
- $oRequest->set('resolution_code',$this->Get('resolution_code'));
- $oRequest->set('solution','Automatically resolved by request:[[UserRequest:'.$this->Get('ref').']]');
- $oRequest->ApplyStimulus('ev_autoresolve');
- $oRequest->DBUpdate();
- }
- }
- return true;
-
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('assignment_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('last_pending_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('resolution_date', time());
- $iTimeSpent = time() - AttributeDateTime::GetAsUnixSeconds($this->Get('start_date'));
- $this->Set('time_spent', $iTimeSpent);
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('close_date', time());
- return true;
- }]]>
-
-
-
- false
- public
- LifecycleAction
- Set('approver_id', UserRights::GetUserId());
- return true;
- }]]>
-
false
public
@@ -1439,41 +1367,6 @@
'panel_title_tooltip' => Dict::S($sTabCode."+"),
]);
}
- }]]>
-
-
-
- false
- public
- LifecycleAction
- $this->GetKey(),
- )
- );
- while($oRequest = $oChildRequestSet->Fetch())
- {
- if ( $oRequest->Get('status') != 'resolved')
- {
- $oRequest->set('servicesubcategory_id',$this->Get('servicesubcategory_id'));
- $oRequest->set('service_id',$this->Get('service_id'));
- $oRequest->set('team_id',$this->Get('team_id'));
- $oRequest->set('agent_id',$this->Get('agent_id'));
- $oRequest->set('resolution_code',$this->Get('resolution_code'));
- $oRequest->set('solution','Automatically resolved by request:[[UserRequest:'.$this->Get('ref').']]');
- $oRequest->ApplyStimulus('ev_autoresolve');
- $oRequest->DBUpdate();
- }
- }
- return true;
-
}]]>
diff --git a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml
index cb4ca344e..211141752 100755
--- a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml
+++ b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml
@@ -1469,7 +1469,6 @@
copy(service_id, service_id)
-
ongoing-tickets-for-portal-user
diff --git a/setup/setuputils.class.inc.php b/setup/setuputils.class.inc.php
index d036b0e7f..5ee8f700e 100644
--- a/setup/setuputils.class.inc.php
+++ b/setup/setuputils.class.inc.php
@@ -2169,6 +2169,7 @@ JS
'sodium' => 'Strong encryption will not be used.',
'openssl' => 'Strong encryption will not be used.',
],
+ 'apcu' => 'Performances will be slightly degraded.',
'ldap' => 'LDAP authentication will be disabled.',
];