725 lines
21 KiB
PHP
725 lines
21 KiB
PHP
<?php
|
|
|
|
/**
|
|
* FusionInventory
|
|
*
|
|
* Copyright (C) 2010-2016 by the FusionInventory Development Team.
|
|
*
|
|
* http://www.fusioninventory.org/
|
|
* https://github.com/fusioninventory/fusioninventory-for-glpi
|
|
* http://forge.fusioninventory.org/
|
|
*
|
|
* ------------------------------------------------------------------------
|
|
*
|
|
* LICENSE
|
|
*
|
|
* This file is part of FusionInventory project.
|
|
*
|
|
* FusionInventory is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* FusionInventory is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with FusionInventory. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* ------------------------------------------------------------------------
|
|
*
|
|
* This file is used to manage the actions in package for deploy system.
|
|
*
|
|
* ------------------------------------------------------------------------
|
|
*
|
|
* @package FusionInventory
|
|
* @author Walid Nouh
|
|
* @copyright Copyright (c) 2010-2016 FusionInventory team
|
|
* @license AGPL License 3.0 or (at your option) any later version
|
|
* http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
|
* @link http://www.fusioninventory.org/
|
|
* @link https://github.com/fusioninventory/fusioninventory-for-glpi
|
|
*
|
|
*/
|
|
|
|
if (!defined('GLPI_ROOT')) {
|
|
die("Sorry. You can't access directly to this file");
|
|
}
|
|
|
|
/**
|
|
* Manage user interactions templates.
|
|
* @since 9.2
|
|
*/
|
|
class PluginFusioninventoryDeployUserinteractionTemplate extends CommonDropdown {
|
|
|
|
/**
|
|
* The right name for this class
|
|
*
|
|
* @var string
|
|
*/
|
|
static $rightname = 'plugin_fusioninventory_userinteractiontemplate';
|
|
|
|
const ALERT_WTS = 'win32'; //Alerts for win32 platform (WTS API)
|
|
|
|
//Behaviors (to sent to the agent) :
|
|
//in two parts :
|
|
//- left part is the instruction for the agent
|
|
//- right part is the code that the agent returns to the server
|
|
|
|
//Continue a software deployment
|
|
const BEHAVIOR_CONTINUE_DEPLOY = 'continue:continue';
|
|
|
|
//Cancel a software deployment
|
|
const BEHAVIOR_STOP_DEPLOY = 'stop:stop';
|
|
|
|
//Postpone a software deployment
|
|
const BEHAVIOR_POSTPONE_DEPLOY = 'stop:postpone';
|
|
|
|
//Available buttons for Windows WTS API
|
|
const WTS_BUTTON_OK_SYNC = 'ok';
|
|
const WTS_BUTTON_OK_ASYNC = 'ok_async';
|
|
const WTS_BUTTON_OK_CANCEL = 'okcancel';
|
|
const WTS_BUTTON_YES_NO = 'yesno';
|
|
const WTS_BUTTON_ABORT_RETRY_IGNORE = 'abortretryignore';
|
|
const WTS_BUTTON_RETRY_CANCEL = 'retrycancel';
|
|
const WTS_BUTTON_YES_NO_CANCEL = 'yesnocancel';
|
|
const WTS_BUTTON_CANCEL_TRY_CONTINUE = 'canceltrycontinue';
|
|
|
|
//Icons to be displayed
|
|
const WTS_ICON_NONE = 'none';
|
|
const WTS_ICON_WARNING = 'warn';
|
|
const WTS_ICON_QUESTION = 'question';
|
|
const WTS_ICON_INFO = 'info';
|
|
const WTS_ICON_ERROR = 'error';
|
|
|
|
|
|
/**
|
|
* @see CommonGLPI::defineTabs()
|
|
**/
|
|
function defineTabs($options = []) {
|
|
|
|
$ong = [];
|
|
$this->addStandardTab(__CLASS__, $ong, $options)
|
|
->addStandardTab('Log', $ong, $options);
|
|
|
|
return $ong;
|
|
}
|
|
|
|
|
|
/**
|
|
* @see CommonGLPI::getTabNameForItem()
|
|
**/
|
|
function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) {
|
|
$tabs[1] = __('General');
|
|
$tabs[2] = _n('Behavior', 'Behaviors', 2, 'fusioninventory');
|
|
return $tabs;
|
|
}
|
|
|
|
|
|
/**
|
|
* @param $item CommonGLPI object
|
|
* @param $tabnum (default 1)
|
|
* @param $withtemplate (default 0)
|
|
**/
|
|
static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) {
|
|
global $CFG_GLPI;
|
|
|
|
if ($item->getType() == __CLASS__) {
|
|
switch ($tabnum) {
|
|
case 1 :
|
|
$item->showForm($item->fields['id']);
|
|
break;
|
|
|
|
case 2 :
|
|
$item->showBehaviors($item->fields['id']);
|
|
break;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get name of this type by language of the user connected
|
|
*
|
|
* @param integer $nb number of elements
|
|
* @return string name of this type
|
|
*/
|
|
static function getTypeName($nb = 0) {
|
|
return _n('User interaction template',
|
|
'User interaction templates', $nb, 'fusioninventory');
|
|
}
|
|
|
|
|
|
/**
|
|
* Get list of supported interaction methods
|
|
*
|
|
* @since 9.2
|
|
* @return array
|
|
*/
|
|
static function getTypes() {
|
|
return [self::ALERT_WTS
|
|
=> __("Windows system alert (WTS)", 'fusioninventory')];
|
|
}
|
|
|
|
|
|
/**
|
|
* Display a dropdown with the list of alert types
|
|
*
|
|
* @since 9.2
|
|
* @param type the type of alert (if one already selected)
|
|
* @return rand
|
|
*/
|
|
function dropdownTypes($type = self::ALERT_WTS) {
|
|
return Dropdown::showFromArray('platform', self::getTypes(),
|
|
['value' => $type]);
|
|
}
|
|
|
|
|
|
/**
|
|
* Get available buttons for alerts, by interaction type
|
|
*
|
|
* @since 9.2
|
|
* @param interaction_type the type of interaction
|
|
* @return array
|
|
*/
|
|
static function getButtons($interaction_type = '') {
|
|
$interactions = [
|
|
self::ALERT_WTS => [
|
|
self::WTS_BUTTON_OK_SYNC => __('OK', 'fusioninventory'),
|
|
self::WTS_BUTTON_OK_ASYNC => __('OK (asynchronous)', 'fusioninventory'),
|
|
self::WTS_BUTTON_OK_CANCEL => __('OK - Cancel', 'fusioninventory'),
|
|
self::WTS_BUTTON_YES_NO => __('Yes - No', 'fusioninventory'),
|
|
self::WTS_BUTTON_ABORT_RETRY_IGNORE => __('OK - Abort - Retry', 'fusioninventory'),
|
|
self::WTS_BUTTON_RETRY_CANCEL => __('Retry - Cancel', 'fusioninventory'),
|
|
self::WTS_BUTTON_ABORT_RETRY_IGNORE => __('Abort - Retry - Ignore', 'fusioninventory'),
|
|
self::WTS_BUTTON_CANCEL_TRY_CONTINUE => __('Cancel - Try - Continue', 'fusioninventory'),
|
|
self::WTS_BUTTON_YES_NO_CANCEL => __('Yes - No - Cancel', 'fusioninventory')
|
|
]
|
|
];
|
|
if (isset($interactions[$interaction_type])) {
|
|
return $interactions[$interaction_type];
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Display a dropdown with the list of buttons available
|
|
*
|
|
* @since 9.2
|
|
* @param type the type of button (if one already selected)
|
|
* @return rand
|
|
*/
|
|
public function dropdownButtons($button = self::WTS_BUTTON_OK_SYNC) {
|
|
return Dropdown::showFromArray('buttons',
|
|
self::getButtons(self::ALERT_WTS),
|
|
['value' => $button]);
|
|
}
|
|
|
|
|
|
/**
|
|
* Get available icons for alerts, by interaction type
|
|
*
|
|
* @since 9.2
|
|
* @param interaction_type the type of interaction
|
|
* @return array
|
|
*/
|
|
static function getIcons($interaction_type = self::ALERT_WTS) {
|
|
$icons = [
|
|
self::ALERT_WTS => [
|
|
self::WTS_ICON_NONE => __('None'),
|
|
self::WTS_ICON_WARNING => __('Warning'),
|
|
self::WTS_ICON_INFO => _n('Information', 'Informations', 1),
|
|
self::WTS_ICON_ERROR => __('Error'),
|
|
self::WTS_ICON_QUESTION => __('Question', 'fusioninventory')
|
|
]
|
|
];
|
|
if (isset($icons[$interaction_type])) {
|
|
return $icons[$interaction_type];
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Display a dropdown with the list of buttons available
|
|
*
|
|
* @since 9.2
|
|
* @param type the type of button (if one already selected)
|
|
* @return rand
|
|
*/
|
|
function dropdownIcons($icon = self::WTS_ICON_NONE) {
|
|
return Dropdown::showFromArray('icon',
|
|
self::getIcons(),
|
|
['value' => $icon]);
|
|
}
|
|
|
|
|
|
/**
|
|
* Get available behaviors in case of user interactions
|
|
*
|
|
* @since 9.2
|
|
* @return array
|
|
*/
|
|
static function getBehaviors() {
|
|
return [self::BEHAVIOR_CONTINUE_DEPLOY => __('Continue job with no user interaction', 'fusioninventory'),
|
|
self::BEHAVIOR_POSTPONE_DEPLOY => __('Retry job later', 'fusioninventory'),
|
|
self::BEHAVIOR_STOP_DEPLOY => __('Cancel job', 'fusioninventory')
|
|
];
|
|
}
|
|
|
|
|
|
/**
|
|
* Display a dropdown with the list of available behaviors
|
|
*
|
|
* @since 9.2
|
|
* @param type the type of bahaviors (if one already selected)
|
|
* @return rand
|
|
*/
|
|
function dropdownBehaviors($name, $behavior = self::BEHAVIOR_CONTINUE_DEPLOY) {
|
|
return Dropdown::showFromArray($name,
|
|
self::getBehaviors(),
|
|
['value' => $behavior]);
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the fields to be encoded in json
|
|
* @since 9.2
|
|
* @return an array of field names
|
|
*/
|
|
function getJsonFields() {
|
|
return array_merge($this->getMainFormFields(),
|
|
$this->getBehaviorsFields());
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the fields to be encoded in json
|
|
* @since 9.2
|
|
* @return an array of field names
|
|
*/
|
|
function getMainFormFields() {
|
|
return ['platform', 'timeout', 'buttons', 'icon',
|
|
'retry_after', 'nb_max_retry'];
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the fields to be encoded in json
|
|
* @since 9.2
|
|
* @return an array of field names
|
|
*/
|
|
function getBehaviorsFields() {
|
|
return ['on_timeout', 'on_nouser', 'on_multiusers', 'on_ok', 'on_no',
|
|
'on_yes', 'on_cancel', 'on_abort', 'on_retry', 'on_tryagain',
|
|
'on_ignore', 'on_continue', 'on_async'];
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Initialize json fields
|
|
* @since 9.2
|
|
*
|
|
* @return an array of field names
|
|
*/
|
|
function initializeJsonFields($json_fields) {
|
|
foreach ($this->getJsonFields() as $field) {
|
|
if (!isset($json_fields[$field])) {
|
|
$json_fields[$field] = $this->getDefaultBehaviorForAButton($field);
|
|
}
|
|
}
|
|
return $json_fields;
|
|
}
|
|
|
|
|
|
/**
|
|
* Save form data as a json encoded array
|
|
* @since 9.2
|
|
* @param params form parameters
|
|
* @return json encoded array
|
|
*/
|
|
function saveToJson($params = []) {
|
|
$result = [];
|
|
foreach ($this->getJsonFields() as $field) {
|
|
if (isset($params[$field])) {
|
|
$result[$field] = $params[$field];
|
|
}
|
|
}
|
|
return json_encode($result);
|
|
}
|
|
|
|
|
|
/**
|
|
* Add the json template fields to package
|
|
*
|
|
* @since 9.2
|
|
* @param the input array
|
|
* @param array now containing input data + data from the template
|
|
*/
|
|
function addJsonFieldsToArray($params = []) {
|
|
$fields = json_decode($this->fields['json'], true);
|
|
foreach ($this->getJsonFields() as $field) {
|
|
if (isset($fields[$field])) {
|
|
$params[$field] = $fields[$field];
|
|
}
|
|
}
|
|
//If we deal with an asynchronous OK, then wait must be set to 0
|
|
if ($params['buttons'] == self::WTS_BUTTON_OK_ASYNC) {
|
|
$params['buttons'] = self::WTS_BUTTON_OK_SYNC;
|
|
$params['wait'] = 'no';
|
|
} else {
|
|
//Otherwise wait is 1
|
|
$params['wait'] = 'yes';
|
|
}
|
|
return $params;
|
|
}
|
|
|
|
|
|
/**
|
|
* Display an interaction template form
|
|
* @since 9.2
|
|
* @param $id id of a template to edit
|
|
* @param options POST form options
|
|
*/
|
|
function showForm($ID, $options = []) {
|
|
$this->initForm($ID);
|
|
$this->showFormHeader();
|
|
|
|
$json_data = json_decode($this->fields['json'], true);
|
|
$json_data = $this->initializeJsonFields($json_data);
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
|
|
foreach ($this->getBehaviorsFields() as $field) {
|
|
echo Html::hidden($field, ['value' => $json_data[$field]]);
|
|
}
|
|
|
|
$rand = mt_rand();
|
|
$tplmark = $this->getAutofillMark('name', $options);
|
|
|
|
//TRANS: %1$s is a string, %2$s a second one without spaces between them : to change for RTL
|
|
echo "<td><label for='textfield_name$rand'>".sprintf(__('%1$s%2$s'), __('Name'), $tplmark) .
|
|
"</label></td>";
|
|
echo "<td>";
|
|
$objectName = autoName($this->fields["name"], "name",
|
|
(isset($options['withtemplate']) && ( $options['withtemplate']== 2)),
|
|
$this->getType(), $this->fields["entities_id"]);
|
|
Html::autocompletionTextField($this, 'name', [ 'value' => $objectName,
|
|
'rand' => $rand
|
|
]);
|
|
echo "</td>";
|
|
|
|
echo "<td>".__('Interaction format', 'fusioninventory')."</td>";
|
|
echo "<td>";
|
|
$this->dropdownTypes($json_data['platform']);
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
|
|
echo "<td>".__('Interaction type', 'fusioninventory')."</td>";
|
|
echo "<td>";
|
|
$this->dropdownButtons($json_data['buttons']);
|
|
echo "</td>";
|
|
|
|
echo "<td>".__('Alert icon', 'fusioninventory')."</td>";
|
|
echo "<td>";
|
|
$this->dropdownIcons($json_data['icon']);
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td>".__('Retry job after', 'fusioninventory')."</td>";
|
|
echo "<td>";
|
|
$this->dropdownRetry($json_data['retry_after']);
|
|
echo "</td>";
|
|
|
|
echo "<td>".__('Maximum number of retry allowed', 'fusioninventory')."</td>";
|
|
echo "<td>";
|
|
Dropdown::showNumber('nb_max_retry',
|
|
['value' => $json_data['nb_max_retry'],
|
|
'min' => 1,
|
|
'max' => 20,
|
|
'step' => 1
|
|
]);
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<td>".__('Alert display timeout', 'fusioninventory')."</td>";
|
|
echo "<td>";
|
|
$this->dropdownTimeout($json_data['timeout']);
|
|
echo "</td>";
|
|
echo "<td colspan='2'></td>";
|
|
echo "</tr>";
|
|
|
|
$this->showFormButtons();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Dropdown for frequency (interval between 2 actions)
|
|
*
|
|
* @param $name select name
|
|
* @param $value default value (default 0)
|
|
**/
|
|
function dropdownRetry($value = 0) {
|
|
|
|
$tab[0] = __('Never');
|
|
|
|
$tab[MINUTE_TIMESTAMP] = sprintf(_n('%d minute', '%d minutes', 1), 1);
|
|
$tab[2*MINUTE_TIMESTAMP] = sprintf(_n('%d minute', '%d minutes', 2), 2);
|
|
$tab[3*MINUTE_TIMESTAMP] = sprintf(_n('%d minute', '%d minutes', 3), 3);
|
|
$tab[4*MINUTE_TIMESTAMP] = sprintf(_n('%d minute', '%d minutes', 4), 4);
|
|
|
|
// Minutes
|
|
for ($i=5; $i<60; $i+=5) {
|
|
$tab[$i*MINUTE_TIMESTAMP] = sprintf(_n('%d minute', '%d minutes', $i), $i);
|
|
}
|
|
|
|
// Heures
|
|
for ($i=1; $i<24; $i++) {
|
|
$tab[$i*HOUR_TIMESTAMP] = sprintf(_n('%d hour', '%d hours', $i), $i);
|
|
}
|
|
|
|
// Jours
|
|
$tab[DAY_TIMESTAMP] = __('Each day');
|
|
for ($i=2; $i<7; $i++) {
|
|
$tab[$i*DAY_TIMESTAMP] = sprintf(_n('%d day', '%d days', $i), $i);
|
|
}
|
|
|
|
$tab[WEEK_TIMESTAMP] = __('Each week');
|
|
$tab[MONTH_TIMESTAMP] = __('Each month');
|
|
|
|
Dropdown::showFromArray('retry_after', $tab, ['value' => $value]);
|
|
}
|
|
|
|
|
|
/**
|
|
* Dropdown for frequency (interval between 2 actions)
|
|
*
|
|
* @param $name select name
|
|
* @param $value default value (default 0)
|
|
**/
|
|
function dropdownTimeout($value = 0) {
|
|
|
|
$tab[0] = __('Never');
|
|
|
|
// Minutes
|
|
for ($i=30; $i<60; $i+=5) {
|
|
$tab[$i] = sprintf(_n('%d second', '%d seconds', $i), $i);
|
|
}
|
|
|
|
$tab[MINUTE_TIMESTAMP] = sprintf(_n('%d minute', '%d minutes', 1), 1);
|
|
$tab[2*MINUTE_TIMESTAMP] = sprintf(_n('%d minute', '%d minutes', 2), 2);
|
|
$tab[3*MINUTE_TIMESTAMP] = sprintf(_n('%d minute', '%d minutes', 3), 3);
|
|
$tab[4*MINUTE_TIMESTAMP] = sprintf(_n('%d minute', '%d minutes', 4), 4);
|
|
|
|
// Minutes
|
|
for ($i=5; $i<60; $i+=5) {
|
|
$tab[$i*MINUTE_TIMESTAMP] = sprintf(_n('%d minute', '%d minutes', $i), $i);
|
|
}
|
|
|
|
// Hours
|
|
for ($i=1; $i<13; $i++) {
|
|
$tab[$i*HOUR_TIMESTAMP] = sprintf(_n('%d hour', '%d hours', $i), $i);
|
|
}
|
|
|
|
Dropdown::showFromArray('timeout', $tab, ['value' => $value]);
|
|
}
|
|
|
|
|
|
/**
|
|
* Get all events leading to an action on a task
|
|
*
|
|
* @since 9.2
|
|
* @return array an array of event => event label
|
|
*/
|
|
public function getEvents() {
|
|
return ['on_ok' => __('Button ok', 'fusioninventory'),
|
|
'on_yes' => __('Button yes', 'fusioninventory'),
|
|
'on_continue' => __('Button continue', 'fusioninventory'),
|
|
'on_retry' => __('Button retry', 'fusioninventory'),
|
|
'on_tryagain' => __('Button try', 'fusioninventory'),
|
|
'on_no' => __('Button no', 'fusioninventory'),
|
|
'on_cancel' => __('Button cancel', 'fusioninventory'),
|
|
'on_abort' => __('Button abort', 'fusioninventory'),
|
|
'on_ignore' => __('Button ignore', 'fusioninventory'),
|
|
'on_nouser' => __('No active session', 'fusioninventory'),
|
|
'on_timeout' => __('Alert timeout exceeded', 'fusioninventory'),
|
|
'on_multiusers' => __('Several active sessions', 'fusioninventory')
|
|
];
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the behaviors to define for an agent to correctly handle the interaction
|
|
*
|
|
* @since 9.2
|
|
* @param $param the button selected in the interaction template form
|
|
* @return array an array of needed interaction behaviors
|
|
*/
|
|
public function getBehaviorsToDisplay($button) {
|
|
$display = ['on_timeout', 'on_nouser', 'on_multiusers'];
|
|
switch ($button) {
|
|
case self::WTS_BUTTON_OK_SYNC:
|
|
case self::WTS_BUTTON_OK_ASYNC:
|
|
$display[] = 'on_ok';
|
|
break;
|
|
|
|
case self::WTS_BUTTON_YES_NO:
|
|
$display[] = 'on_yes';
|
|
$display[] = 'on_no';
|
|
break;
|
|
|
|
case self::WTS_BUTTON_YES_NO_CANCEL:
|
|
$display[] = 'on_yes';
|
|
$display[] = 'on_no';
|
|
$display[] = 'on_cancel';
|
|
break;
|
|
|
|
case self::WTS_BUTTON_OK_CANCEL:
|
|
$display[] = 'on_ok';
|
|
$display[] = 'on_cancel';
|
|
break;
|
|
|
|
case self::WTS_BUTTON_ABORT_RETRY_IGNORE:
|
|
$display[] = 'on_abort';
|
|
$display[] = 'on_retry';
|
|
$display[] = 'on_ignore';
|
|
break;
|
|
|
|
case self::WTS_BUTTON_RETRY_CANCEL:
|
|
$display[] = 'on_retry';
|
|
$display[] = 'on_cancel';
|
|
break;
|
|
|
|
case self::WTS_BUTTON_CANCEL_TRY_CONTINUE:
|
|
$display[] = 'on_tryagain';
|
|
$display[] = 'on_cancel';
|
|
$display[] = 'on_continue';
|
|
break;
|
|
|
|
}
|
|
return $display;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the default behavior for a button
|
|
* @since 9.2
|
|
* @param string $button the button for which the default behavior is request
|
|
* @return string the behavior
|
|
*/
|
|
public function getDefaultBehaviorForAButton($button) {
|
|
$behavior = '';
|
|
switch ($button) {
|
|
case 'on_yes':
|
|
case 'on_ok':
|
|
case 'on_multiusers':
|
|
case 'on_timeout':
|
|
case 'on_nouser':
|
|
$behavior = self::BEHAVIOR_CONTINUE_DEPLOY;
|
|
break;
|
|
|
|
case 'on_no':
|
|
case 'on_cancel':
|
|
case 'on_abort':
|
|
$behavior = self::BEHAVIOR_STOP_DEPLOY;
|
|
break;
|
|
|
|
case 'on_retry':
|
|
case 'on_ignore':
|
|
case 'on_tryagain':
|
|
$behavior = self::BEHAVIOR_POSTPONE_DEPLOY;
|
|
break;
|
|
|
|
}
|
|
return $behavior;
|
|
}
|
|
|
|
|
|
/**
|
|
* Show behaviors form
|
|
*
|
|
* @since 9.2
|
|
* @param ID the template's ID
|
|
*/
|
|
public function showBehaviors($ID) {
|
|
|
|
$json_data = json_decode($this->fields['json'], true);
|
|
$json_data = $this->initializeJsonFields($json_data);
|
|
|
|
$this->initForm($ID);
|
|
$this->showFormHeader();
|
|
|
|
echo "<tr class='tab_bg_1'>";
|
|
echo "<th colspan='4'>".__('Behaviors', 'fusioninventory')."</th>";
|
|
echo "</tr>";
|
|
|
|
foreach ($this->getMainFormFields() as $field) {
|
|
echo Html::hidden($field, ['value' => $json_data[$field]]);
|
|
}
|
|
|
|
foreach ($this->getEvents() as $event => $label) {
|
|
if (in_array($event,
|
|
$this->getBehaviorsToDisplay($json_data['buttons']))) {
|
|
echo "<tr class='tab_bg_1'>";
|
|
|
|
echo "<td>$label</td>";
|
|
echo "<td>";
|
|
if (empty($json_data[$event])) {
|
|
$value = $this->getDefaultBehaviorForAButton($event);
|
|
} else {
|
|
$value = $json_data[$event];
|
|
}
|
|
$this->dropdownBehaviors($event, $value);
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
} else {
|
|
echo Html::hidden($event, $json_data[$event]);
|
|
}
|
|
|
|
}
|
|
|
|
$this->showFormButtons();
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
public function prepareInputForAdd($input) {
|
|
//Save params as a json array, ready to be saved in db
|
|
$input['json'] = $this->saveToJson($input);
|
|
return $input;
|
|
}
|
|
|
|
|
|
public function prepareInputForUpdate($input) {
|
|
return $this->prepareInputForAdd($input);
|
|
}
|
|
|
|
|
|
/**
|
|
* Get temlate values as an array
|
|
* @since 9.2
|
|
* @return array the template values as an array
|
|
*/
|
|
public function getValues() {
|
|
return json_decode($this->fields['json'], true);
|
|
}
|
|
}
|