Dotclear

source: inc/core/class.dc.prefs.php @ 3730:5c45a5df9a59

Revision 3730:5c45a5df9a59, 5.3 KB checked in by franck <carnet.franck.paul@…>, 7 years ago (diff)

Code formatting (PSR-2)

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    Create a new workspace. If the workspace already exists, return it without modification.
86
87    @param    ws    <b>string</b>        Workspace name
88    @return    <b>dcWorkspace</b>    The workspace created
89     */
90    public function addWorkspace($ws)
91    {
92        if (!array_key_exists($ws, $this->workspaces)) {
93            $this->workspaces[$ws] = new dcWorkspace($GLOBALS['core'], $this->user_id, $ws);
94        }
95        return $this->workspaces[$ws];
96    }
97
98    /**
99    Rename a workspace.
100
101    @param    oldWs     <b>string</b>     Old workspace name
102    @param    newws     <b>string</b>     New workspace name
103    @return     <b>boolean</b>
104     */
105    public function renWorkspace($oldNs, $newNs)
106    {
107        if (!array_key_exists($oldWs, $this->workspaces) || array_key_exists($newWs, $this->workspaces)) {
108            return false;
109        }
110
111        // Rename the workspace in the workspace array
112        $this->workspaces[$newWs] = $this->workspaces[$oldWs];
113        unset($this->workspaces[$oldWs]);
114
115        // Rename the workspace in the database
116        $strReq = 'UPDATE ' . $this->table .
117        " SET pref_ws = '" . $this->con->escape($newWs) . "' " .
118        " WHERE pref_ws = '" . $this->con->escape($oldWs) . "' ";
119        $this->con->execute($strReq);
120        return true;
121    }
122
123    /**
124    Delete a whole workspace with all preferences pertaining to it.
125
126    @param     ws     <b>string</b>     Workspace name
127    @return     <b>boolean</b>
128     */
129    public function delWorkspace($ws)
130    {
131        if (!array_key_exists($ws, $this->workspaces)) {
132            return false;
133        }
134
135        // Remove the workspace from the workspace array
136        unset($this->workspaces[$ws]);
137
138        // Delete all preferences from the workspace in the database
139        $strReq = 'DELETE FROM ' . $this->table .
140        " WHERE pref_ws = '" . $this->con->escape($ws) . "' ";
141        $this->con->execute($strReq);
142        return true;
143    }
144
145    /**
146    Returns full workspace with all prefs pertaining to it.
147
148    @param    ws    <b>string</b>        Workspace name
149    @return    <b>dcWorkspace</b>
150     */
151    public function get($ws)
152    {
153        if (array_key_exists($ws, $this->workspaces)) {
154            return $this->workspaces[$ws];
155        }
156
157        return;
158    }
159
160    /**
161    Magic __get method.
162    @copydoc ::get
163     */
164    public function __get($n)
165    {
166        return $this->get($n);
167    }
168
169    /**
170    Returns $workspaces property content.
171
172    @return    <b>array</b>
173     */
174    public function dumpWorkspaces()
175    {
176        return $this->workspaces;
177    }
178
179}
Note: See TracBrowser for help on using the repository browser.

Sites map