Files
server/usr/share/psa-horde/ingo/lib/Script/Util.php
2026-01-07 20:52:11 +01:00

125 lines
3.9 KiB
PHP

<?php
/**
* Copyright 2014-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/apache.
*
* @category Horde
* @copyright 2014-2017 Horde LLC
* @license http://www.horde.org/licenses/apache ASL
* @package Ingo
*/
/**
* Provides utility functions for manipulating Ingo scripts.
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2014-2017 Horde LLC
* @license http://www.horde.org/licenses/apache ASL
* @package Ingo
*/
class Ingo_Script_Util
{
/**
* Connects to the backend, uploads the scripts and sets them active.
*
* @param array $scripts A list of scripts to set active.
* @param boolean $deactivate If true, notification will identify the
* script as deactivated instead of activated.
*
* @throws Ingo_Exception
*/
static public function activate($scripts, $deactivate = false)
{
global $injector, $notification;
foreach ($scripts as $script) {
if ($deactivate) {
$script['script'] = '';
}
try {
$injector->getInstance('Ingo_Factory_Transport')
->create($script['transport'])
->setScriptActive($script);
} catch (Ingo_Exception $e) {
$msg = $deactivate
? _("There was an error deactivating the script.")
: _("There was an error activating the script.");
throw new Ingo_Exception(
sprintf(_("%s The driver said: %s"), $msg, $e->getMessage())
);
}
}
$msg = $deactivate
? _("Script successfully deactivated.")
: _("Script successfully activated.");
$notification->push($msg, 'horde.success');
}
/**
* Does all the work in updating the script on the server.
*
* @param boolean $auto_update Only update if auto_update is active?
*
* @throws Ingo_Exception
*/
static public function update($auto_update = true)
{
global $injector, $prefs;
if ($auto_update && !$prefs->getValue('auto_update')) {
return;
}
foreach ($injector->getInstance('Ingo_Factory_Script')->createAll() as $script) {
if ($script->hasFeature('script_file')) {
try {
/* Generate and activate the script. */
self::activate($script->generate());
} catch (Ingo_Exception $e) {
throw new Ingo_Exception(
sprintf(_("Script not updated: %s"), $e->getMessage())
);
}
}
}
}
/**
* Returns the vacation reason with all placeholder replaced.
*
* @param string $reason The vacation reason including placeholders.
* @param integer $start The vacation start timestamp.
* @param integer $end The vacation end timestamp.
*
* @return string The vacation reason suitable for usage in the filter
* scripts.
*/
static public function vacationReason($reason, $start, $end)
{
global $injector, $prefs;
$format = $prefs->getValue('date_format');
$identity = $injector->getInstance('Horde_Core_Factory_Identity')
->create(Ingo::getUser());
$replace = array(
'%NAME%' => $identity->getName(),
'%EMAIL%' => $identity->getDefaultFromAddress(),
'%SIGNATURE%' => $identity->getValue('signature'),
'%STARTDATE%' => $start ? strftime($format, $start) : '',
'%ENDDATE%' => $end ? strftime($format, $end) : ''
);
return str_replace(
array_keys($replace),
array_values($replace),
$reason
);
}
}