Dotclear

source: inc/core/class.dc.prefs.php @ 147:421794608368

Revision 147:421794608368, 3.3 KB checked in by xave <xave@…>, 14 years ago (diff)

Gosh, that was dirty.

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(__('Unable to retrieve workspaces:').' '.$this->con->error(), E_USER_ERROR);
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               throw $e;
66          }
67         
68          /* Prevent empty tables (install phase, for instance) */
69          if ($rs->isEmpty()) {
70               return;
71          }
72         
73          do {
74               $ws = trim($rs->f('pref_ws'));
75               if (!$rs->isStart()) {
76                    // we have to go up 1 step, since workspaces construction performs a fetch()
77                    // at very first time
78                    $rs->movePrev();
79               }
80               $this->workspaces[$ws] = new dcWorkspace($GLOBALS['core'], $this->user_id, $ws,$rs);
81          } while(!$rs->isStart());
82     }
83         
84     
85     /**
86     Create a new workspace. If the workspace already exists, return it without modification.
87     
88     @param    ws   <b>string</b>       Workspace name
89     @return   <b>dcWorkspace</b>  The workspace created
90     */
91     public function addWorkspace($ws)
92     {
93          if (!array_key_exists($ws, $this->workspaces)) {
94               $this->workspaces[$ws] = new dcWorkspace($GLOBALS['core'], $this->user_id, $ws);
95          }
96          return $this->workspaces[$ws];
97     }
98     
99     /**
100     Returns full workspace with all prefs pertaining to it.
101     
102     @param    ws   <b>string</b>       Workspace name
103     @return   <b>dcWorkspace</b>
104     */
105     public function get($ws)
106     {
107          if (array_key_exists($ws, $this->workspaces)) {
108               return $this->workspaces[$ws];
109          }
110         
111          return null;
112     }
113     
114     /**
115     Magic __get method.
116     @copydoc ::get
117     */
118     public function __get($n)
119     {
120          return $this->get($n);
121     }
122     
123     /**
124     Returns $workspaces property content.
125     
126     @return   <b>array</b>
127     */
128     public function dumpWorkspaces()
129     {
130          return $this->workspaces;
131     }
132     
133}
134?>
Note: See TracBrowser for help on using the repository browser.

Sites map