d436bf1e6ddd11c663a92575268de78c86d7b501
2 /***************************************************************************
3 * Copyright (C) 2003-2010 Polytechnique.org *
4 * http://opensource.polytechnique.org/ *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
24 /** Set a constructor because this is called prior to S::s(), so we can
25 * define S::s() for other usages.
27 private function __construct()
32 public static function has($key)
34 return isset($_SESSION[$key]);
37 public static function kill($key)
39 unset($_SESSION[$key]);
42 public static function v($key, $default = null
)
44 return isset($_SESSION[$key]) ?
$_SESSION[$key] : $default;
47 public static function s($key, $default = '')
49 return (string)S
::v($key, $default);
52 public static function b($key, $default = false
)
54 return (bool
)S
::v($key, $default);
57 public static function i($key, $default = 0)
59 $i = S
::v($key, $default);
60 return is_numeric($i) ?
intval($i) : $default;
63 public static function t($key, $default = '')
65 return trim(S
::s($key, $default));
68 public static function blank($key, $strict = false
)
73 $var = $strict ? S
::s($key) : S
::t($key);
77 public static function l(array $keys)
79 return array_map(array('S', 'v'), $keys);
82 public static function set($key, $value)
84 $_SESSION[$key] =& $value;
87 public static function bootstrap($key, $value)
94 public static function logger($uid = null
)
96 $uid = S
::i('uid', $uid);
97 if (!S
::has('log') ||
!S
::v('log')->isValid($uid)) {
100 $suid = S
::v('suid');
101 S
::set('log', $platal->buildLogger(S
::i('uid', $uid), $suid['uid']));
102 } else if (S
::has('uid') ||
$uid) {
103 S
::set('log', $platal->buildLogger(S
::i('uid', $uid)));
105 S
::set('log', PlLogger
::dummy($uid));
111 /** User object storage and accessor. The user object (an instance of the
112 * local subclass of PlUser) is currently stored as a S class variable, and
113 * not as a session variable, so as to avoid bloating the global on-disk
115 * TODO: When all the codebase will use S::user() as the only source for
116 * user ids, fullname/displayname, and forlife/bestalias, S::$user should
117 * move into the php session (and data it helds should be removed from
118 * the php session). */
119 private static $user = null
;
120 public static function &user($forceFetch = false
)
122 if (($forceFetch || self
::$user == null
) && class_exists('User')) {
123 if (S
::has('user') && S
::v('user') instanceof User
) {
124 self
::$user = S
::v('user');
126 self
::$user = User
::getSilentWithValues(S
::i('uid'), $_SESSION);
132 public static function changeSession(array $newSession)
134 $oldSession = $_SESSION;
135 $_SESSION = $newSession;
140 public static function logged()
142 return S
::i('auth', AUTH_PUBLIC
) >= Platal
::session()->loggedLevel();
145 public static function identified()
147 return S
::i('auth', AUTH_PUBLIC
) >= Platal
::session()->sureLevel();
150 public static function admin()
152 return Platal
::session()->checkPerms(PERMS_ADMIN
);
155 public static function suid($field = null
, $default = null
)
157 if (is_null($field)) {
158 return !S
::blank('suid');
160 $suid = S
::v('suid', array());
161 if (!empty($suid) && isset($suid[$field])) {
162 return $suid[$field];
169 // Anti-XSRF protections.
170 public static function has_xsrf_token()
172 return S
::has('xsrf_token') && S
::v('xsrf_token') == Env
::v('token');
175 public static function assert_xsrf_token()
177 if (!S
::has_xsrf_token()) {
178 Platal
::page()->kill('L\'opération n\'a pas pu aboutir, merci de réessayer.');
182 public static function hasAuthToken()
184 return !S
::blank('token');
187 public static function rssActivated()
189 // XXX: Deprecated, to be replaced by S::hasToken()
190 return S
::has('core_rss_hash') && S
::v('core_rss_hash');
194 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: