X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fs.php;h=7ba3b24776e593446c436aa769272ddf4a008f21;hb=ba63661ce2f38974002c7e4113320e9d06010853;hp=338a437ea5840e40500ba7c51ae9a14a5e10546e;hpb=179afa7fa79902e11498314d37fe4dbf452b3617;p=platal.git diff --git a/classes/s.php b/classes/s.php index 338a437..7ba3b24 100644 --- a/classes/s.php +++ b/classes/s.php @@ -19,7 +19,104 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ -class S extends Session { +class S +{ + /** Set a constructor because this is called prior to S::s(), so we can + * define S::s() for other usages. + */ + private function __construct() + { + assert(false); + } + + public static function has($key) + { + return isset($_SESSION[$key]); + } + + public static function kill($key) + { + unset($_SESSION[$key]); + } + + public static function v($key, $default = null) + { + return isset($_SESSION[$key]) ? $_SESSION[$key] : $default; + } + + public static function s($key, $default = '') + { + return (string)S::v($key, $default); + } + + public static function i($key, $default = 0) + { + $i = S::v($key, $default); + return is_numeric($i) ? intval($i) : $default; + } + + public static function l(array $keys) + { + return array_map(array('S', 'v'), $keys); + } + + public static function set($key, $value) + { + $_SESSION[$key] =& $value; + } + + public static function bootstrap($key, $value) + { + if (!S::has($key)) { + S::set($key, $value); + } + } + + public static function logger($uid = null) + { + if (!S::has('log')) { + if (S::has('suid')) { + $suid = S::v('suid'); + S::set('log', new PlLogger(S::v('uid'), $suid['uid'])); + } else if (S::has('uid') || $uid) { + S::set('log', new PlLogger(S::v('uid', $uid))); + } + } + return S::v('log'); + } + + public static function has_perms() + { + return Platal::session()->checkPerms(PERMS_ADMIN); + } + + public static function logged() + { + return S::v('auth', AUTH_PUBLIC) > AUTH_PUBLIC; + } + + public static function identified() + { + return S::v('auth', AUTH_PUBLIC) >= Platal::session()->sureLevel(); + } + + // Anti-XSRF protections. + public static function has_xsrf_token() + { + return S::has('xsrf_token') && S::v('xsrf_token') == Env::v('token'); + } + + public static function assert_xsrf_token() + { + if (!S::has_xsrf_token()) { + Platal::page()->kill('L\'opération n\'a pas pu aboutir, merci de réessayer.'); + } + } + + public static function rssActivated() + { + return S::has('core_rss_hash') && S::v('core_rss_hash'); + } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: