summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/helpers/access.php4
-rw-r--r--core/helpers/module.php6
-rw-r--r--modules/user/helpers/user.php38
-rw-r--r--modules/user/helpers/user_event.php27
4 files changed, 66 insertions, 9 deletions
diff --git a/core/helpers/access.php b/core/helpers/access.php
index 05799bf5..82d7b9b6 100644
--- a/core/helpers/access.php
+++ b/core/helpers/access.php
@@ -98,8 +98,8 @@ class access_Core {
$resource = $perm_name == "view" ?
$item : model_cache::get("access_cache", $item->id, "item_id");
- foreach (user::active()->groups as $group) {
- if ($resource->__get("{$perm_name}_{$group->id}") === self::ALLOW) {
+ foreach (user::group_ids() as $id) {
+ if ($resource->__get("{$perm_name}_$id") === self::ALLOW) {
return true;
}
}
diff --git a/core/helpers/module.php b/core/helpers/module.php
index 02851528..5713901d 100644
--- a/core/helpers/module.php
+++ b/core/helpers/module.php
@@ -117,6 +117,8 @@ class module_Core {
//
// @todo get rid of this extra error checking when we have an installer.
set_error_handler(array("module", "_dummy_error_handler"));
+ $modules = ORM::factory("module")->find_all();
+ restore_error_handler();
// Reload module list from the config file since we'll do a refresh after calling install()
$core = Kohana::config_load('core');
@@ -124,7 +126,7 @@ class module_Core {
self::$module_names = array();
self::$modules = array();
try {
- foreach (ORM::factory("module")->find_all() as $module) {
+ foreach ($modules as $module) {
self::$module_names[] = $module->name;
self::$modules[] = $module;
$kohana_modules[] = MODPATH . $module->name;
@@ -136,7 +138,7 @@ class module_Core {
self::$modules = array();
}
- restore_error_handler();
+ self::event("gallery_ready");
}
public function get_var($module_name, $name, $default_value=null) {
diff --git a/modules/user/helpers/user.php b/modules/user/helpers/user.php
index a04542d3..1667afd1 100644
--- a/modules/user/helpers/user.php
+++ b/modules/user/helpers/user.php
@@ -57,11 +57,38 @@ class user_Core {
}
/**
+ * Make sure that we have a session and group_ids cached in the session.
+ */
+ public static function load_user() {
+ $session = Session::instance();
+ if (!($user = $session->get("user"))) {
+ $session->set("user", $user = user::guest());
+ }
+
+ if (!$session->get("group_ids")) {
+ $ids = array();
+ foreach ($user->groups as $group) {
+ $ids[] = $group->id;
+ }
+ $session->set("group_ids", $ids);
+ }
+ }
+
+ /**
+ * Return the array of group ids this user belongs to
+ *
+ * @return array
+ */
+ public static function group_ids() {
+ return Session::instance()->get("group_ids", array(1));
+ }
+
+ /**
* Return the active user. If there's no active user, return the guest user.
*
* @return User_Model
*/
- static function active() {
+ public static function active() {
return Session::instance()->get("user", self::guest());
}
@@ -72,7 +99,7 @@ class user_Core {
*
* @return User_Model
*/
- static function guest() {
+ public static function guest() {
return model_cache::get("user", 1);
}
@@ -81,8 +108,9 @@ class user_Core {
*
* @return User_Model
*/
- static function set_active($user) {
- return Session::instance()->set("user", $user);
+ public static function set_active($user) {
+ Session::instance()->set("user", $user);
+ self::load_user();
}
/**
@@ -93,7 +121,7 @@ class user_Core {
* @param string $password
* @return User_Model
*/
- static function create($name, $display_name, $password) {
+ public static function create($name, $display_name, $password) {
$user = ORM::factory("user")->where("name", $name)->find();
if ($user->loaded) {
throw new Exception("@todo USER_ALREADY_EXISTS $name");
diff --git a/modules/user/helpers/user_event.php b/modules/user/helpers/user_event.php
new file mode 100644
index 00000000..2d1ce171
--- /dev/null
+++ b/modules/user/helpers/user_event.php
@@ -0,0 +1,27 @@
+<?php defined("SYSPATH") or die("No direct script access.");
+/**
+ * Gallery - a web based photo album viewer and editor
+ * Copyright (C) 2000-2008 Bharat Mediratta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+class user_event_Core {
+ /**
+ * Initialization.
+ */
+ public static function gallery_ready() {
+ user::load_user();
+ }
+}