Dotclear

source: inc/core/class.dc.prefs.php @ 141:340bbc2cd9f4

Revision 141:340bbc2cd9f4, 3.5 KB checked in by xave <xave@…>, 14 years ago (diff)

Deported the error handling found in constructors. Now we can upgrade.

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12if (!defined('DC_RC_PATH')) { return; }
13
14/**
15@ingroup DC_CORE
16@brief User prefs handler
17
18dcPrefs provides user preferences management. This class instance exists as
19dcAuth $prefs property. You should create a new prefs instance when
20updating another user prefs.
21*/
22class dcPrefs
23{
24     protected $con;          ///< <b>connection</b> Database connection object
25     protected $table;        ///< <b>string</b> Prefs table name
26     protected $user_id;      ///< <b>string</b> User ID
27     
28     protected $workspaces = array();        ///< <b>array</b> Associative workspaces array
29     
30     protected $ws;           ///< <b>string</b> Current workspace
31     
32     /**
33     Object constructor. Retrieves user prefs and puts them in $workspaces
34     array. Local (user) prefs have a highest priority than global prefs.
35     
36     @param    core      <b>dcCore</b>       dcCore object
37     @param    user_id   <b>string</b>       User ID
38     */
39     public function __construct($core,$user_id)
40     {
41          $this->con =& $core->con;
42          $this->table = $core->prefix.'pref';
43          $this->user_id =& $user_id;
44          try {$this->loadPrefs();} catch (Exception $e) {
45               if (version_compare($core->getVersion('core'),'2.3','>')) {
46                    trigger_error($e->getMessage());
47               }
48          }
49     }
50     
51     /**
52     Retrieves all workspaces (and their prefs) from database, with one query.
53     */
54     private function loadPrefs()
55     {
56          $strReq = 'SELECT user_id, pref_id, pref_value, '.
57                    'pref_type, pref_label, pref_ws '.
58                    'FROM '.$this->table.' '.
59                    "WHERE user_id = '".$this->con->escape($this->user_id)."' ".
60                    'OR user_id IS NULL '.
61                    'ORDER BY pref_ws ASC, pref_id ASC';
62          try {
63               $rs = $this->con->select($strReq);
64          } catch (Exception $e) {
65               //~ trigger_error(__('Unable to retrieve workspaces:').' '.$this->con->error(), E_USER_ERROR);
66               //~ throw new Exception(__('Unable to retrieve workspaces:').' '.$this->con->error(), E_USER_ERROR);
67               throw $e;
68          }
69         
70          /* Prevent empty tables (install phase, for instance) */
71          if ($rs->isEmpty()) {
72               return;
73          }
74         
75          do {
76               $ws = trim($rs->f('pref_ws'));
77               if (!$rs->isStart()) {
78                    // we have to go up 1 step, since workspaces construction performs a fetch()
79                    // at very first time
80                    $rs->movePrev();
81               }
82               $this->workspaces[$ws] = new dcWorkspace($GLOBALS['core'], $this->user_id, $ws,$rs);
83          } while(!$rs->isStart());
84     }
85         
86     
87     /**
88     Create a new workspace. If the workspace already exists, return it without modification.
89     
90     @param    ws   <b>string</b>       Workspace name
91     @return   <b>dcWorkspace</b>  The workspace created
92     */
93     public function addWorkspace($ws)
94     {
95          if (!array_key_exists($ws, $this->workspaces)) {
96               $this->workspaces[$ws] = new dcWorkspace($GLOBALS['core'], $this->user_id, $ws);
97          }
98          return $this->workspaces[$ws];
99     }
100     
101     /**
102     Returns full workspace with all prefs pertaining to it.
103     
104     @param    ws   <b>string</b>       Workspace name
105     @return   <b>dcWorkspace</b>
106     */
107     public function get($ws)
108     {
109          if (array_key_exists($ws, $this->workspaces)) {
110               return $this->workspaces[$ws];
111          }
112         
113          return null;
114     }
115     
116     /**
117     Magic __get method.
118     @copydoc ::get
119     */
120     public function __get($n)
121     {
122          return $this->get($n);
123     }
124     
125     /**
126     Returns $workspaces property content.
127     
128     @return   <b>array</b>
129     */
130     public function dumpWorkspaces()
131     {
132          return $this->workspaces;
133     }
134     
135}
136?>
Note: See TracBrowser for help on using the repository browser.

Sites map