summaryrefslogtreecommitdiff
path: root/core/helpers
diff options
context:
space:
mode:
Diffstat (limited to 'core/helpers')
-rw-r--r--core/helpers/access.php35
-rw-r--r--core/helpers/core_installer.php8
-rw-r--r--core/helpers/core_menu.php6
3 files changed, 39 insertions, 10 deletions
diff --git a/core/helpers/access.php b/core/helpers/access.php
index c2f7a76e..9d4cb105 100644
--- a/core/helpers/access.php
+++ b/core/helpers/access.php
@@ -85,6 +85,29 @@ class access_Core {
}
/**
+ * Can this permission be changed for this item?
+ *
+ * @param Group_Model $group
+ * @param string $perm_name
+ * @param Item_Model $item
+ * @return ORM_Model item that locks this one
+ */
+ public static function locking_items($group, $perm_name, $item) {
+ if ($perm_name != "view") {
+ return null;
+ }
+
+ // For view permissions, if any parent is self::DENY, then those parents lock this one.
+ return ORM::factory("item")
+ ->where("`left` <= $item->left")
+ ->where("`right` >= $item->right")
+ ->where("`id` <> $item->id")
+ ->where("view_$group->id", 0)
+ ->find_all()
+ ->as_array();
+ }
+
+ /**
* Does the active user have this permission on this item?
*
* @param string $perm_name
@@ -193,19 +216,21 @@ class access_Core {
/**
* Register a permission so that modules can use it.
*
- * @param string $perm_name
+ * @param string $name The internal name for for this permission
+ * @param string $display_name The internationalized version of the displayable name
* @return void
*/
- public static function register_permission($perm_name) {
- $permission = ORM::factory("permission", $perm_name);
+ public static function register_permission($name, $display_name) {
+ $permission = ORM::factory("permission", $name);
if ($permission->loaded) {
throw new Exception("@todo PERMISSION_ALREADY_EXISTS $name");
}
- $permission->name = $perm_name;
+ $permission->name = $name;
+ $permission->display_name = $display_name;
$permission->save();
foreach (self::_get_all_groups() as $group) {
- self::_add_columns($perm_name, $group);
+ self::_add_columns($name, $group);
}
}
diff --git a/core/helpers/core_installer.php b/core/helpers/core_installer.php
index b08ac229..d02d8465 100644
--- a/core/helpers/core_installer.php
+++ b/core/helpers/core_installer.php
@@ -115,7 +115,7 @@ class core_installer {
$db->query("CREATE TABLE `permissions` (
`id` int(9) NOT NULL auto_increment,
`name` varchar(64) default NULL,
- `version` int(9) default NULL,
+ `display_name` varchar(64) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY(`name`))
ENGINE=InnoDB DEFAULT CHARSET=utf8;");
@@ -153,9 +153,9 @@ class core_installer {
@mkdir(VARPATH . $dir);
}
- access::register_permission("view");
- access::register_permission("view_full");
- access::register_permission("edit");
+ access::register_permission("view", "View");
+ access::register_permission("view_full", "View Full Size");
+ access::register_permission("edit", "Edit");
$root = ORM::factory("item");
$root->type = 'album';
diff --git a/core/helpers/core_menu.php b/core/helpers/core_menu.php
index 68d6c7d9..5de2b0d7 100644
--- a/core/helpers/core_menu.php
+++ b/core/helpers/core_menu.php
@@ -55,7 +55,11 @@ class core_menu_Core {
->append(Menu::factory("dialog")
->id("add_album")
->label(_("Add an album"))
- ->url(url::site("form/add/albums/$item->id?type=album")));
+ ->url(url::site("form/add/albums/$item->id?type=album")))
+ ->append(Menu::factory("dialog")
+ ->id("edit_permissions")
+ ->label(_("Edit permissions"))
+ ->url(url::site("form/edit/permissions/$item->id")));
}
}