Overview

Packages

  • Auth
  • Core
  • Horde
    • Imsp
  • None
  • Notification

Classes

  • Horde
  • Horde_Config
  • Horde_Config_Form
  • Horde_Core_ActiveSync_Connector
  • Horde_Core_ActiveSync_Driver
  • Horde_Core_Ajax_Application
  • Horde_Core_Ajax_Imple
  • Horde_Core_Ajax_Imple_AutoCompleter
  • Horde_Core_Ajax_Imple_Geocoder_Geonames
  • Horde_Core_Ajax_Imple_SpellChecker
  • Horde_Core_Alarm_Handler_Notify
  • Horde_Core_Auth_Application
  • Horde_Core_Auth_Composite
  • Horde_Core_Auth_Ldap
  • Horde_Core_Auth_Msad
  • Horde_Core_Auth_Shibboleth
  • Horde_Core_Auth_Signup_Base
  • Horde_Core_Auth_Signup_Form
  • Horde_Core_Auth_Signup_Null
  • Horde_Core_Auth_Signup_Sql
  • Horde_Core_Auth_Signup_SqlObject
  • Horde_Core_Autoloader_Callback_Mime
  • Horde_Core_Autoloader_Callback_Nls
  • Horde_Core_Block
  • Horde_Core_Block_Collection
  • Horde_Core_Block_Layout
  • Horde_Core_Block_Layout_Manager
  • Horde_Core_Block_Layout_View
  • Horde_Core_Block_Upgrade
  • Horde_Core_Browser
  • Horde_Core_Bundle
  • Horde_Core_Cli
  • Horde_Core_Controller_NotFound
  • Horde_Core_Controller_RequestConfiguration
  • Horde_Core_Controller_RequestMapper
  • Horde_Core_Controller_SettingsFinder
  • Horde_Core_Db_Migration
  • Horde_Core_Factory_ActiveSyncBackend
  • Horde_Core_Factory_ActiveSyncServer
  • Horde_Core_Factory_ActiveSyncState
  • Horde_Core_Factory_Ajax
  • Horde_Core_Factory_Alarm
  • Horde_Core_Factory_Auth
  • Horde_Core_Factory_AuthSignup
  • Horde_Core_Factory_Base
  • Horde_Core_Factory_BlockCollection
  • Horde_Core_Factory_Browser
  • Horde_Core_Factory_Cache
  • Horde_Core_Factory_Crypt
  • Horde_Core_Factory_Data
  • Horde_Core_Factory_Db
  • Horde_Core_Factory_DbBase
  • Horde_Core_Factory_DbPear
  • Horde_Core_Factory_Dns
  • Horde_Core_Factory_Editor
  • Horde_Core_Factory_Facebook
  • Horde_Core_Factory_Group
  • Horde_Core_Factory_History
  • Horde_Core_Factory_HttpClient
  • Horde_Core_Factory_Identity
  • Horde_Core_Factory_Image
  • Horde_Core_Factory_Imple
  • Horde_Core_Factory_Imsp
  • Horde_Core_Factory_ImspAuth
  • Horde_Core_Factory_Injector
  • Horde_Core_Factory_KolabServer
  • Horde_Core_Factory_KolabSession
  • Horde_Core_Factory_KolabStorage
  • Horde_Core_Factory_Ldap
  • Horde_Core_Factory_Lock
  • Horde_Core_Factory_Logger
  • Horde_Core_Factory_LoginTasks
  • Horde_Core_Factory_Mail
  • Horde_Core_Factory_Mapper
  • Horde_Core_Factory_Matcher
  • Horde_Core_Factory_Memcache
  • Horde_Core_Factory_MimeViewer
  • Horde_Core_Factory_Notification
  • Horde_Core_Factory_Perms
  • Horde_Core_Factory_PermsCore
  • Horde_Core_Factory_Prefs
  • Horde_Core_Factory_Request
  • Horde_Core_Factory_Secret
  • Horde_Core_Factory_SessionHandler
  • Horde_Core_Factory_Share
  • Horde_Core_Factory_ShareBase
  • Horde_Core_Factory_Template
  • Horde_Core_Factory_TextFilter
  • Horde_Core_Factory_ThemesCache
  • Horde_Core_Factory_Token
  • Horde_Core_Factory_Tree
  • Horde_Core_Factory_Twitter
  • Horde_Core_Factory_UrlShortener
  • Horde_Core_Factory_Vfs
  • Horde_Core_Factory_View
  • Horde_Core_Factory_Weather
  • Horde_Core_Group_Ldap
  • Horde_Core_Log_Logger
  • Horde_Core_LoginTasks
  • Horde_Core_LoginTasks_Backend_Horde
  • Horde_Core_LoginTasks_SystemTask_Upgrade
  • Horde_Core_Mime_Viewer_Syntaxhighlighter
  • Horde_Core_Mime_Viewer_Vcard
  • Horde_Core_Notification_Event_Status
  • Horde_Core_Notification_Handler_Decorator_Hordelog
  • Horde_Core_Notification_Storage_Session
  • Horde_Core_Perms
  • Horde_Core_Perms_Ui
  • Horde_Core_Prefs_Cache_Session
  • Horde_Core_Prefs_Identity
  • Horde_Core_Prefs_Storage_Configuration
  • Horde_Core_Prefs_Storage_Hooks
  • Horde_Core_Prefs_Storage_Upgrade
  • Horde_Core_Prefs_Ui
  • Horde_Core_Prefs_Ui_Widgets
  • Horde_Core_Share_Driver
  • Horde_Core_Share_FactoryCallback
  • Horde_Core_Sidebar
  • Horde_Core_Text_Filter_Bbcode
  • Horde_Core_Text_Filter_Emails
  • Horde_Core_Text_Filter_Emoticons
  • Horde_Core_Text_Filter_Highlightquotes
  • Horde_Core_Translation
  • Horde_Core_Tree_Html
  • Horde_Core_Tree_Javascript
  • Horde_Core_Tree_Simplehtml
  • Horde_Core_Ui_FlagImage
  • Horde_Core_Ui_JsCalendar
  • Horde_Core_Ui_Language
  • Horde_Core_Ui_Layout
  • Horde_Core_Ui_ModalFormRenderer
  • Horde_Core_Ui_Pager
  • Horde_Core_Ui_Tabs
  • Horde_Core_Ui_TagCloud
  • Horde_Core_Ui_VarRenderer
  • Horde_Core_Ui_VarRenderer_Html
  • Horde_Core_Ui_VarRenderer_TablesetHtml
  • Horde_Core_Ui_Widget
  • Horde_ErrorHandler
  • Horde_Help
  • Horde_Menu
  • Horde_Registry
  • Horde_Registry_Api
  • Horde_Registry_Application
  • Horde_Registry_Caller
  • Horde_Registry_Nlsconfig
  • Horde_Script_Files
  • Horde_Session
  • Horde_Session_Null
  • Horde_Themes
  • Horde_Themes_Cache
  • Horde_Themes_Css
  • Horde_Themes_Element
  • Horde_Themes_Image
  • Horde_Themes_Sound

Exceptions

  • Horde_Exception_HookNotSet
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * A Horde_Injector:: based Horde_Prefs:: factory.
  4:  *
  5:  * PHP version 5
  6:  *
  7:  * @category Horde
  8:  * @package  Core
  9:  * @author   Michael Slusarz <slusarz@horde.org>
 10:  * @license  http://www.horde.org/licenses/lgpl21 LGPL 2.1
 11:  * @link     http://pear.horde.org/index.php?package=Core
 12:  */
 13: 
 14: /**
 15:  * A Horde_Injector:: based Horde_Prefs:: factory.
 16:  *
 17:  * Copyright 2010-2012 Horde LLC (http://www.horde.org/)
 18:  *
 19:  * See the enclosed file COPYING for license information (LGPL). If you
 20:  * did not receive this file, see http://www.horde.org/licenses/lgpl21.
 21:  *
 22:  * @category Horde
 23:  * @package  Core
 24:  * @author   Michael Slusarz <slusarz@horde.org>
 25:  * @license  http://www.horde.org/licenses/lgpl21 LGPL 2.1
 26:  * @link     http://pear.horde.org/index.php?package=Core
 27:  */
 28: class Horde_Core_Factory_Prefs extends Horde_Core_Factory_Base
 29: {
 30:     /**
 31:      * Instances.
 32:      *
 33:      * @var array
 34:      */
 35:     private $_instances = array();
 36: 
 37:     /**
 38:      * Return the Horde_Prefs:: instance.
 39:      *
 40:      * @param string $scope  The scope for this set of preferences.
 41:      * @param array $opts    See Horde_Prefs::__construct().  Additional
 42:      *                       parameters:
 43:      * <pre>
 44:      * driver - (boolean) Use this driver instead of the value in the Horde
 45:      *          config.
 46:      * driver_params - (array) Use these driver parameters instead of the
 47:      *                 values in the Horde config.
 48:      * </pre>
 49:      *
 50:      * @return Horde_Prefs  The singleton instance.
 51:      */
 52:     public function create($scope = 'horde', array $opts = array())
 53:     {
 54:         if (array_key_exists('driver', $opts)) {
 55:             $driver = $opts['driver'];
 56:             $params = array();
 57:         } elseif (empty($GLOBALS['conf']['prefs']['driver'])) {
 58:             $driver = null;
 59:             $params = array();
 60:         } else {
 61:             $driver = 'Horde_Prefs_Storage_' . ucfirst($GLOBALS['conf']['prefs']['driver']);
 62:             $params = Horde::getDriverConfig('prefs', $driver);
 63:         }
 64: 
 65:         if (array_key_exists('driver_params', $opts)) {
 66:             $params = $opts['driver_params'];
 67:         }
 68: 
 69:         $opts = array_merge(array(
 70:             'cache' => true,
 71:             'logger' => $this->_injector->getInstance('Horde_Log_Logger'),
 72:             'password' => '',
 73:             'sizecallback' => ((isset($GLOBALS['conf']['prefs']['maxsize'])) ? array($this, 'sizeCallback') : null),
 74:             'user' => ''
 75:         ), $opts);
 76: 
 77:         /* If $params['user_hook'] is defined, use it to retrieve the value to
 78:          * use for the username. */
 79:         if (!empty($params['user_hook']) &&
 80:             function_exists($params['user_hook'])) {
 81:             $opts['user'] = call_user_func($params['user_hook'], $opts['user']);
 82:         }
 83: 
 84:         /* To determine signature, don't serialize the logger or size
 85:          * callback, since they may contain unserializable components. */
 86:         $sig_opts = array_merge($opts, array(
 87:             'logger' => get_class($opts['logger']),
 88:             'sizecallback' => !is_null($opts['sizecallback'])
 89:         ));
 90:         ksort($sig_opts);
 91:         $sig = hash('md5', serialize($sig_opts));
 92: 
 93:         if (isset($this->_instances[$sig])) {
 94:             $this->_instances[$sig]->retrieve($scope);
 95:             return $this->_instances[$sig];
 96:         }
 97: 
 98:         try {
 99:             switch ($driver) {
100:             case 'Horde_Prefs_Storage_Ldap':
101:                 $params['ldap'] = $this->_injector
102:                     ->getInstance('Horde_Core_Factory_Ldap')
103:                     ->create('horde', 'ldap');
104:                 break;
105: 
106:             case 'Horde_Prefs_Storage_Session':
107:                 $driver = 'Horde_Prefs_Storage_Null';
108:                 break;
109: 
110:             case 'Horde_Prefs_Storage_Sql':
111:                 $params['db'] = $this->_injector
112:                     ->getInstance('Horde_Db_Adapter');
113:                 break;
114:             case 'Horde_Prefs_Storage_KolabImap':
115:                 if ($GLOBALS['registry']->isAdmin()) {
116:                     throw new Horde_Exception('The IMAP based Kolab preferences backend is unavailable for system administrators.');
117:                 }
118:                 $params['kolab'] = $this->_injector
119:                     ->getInstance('Horde_Kolab_Storage');
120:                 $params['logger'] = $opts['logger'];
121:                 break;
122:             case 'Horde_Prefs_Storage_Imsp':
123:                 $imspParams = $GLOBALS['conf']['imsp'];
124:                 $imspParams['username'] = $GLOBALS['registry']->getAuth('bare');
125:                 $imspParams['password'] = $GLOBALS['registry']->getAuthCredential('password');
126:                 $params['imsp'] = $this->_injector
127:                     ->getInstance('Horde_Core_Factory_Imsp')->create('Options', $imspParams);
128:             }
129:             $driverOb = new $driver($opts['user'], $params);
130:         } catch (Horde_Exception $e) {
131:             $this->_notifyError($e);
132:             $driver = 'Horde_Prefs_Storage_Null';
133:             $driverOb = new $driver($opts['user'], $params);
134:             $opts['cache'] = false;
135:         }
136: 
137:         $config_driver = new Horde_Core_Prefs_Storage_Configuration($opts['user']);
138:         $hooks_driver = new Horde_Core_Prefs_Storage_Hooks($opts['user'], array('conf_ob' => $config_driver));
139: 
140:         $drivers = $driver
141:             ? array($config_driver, $driverOb, $hooks_driver)
142:             : array($config_driver, $hooks_driver);
143: 
144:         if ($driver && $opts['cache']) {
145:             $opts['cache'] = new Horde_Core_Prefs_Cache_Session($opts['user']);
146:         } else {
147:             unset($opts['cache']);
148:         }
149: 
150:         try {
151:             $this->_instances[$sig] = new Horde_Prefs($scope, $drivers, $opts);
152:         } catch (Horde_Prefs_Exception $e) {
153:             $this->_notifyError($e);
154: 
155:             /* Store data in the cached session object. */
156:             $opts['cache'] = new Horde_Core_Prefs_Cache_Session($opts['user']);
157:             $this->_instances[$sig] = new Horde_Prefs($scope, array($config_driver, $hooks_driver), $opts);
158:         }
159: 
160:         return $this->_instances[$sig];
161:     }
162: 
163:     /**
164:      * Notifies (once) if one of the preference backends is not available and
165:      * logs details for the administrator.
166:      *
167:      * @param mixed $e  Error to log.
168:      */
169:     protected function _notifyError($e)
170:     {
171:         if (!$GLOBALS['session']->get('horde', 'no_prefs')) {
172:             $GLOBALS['session']->set('horde', 'no_prefs', true);
173:             if (isset($GLOBALS['notification'])) {
174:                 $GLOBALS['notification']->push(Horde_Core_Translation::t("The preferences backend is currently unavailable and your preferences have not been loaded. You may continue to use the system with default preferences."));
175:                 Horde::logMessage($e);
176:             }
177:         }
178:     }
179: 
180:     /**
181:      * Clear the instances cache.
182:      */
183:     public function clearCache()
184:     {
185:         $this->_instances = array();
186:     }
187: 
188:     /**
189:      * Max size callback.
190:      *
191:      * @param string $pref   Preference name.
192:      * @param integer $size  Size (in bytes).
193:      *
194:      * @return boolean  True if oversized.
195:      */
196:     public function sizeCallback($pref, $size)
197:     {
198:         if ($size <= $GLOBALS['conf']['prefs']['maxsize']) {
199:             return false;
200:         }
201: 
202:         $GLOBALS['notification']->push(sprintf(Horde_Core_Translation::t("The preference \"%s\" could not be saved because its data exceeds the maximum allowable size"), $pref), 'horde.error');
203:         return true;
204:     }
205: 
206: }
207: 
API documentation generated by ApiGen