Files
server/usr/share/psa-pear/pear/php/Horde/Registry/Application.php
2026-01-07 20:52:11 +01:00

627 lines
15 KiB
PHP

<?php
/**
* Copyright 2009-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @author Michael Slusarz <slusarz@horde.org>
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Core
*/
use Horde\Backup;
/**
* Default class for the Horde Application API.
*
* @author Michael Slusarz <slusarz@horde.org>
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @copyright 2009-2017 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Core
*/
class Horde_Registry_Application implements Horde_Shutdown_Task
{
/**
* The list of available authentication capabilities handled by this
* application.
* The full capability list can be found in Horde_Core_Auth_Application.
*
* @var array
*/
public $auth = array();
/**
* List of features supported by this application.
*
* @var array
*/
public $features = array(
// View Handlers
'dynamicView' => false,
'minimalView' => false,
'smartmobileView' => false,
// Notification Handler
'notificationHandler' => false,
// Alarm Handler
'alarmHandler' => false
);
/**
* The init params used.
*
* @var array
*/
public $initParams = array();
/**
* The application's version.
*
* @var string
*/
public $version = 'unknown';
/**
* Application identifier.
*
* @var string
*/
protected $_app;
/**
* Cached values to add to the session after authentication.
*
* @var array
*/
protected $_sessVars = array();
/**
* Constructor.
*
* Global constants defined:
* - [APPNAME]_TEMPLATES - (string) Location of template files.
*
* @param string $app Application identifier.
*/
final public function __construct($app)
{
$this->_app = $app;
$appname = Horde_String::upper($app);
if (!defined($appname . '_TEMPLATES')) {
define($appname . '_TEMPLATES', $GLOBALS['registry']->get('templates', $app));
}
$this->_bootstrap();
}
/**
* Code run on successful authentication.
*/
final public function authenticated()
{
$this->updateSessVars();
$this->_authenticated();
}
/**
* Code run when the application is pushed on the stack for the first
* time in a page access.
*/
final public function init()
{
$this->_init();
}
/**
* Shutdown tasks.
*/
public function shutdown()
{
$this->updateSessVars();
}
/* Initialization methods. */
/**
* Bootstrap code for an application. This is run when the application
* object is being created. The full Horde environment is not available in
* this method, and the user may not yet be authenticated. Only tasks
* necessary to setup the base application environment should be done here.
*/
protected function _bootstrap()
{
}
/**
* Code to run on successful authentication. This will be called once
* per session, and the entire Horde framework will be available.
*
* @throws Horde_Exception
*/
protected function _authenticated()
{
}
/**
* Code run when the application is pushed on the stack for the first
* time in a page access. The entire Horde framework will be available,
* but the user may not be authenticated.
*
* @throws Horde_Exception
*/
protected function _init()
{
}
/**
* Application-specific code to run if application auth fails.
* Called from Horde_Registry::appInit().
*
* @param Horde_Exception_PushApp $e The exception object.
*/
public function appInitFailure($e)
{
}
// Menu generation methods.
/**
* Add additional items to the menu.
*
* @param Horde_Menu $menu The menu object.
*/
public function menu($menu)
{
}
/**
* Add additional items to the sidebar.
*
* @param Horde_View_Sidebar $sidebar The sidebar object.
*/
public function sidebar($sidebar)
{
}
// Functions called from Horde's API.
/**
* Tasks to perform at logout.
*/
public function logout()
{
}
/**
* Removes user data.
*
* @param string $user Name of user to remove data for.
*
* @throws Horde_Exception
*/
public function removeUserData($user)
{
}
/**
* Returns user data for specific (or all) users.
*
* @since Horde_Core 2.29.0
*
* @param string $user Name of user(s) to return data for. Empty arguments
* returns all users.
*
* @return \Horde\Backup\Users List of per-user data.
* @throws Horde_Exception
*/
public function backup(array $users = array())
{
return new Backup\Users(new EmptyIterator(), function(){});
}
/**
* Restores user data for a specific user.
*
* @since Horde_Core 2.29.0
*
* @param \Horde\Backup\Collection $data User data to restore.
*
* @throws Horde_Exception
*/
public function restore(Backup\Collection $data)
{
}
/**
* Returns restore dependencies, i.e. a list of collections types that
* require other collection types to be finished first.
*
* @since Horde_Core 2.29.0
*
* @return array A list of dependencies in the format
* [ 'type' => [ 'dependency' ] ]
*/
public function restoreDependencies()
{
return array();
}
/**
* Extends a backup with some application's preferences.
*
* @since Horde_Core 2.31.0
*
* @param \Horde\Backup\User $backup A backup object to extend with
* preference information.
* @param string $app An application name.
*/
protected function _backupPrefs(Backup\User $backup, $app)
{
global $injector;
$prefs = $injector->getInstance('Horde_Core_Factory_Prefs')
->create($app, array('user' => $backup->user));
$prefs->retrieve();
$scope = $prefs->getScopeObject($app);
$values = array();
foreach ($scope as $key => $value) {
if (!$scope->isDefault($key)) {
$values[$key] = $scope->get($key);
}
}
$backup->collections[] = new Backup\Collection(
new ArrayIterator($values),
$backup->user,
'preferences'
);
}
/**
* Restores the preferences for an application.
*
* @since Horde_Core 2.31.0
*
* @param Backup\Collection $data Backup data for the specified
* application.
* @param string $app An application name.
*
* @return integer Number of restored preferences.
*/
protected function _restorePrefs(Backup\Collection $data, $app)
{
global $injector;
$prefs = $injector->getInstance('Horde_Core_Factory_Prefs')
->create($app, array('user' => $data->getUser()));
$prefs->retrieve();
$count = 0;
foreach ($data as $key => $value) {
$prefs->setValue($key, $value);
$count++;
}
$prefs->store();
return $count;
}
/**
* Return the initial page to access.
*
* @since 2.12.0
*
* @return mixed URL of the initial page, or null to use Horde defaults.
*/
public function getInitialPage()
{
return null;
}
// Horde permissions.
/**
* Returns a list of available permissions.
*
* @return array An array describing all available permissions.
*/
public function perms()
{
return array();
}
/**
* Returns the specified permission for the given app permission.
*
* @param string $permission The permission to check.
* @param mixed $allowed The allowed permissions.
* @param array $opts Additional options ('value').
*
* @return mixed The value of the specified permission.
*/
public function hasPermission($permission, $allowed, $opts = array())
{
return true;
}
// Horde service methods.
/**
* Prepare data to deliver to browser for download.
*
* IMPORTANT: Applications providing this method MUST implement
* authentication/permission checking themselves!
*
* @param Horde_Variables $vars Form variables provided to download
* script. The filename is available in
* the 'filename' parameter.
*
* @return array Download data:
* - data: [REQUIRED] (mixed) Data. Either a stream or a string.
* - name: (string) Filename that overrides 'filename' URL parameter.
* - size: (integer) If set, used as size. If null, no size will be
* sent to browser. If not set, size will be automatically
* determined from data.
* - type: (string) MIME type to send (default:
* application/octet-stream).
*/
public function download(Horde_Variables $vars)
{
return array();
}
// Horde_Notification methods.
/**
* Modifies the global notification handler.
*
* @param Horde_Notification_Handler $handler A notification handler.
*/
public function setupNotification(Horde_Notification_Handler $handler)
{
}
// Horde_Alarm methods.
/**
* Lists alarms for a given moment.
*
* @param integer $time The time to retrieve alarms for.
* @param string $user The user to retreive alarms for. All users if
* null.
*
* @return array An array of UIDs.
*/
public function listAlarms($time, $user = null)
{
return array();
}
// Horde_Core_Auth_Application methods.
/**
* Return login parameters used on the login page.
*
* @return array See Horde_Core_Auth_Application#authLoginParams().
*/
public function authLoginParams()
{
return array(
'js_code' => array(),
'js_files' => array(),
'params' => array()
);
}
/**
* Tries to authenticate with the server and create a session.
* Any session variables you want added should be set by calling
* _addSessVars() internally within this method.
*
* @param string $userId The username of the user.
* @param array $credentials Credentials of the user.
*
* @throws Horde_Auth_Exception
*/
public function authAuthenticate($userId, $credentials)
{
throw new Horde_Auth_Exception('Authentication failed.');
}
/**
* Tries to transparently authenticate with the server and create a
* session.
* Any session variables you want added should be set by calling
* _addSessVars() internally within this method.
*
* @param Horde_Core_Auth_Application $auth_ob The authentication object.
*
* @return boolean Whether transparent login is supported.
* @throws Horde_Auth_Exception
*/
public function authTransparent($auth_ob)
{
return false;
}
/**
* Validates an existing authentication.
*
* @return boolean Whether the authentication is still valid.
*/
public function authValidate()
{
return false;
}
/**
* Adds a user defined by authentication credentials.
*
* @param string $userId The user ID to add.
* @param array $credentials An array of login credentials.
*
* @throws Horde_Auth_Exception
*/
public function authAddUser($userId, $credentials)
{
}
/**
* Update an existing user's credentials.
*
* @param string $oldId The old user ID.
* @param string $newId The new user ID.
* @param array $credentials The new login credentials.
*
* @throws Horde_Auth_Exception
*/
public function authUpdateUser($oldId, $newId, $credentials)
{
}
/**
* Deletes a user defined by authentication credentials.
*
* @param string $userId The user ID to delete.
*
* @throws Horde_Auth_Exception
*/
public function authRemoveUser($userId)
{
}
/**
* Does a user exist?
*
* @param string $userId The user ID to check.
*
* @return boolean True if the user exists.
*/
public function authUserExists($userId)
{
return false;
}
/**
* Lists all users in the system.
*
* @return array The array of user IDs.
* @throws Horde_Auth_Exception
*/
public function authUserList()
{
return array();
}
/**
* Reset a user's password.
*
* @param string $userId The user id for which to reset the password.
*
* @return string The new password.
* @throws Horde_Auth_Exception
*/
public function authResetPassword($userId)
{
return '';
}
/**
* Add session variables to the session.
*
* @param array $vars Array of session variables to add to the session,
* once it becomes available.
*/
final protected function _addSessVars($vars)
{
if (!empty($vars)) {
$this->_sessVars = array_merge($this->_sessVars, $vars);
Horde_Shutdown::add($this);
}
}
/**
* Updates cached session variable information into the active session.
*/
final public function updateSessVars()
{
foreach ($this->_sessVars as $key => $val) {
$GLOBALS['session']->set($this->_app, $key, $val);
}
$this->_sessVars = array();
}
// Horde_Config functions.
/**
* Returns values for <configspecial> configuration settings.
*
* @param string $what The configuration setting to return.
*
* @return array The values for the requested configuration setting.
*/
public function configSpecialValues($what)
{
return array();
}
// Horde_Core_Topbar method.
/**
* Add node(s) to the topbar tree.
*
* @param Horde_Tree_Renderer_Base $tree Tree object.
* @param string $parent The current parent element.
* @param array $params Additional parameters.
*
* @throws Horde_Exception
*/
public function topbarCreate(Horde_Tree_Renderer_Base $tree, $parent = null,
array $params = array())
{
}
// Language change callback.
/**
* Code to run if the language preference changes.
*
* Called only in applications the user is currently authenticated to in
* the current session.
*/
public function changeLanguage()
{
}
// NoSQL methods.
/**
* Return a list of NoSQL drivers used in the application.
*
* @since 2.5.0
*
* @return array Array of NoSQL drivers.
*/
public function nosqlDrivers()
{
return array();
}
}