Dotclear

source: inc/core/class.dc.prefs.php @ 2566:9bf417837888

Revision 2566:9bf417837888, 4.5 KB checked in by franck <carnet.franck.paul@…>, 12 years ago (diff)

Add some people in CREDITS, remove trailing spaces and tabs.

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 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     Rename a workspace.
101
102     @param    oldWs     <b>string</b>  Old workspace name
103     @param    newws     <b>string</b>  New workspace name
104     @return   <b>boolean</b>
105     */
106     public function renWorkspace($oldNs,$newNs)
107     {
108          if (!array_key_exists($oldWs, $this->workspaces) || array_key_exists($newWs, $this->workspaces)) {
109               return false;
110          }
111
112          // Rename the workspace in the workspace array
113          $this->workspaces[$newWs] = $this->workspaces[$oldWs];
114          unset($this->workspaces[$oldWs]);
115
116          // Rename the workspace in the database
117          $strReq = 'UPDATE '.$this->table.
118               " SET pref_ws = '".$this->con->escape($newWs)."' ".
119               " WHERE pref_ws = '".$this->con->escape($oldWs)."' ";
120          $this->con->execute($strReq);
121          return true;
122     }
123
124     /**
125     Delete a whole workspace with all preferences pertaining to it.
126
127     @param    ws   <b>string</b>  Workspace name
128     @return   <b>boolean</b>
129     */
130     public function delWorkspace($ws)
131     {
132          if (!array_key_exists($ws, $this->workspaces)) {
133               return false;
134          }
135
136          // Remove the workspace from the workspace array
137          unset($this->workspaces[$ws]);
138
139          // Delete all preferences from the workspace in the database
140          $strReq = 'DELETE FROM '.$this->table.
141               " WHERE pref_ws = '".$this->con->escape($ws)."' ";
142          $this->con->execute($strReq);
143          return true;
144     }
145
146     /**
147     Returns full workspace with all prefs pertaining to it.
148
149     @param    ws   <b>string</b>       Workspace name
150     @return   <b>dcWorkspace</b>
151     */
152     public function get($ws)
153     {
154          if (array_key_exists($ws, $this->workspaces)) {
155               return $this->workspaces[$ws];
156          }
157
158          return null;
159     }
160
161     /**
162     Magic __get method.
163     @copydoc ::get
164     */
165     public function __get($n)
166     {
167          return $this->get($n);
168     }
169
170     /**
171     Returns $workspaces property content.
172
173     @return   <b>array</b>
174     */
175     public function dumpWorkspaces()
176     {
177          return $this->workspaces;
178     }
179
180}
Note: See TracBrowser for help on using the repository browser.

Sites map