Dotclear

source: inc/core/class.dc.prefs.php @ 106:cca7b21765d2

Revision 106:cca7b21765d2, 3.2 KB checked in by xpla@…, 14 years ago (diff)

Bugfix for userprefs load.

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          //~ $this->loadPrefs();
45     }
46     
47     /**
48     Retrieves all workspaces (and their prefs) from database, with one query.
49     */
50     public function loadPrefs()
51     {
52          $strReq = 'SELECT user_id, pref_id, pref_value, '.
53                    'pref_type, pref_label, pref_ws '.
54                    'FROM '.$this->table.' '.
55                    "WHERE user_id = '".$this->con->escape($this->user_id)."' ".
56                    'OR user_id IS NULL '.
57                    'ORDER BY pref_ws ASC, pref_id ASC';
58          try {
59               $rs = $this->con->select($strReq);
60          } catch (Exception $e) {
61               trigger_error(__('Unable to retrieve workspaces:').' '.$this->con->error(), E_USER_ERROR);
62               throw $e;
63          }
64         
65          /* Prevent empty tables (install phase, for instance) */
66          if ($rs->isEmpty()) {
67               return;
68          }
69         
70          do {
71               $ws = trim($rs->f('pref_ws'));
72               if (!$rs->isStart()) {
73                    // we have to go up 1 step, since workspaces construction performs a fetch()
74                    // at very first time
75                    $rs->movePrev();
76               }
77               $this->workspaces[$ws] = new dcWorkspace($GLOBALS['core'], $this->user_id, $ws,$rs);
78          } while(!$rs->isStart());
79     }
80         
81     
82     /**
83     Create a new workspace. If the workspace already exists, return it without modification.
84     
85     @param    ws   <b>string</b>       Workspace name
86     @return   <b>dcWorkspace</b>  The workspace created
87     */
88     public function addWorkspace($ws)
89     {
90          if (!array_key_exists($ws, $this->workspaces)) {
91               $this->workspaces[$ws] = new dcWorkspace($GLOBALS['core'], $this->user_id, $ws);
92          }
93          return $this->workspaces[$ws];
94     }
95     
96     /**
97     Returns full workspace with all prefs pertaining to it.
98     
99     @param    ws   <b>string</b>       Workspace name
100     @return   <b>dcWorkspace</b>
101     */
102     public function get($ws)
103     {
104          if (array_key_exists($ws, $this->workspaces)) {
105               return $this->workspaces[$ws];
106          }
107         
108          return null;
109     }
110     
111     /**
112     Magic __get method.
113     @copydoc ::get
114     */
115     public function __get($n)
116     {
117          return $this->get($n);
118     }
119     
120     /**
121     Returns $workspaces property content.
122     
123     @return   <b>array</b>
124     */
125     public function dumpWorkspaces()
126     {
127          return $this->workspaces;
128     }
129     
130}
131?>
Note: See TracBrowser for help on using the repository browser.

Sites map