head: indicate explicit og:type of website
[minimedit.git] / auth.inc.php
index a1ccedf50cf16ea328ac107e4c8ee8fd9326fa15..3901609ac5317685563fc446aee404d121a442ad 100644 (file)
@@ -3,9 +3,9 @@ date_default_timezone_set('Europe/Amsterdam');
 
 class User
 {
-       function __construct($dir)
+       function __construct($dir, $existing = TRUE)
        {
-               if (!file_exists($dir)) {
+               if (!file_exists($dir) and $existing) {
                        throw new Exception("Gebruiker niet gevonden in $dir");
                }
                $this->dir = $dir;
@@ -29,7 +29,11 @@ class User
 
        function html()
        {
-               return $this->name ?: $this->login;
+               $name = htmlspecialchars($this->login);
+               if ($this->name and $this->name != $name) {
+                       $name = "{$this->name}<small> @$name</small>";
+               }
+               return $name;
        }
 
        function email()
@@ -40,7 +44,16 @@ class User
        function admin($permission = NULL)
        {
                if (isset($permission)) {
-                       return $this->admin && isset($this->admin[$permission]);  # check level
+                       if (!$this->admin) {
+                               return FALSE;  # empty results
+                       }
+                       preg_match_all('{[ /]}', $permission, $parts, PREG_OFFSET_CAPTURE);
+                       foreach ($parts[0] as $part) {
+                               if (isset($this->admin[substr($permission, 0, $part[1])])) {
+                                       return TRUE;  # partial match
+                               }
+                       }
+                       return isset($this->admin[$permission]);  # check level
                }
                if (!@file_exists("{$this->dir}/.admin")) {
                        return FALSE;  # not an admin