',
'#options' => $roles,
'#title' => t('View own content'),
'#default_value' => $defaults['view_own'],
- '#process' => array('expand_checkboxes', 'content_access_disable_checkboxes'),
+ '#process' => array('form_process_checkboxes', 'content_access_disable_checkboxes'),
);
$form['per_role']['update_own'] = array('#type' => 'checkboxes',
'#prefix' => '
',
@@ -299,7 +291,7 @@ function content_access_role_based_form(
'#options' => $roles,
'#title' => t('Edit own content'),
'#default_value' => $defaults['update_own'],
- '#process' => array('expand_checkboxes', 'content_access_disable_checkboxes'),
+ '#process' => array('form_process_checkboxes', 'content_access_disable_checkboxes'),
);
$form['per_role']['delete_own'] = array('#type' => 'checkboxes',
'#prefix' => '
',
@@ -307,7 +299,7 @@ function content_access_role_based_form(
'#options' => $roles,
'#title' => t('Delete own content'),
'#default_value' => $defaults['delete_own'],
- '#process' => array('expand_checkboxes', 'content_access_disable_checkboxes'),
+ '#process' => array('form_process_checkboxes', 'content_access_disable_checkboxes'),
);
$form['per_role']['clearer'] = array(
'#value' => '
',
@@ -326,21 +318,20 @@ function content_access_disable_checkbox
if (!in_array($key, $access_roles) && !($key != DRUPAL_ANONYMOUS_RID && in_array(DRUPAL_AUTHENTICATED_RID, $access_roles))) {
$element[$key]['#disabled'] = TRUE;
$element[$key]['#default_value'] = FALSE;
- $element[$key]['#prefix'] = ' t('access content'))) .'">';
+ $element[$key]['#prefix'] = ' t('access content'))) . '">';
$element[$key]['#suffix'] = "";
}
- else if (in_array($key, $admin_roles) || ($key != DRUPAL_ANONYMOUS_RID && in_array(DRUPAL_AUTHENTICATED_RID, $admin_roles))) {
+ elseif (in_array($key, $admin_roles) || ($key != DRUPAL_ANONYMOUS_RID && in_array(DRUPAL_AUTHENTICATED_RID, $admin_roles))) {
// Fix the checkbox to be enabled for users with administer node privileges
$element[$key]['#disabled'] = TRUE;
$element[$key]['#default_value'] = TRUE;
- $element[$key]['#prefix'] = ' t('administer nodes'))) .'">';
+ $element[$key]['#prefix'] = ' t('administer nodes'))) . '">';
$element[$key]['#suffix'] = "";
}
}
return $element;
}
-
/**
* Formapi #after_build callback, that disables checkboxes for roles without access to content.
*/
@@ -350,15 +341,13 @@ function content_access_force_permission
$element[$op][$rid]['#disabled'] = TRUE;
$element[$op][$rid]['#attributes']['disabled'] = 'disabled';
$element[$op][$rid]['#value'] = TRUE;
- $element[$op][$rid]['#prefix'] = '';
+ $element[$op][$rid]['#prefix'] = '';
$element[$op][$rid]['#suffix'] = "";
}
}
return $element;
}
-
-
/**
* Submit callback for the user permissions form.
* Trigger changes to node permissions to rebuild our grants.
@@ -392,11 +381,23 @@ function _content_access_get_node_permis
}
/**
+ * Gets the content access acl id of the node.
+ */
+function content_access_get_acl_id($node, $op) {
+ $acl_id = acl_get_id_by_name('content_access', $op . '_' . $node->nid);
+ if (!$acl_id) {
+ // Create one:
+ $acl_id = acl_create_new_acl('content_access', $op . '_' . $node->nid);
+ }
+ return $acl_id;
+}
+
+/**
* Detaches all our ACLs for the nodes of the given type.
*/
function _content_access_remove_acls($type) {
- $result = db_query("SELECT n.nid FROM {node} n WHERE type = '%s'", $type);
- while ($node = db_fetch_object($result)) {
+ $result = db_query("SELECT n.nid FROM {node} n WHERE type = :type", array('type' => $type));
+ foreach ($result as $node) {
acl_node_clear_acls($node->nid, 'content_access');
}
-}
+}
\ No newline at end of file
Index: content_access.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/content_access/Attic/content_access.info,v
retrieving revision 1.1.4.1
diff -u -p -r1.1.4.1 content_access.info
--- content_access.info 30 Jun 2008 08:56:27 -0000 1.1.4.1
+++ content_access.info 23 Dec 2010 11:13:04 -0000
@@ -1,5 +1,10 @@
; $Id: content_access.info,v 1.1.4.1 2008/06/30 08:56:27 fago Exp $
name = Content Access
-description = Provides flexible content access control
+description = Provides flexible content access control.
+core = 7.x
package = Access control
-core = "6.x"
\ No newline at end of file
+dependencies[] = acl
+files[] = content_access.install
+files[] = content_access.module
+files[] = content_access.admin.inc
+files[] = content_access.rules.inc
\ No newline at end of file
Index: content_access.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/content_access/Attic/content_access.install,v
retrieving revision 1.1.4.3
diff -u -p -r1.1.4.3 content_access.install
--- content_access.install 28 Oct 2008 13:36:17 -0000 1.1.4.3
+++ content_access.install 23 Dec 2010 11:13:04 -0000
@@ -2,20 +2,16 @@
// $Id: content_access.install,v 1.1.4.3 2008/10/28 13:36:17 fago Exp $
/**
- * Implementation of hook_install().
+ * @file
+ * Install Content Access DB schema.
+ *
*/
-function content_access_install() {
- // Create tables.
- drupal_install_schema('content_access');
-}
/**
* Implementation of hook_uninstall().
*/
function content_access_uninstall() {
variable_del('content_access_settings');
- // Remove tables.
- drupal_uninstall_schema('content_access');
}
/**
@@ -29,52 +25,16 @@ function content_access_schema() {
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0
- ),
+ ),
'settings' => array(
'type' => 'text',
'not null' => FALSE,
'size' => 'medium'
- ),
+ ),
),
'primary key' => array('nid')
);
return $schema;
}
-
-/**
- * Upgrade from d5 to d6
- */
-function content_access_update_6001() {
- drupal_load('module', 'content_access');
- module_load_include('inc', 'content_access', 'content_access.admin');
-
- // Migrate old ca settings to new available d6 permissions
- $permissions = content_access_get_permissions_by_role();
- $settings = content_access_get_settings();
-
- foreach (node_get_types('names') as $type => $type_name) {
- foreach (array('update', 'delete') as $op) {
- // Set permission for roles that are allowed to access
- foreach (content_access_get_settings($op, $type) as $rid => $value) {
- if (is_numeric($rid)) {
- $permissions[$rid][ content_access_get_permission_by_op($op, $type) ] = TRUE;
- }
- else if ($rid == 'author') {
- // CA 5.x let authors access, but only if they were authenticated. So we set the d6 permissions like this.
- $permissions[DRUPAL_AUTHENTICATED_RID][ content_access_get_permission_by_op($op . '_own', $type) ] = TRUE;
- }
- }
- // Make sure to delete the old setting, so that the defaults (permissions) will be used.
- unset($settings[$op][$type]);
- }
- }
- content_access_save_permissions($permissions);
- content_access_set_settings($settings);
-
- // Rebuild node access for all nodes
- node_access_needs_rebuild(TRUE);
-
- return array();
-}
-
+//@todo: do we need an upgrade function from D6 to D7?
\ No newline at end of file
Index: content_access.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/content_access/Attic/content_access.module,v
retrieving revision 1.1.2.9.2.22
diff -u -p -r1.1.2.9.2.22 content_access.module
--- content_access.module 2 Sep 2010 13:13:33 -0000 1.1.2.9.2.22
+++ content_access.module 23 Dec 2010 11:13:04 -0000
@@ -5,6 +5,15 @@
* @file Content access module file.
*/
+/**
+ * Implements hook_admin_paths().
+ */
+function content_access_admin_paths() {
+ $paths = array(
+ 'node/*/access' => TRUE,
+ );
+ return $paths;
+}
/**
* Implementation of hook_menu().
@@ -13,54 +22,45 @@ function content_access_menu() {
$items = array();
$items['node/%node/access'] = array(
- 'title' => 'Access control',
+ 'title' => 'Access Control',
'page callback' => 'drupal_get_form',
'page arguments' => array('content_access_page', 1),
'access callback' => 'content_access_node_page_access',
'access arguments' => array(1),
'file' => 'content_access.admin.inc',
+ 'theme callback' => '_node_custom_theme',
+ 'type' => MENU_LOCAL_TASK,
'weight' => 3,
- 'type' => MENU_LOCAL_TASK
);
- foreach (node_get_types('types', NULL, TRUE) as $type) {
- $type_url_str = str_replace('_', '-', $type->type);
- $items['admin/content/node-type/'. $type_url_str .'/access'] = array(
- 'title' => 'Access control',
- 'description' => 'Configure content access control.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('content_access_admin_settings', $type->type),
- 'access callback' => 'content_access_admin_settings_access',
- 'access arguments' => array(),
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'content_access.admin.inc',
- 'weight' => 1,
- );
- }
+ $items['admin/structure/types/manage/%node_type/access'] = array(
+ 'title' => 'Access Control',
+ 'description' => 'Configure content access control.',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('content_access_admin_settings', 4),
+ 'access callback' => 'content_access_admin_settings_access',
+ 'access arguments' => array(),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'content_access.admin.inc',
+ 'theme callback' => '_node_custom_theme',
+ 'weight' => 1,
+ );
+
return $items;
}
/**
- * Implementation of hook_init().
- *
- * Make node access settings page use admin theme if appropriate.
- *
- * @see system_init()
+ * Get access tab page for the viewed node.
*/
-function content_access_init() {
- // Use the administrative theme if the user is looking at a page at node/%/access
- if (variable_get('node_admin_theme', '0') && arg(0) == 'node' && arg(2) == 'access') {
- global $custom_theme;
- $custom_theme = variable_get('admin_theme', '0');
- drupal_add_css(drupal_get_path('module', 'system') .'/admin.css', 'module');
- }
-}
-
function content_access_node_page_access($node) {
global $user;
- return content_access_get_settings('per_node', $node->type) && user_access('grant content access') || content_access_get_settings('per_node', $node->type) && (user_access('grant own content access') && ($user->uid == $node->uid));
+ return content_access_get_settings('per_node', $node->type) && user_access('grant content access') ||
+ content_access_get_settings('per_node', $node->type) && (user_access('grant own content access') && ($user->uid == $node->uid));
}
+/**
+ * Content access settings for content type.
+ */
function content_access_admin_settings_access() {
return user_access('administer nodes') && user_access('administer content types');
}
@@ -68,8 +68,17 @@ function content_access_admin_settings_a
/**
* Implementation of hook_perm().
*/
-function content_access_perm() {
- return array('grant content access', 'grant own content access');
+function content_access_permission() {
+ return array(
+ 'grant content access' => array(
+ 'title' => t('Grant Content Access'),
+ 'description' => t('View and modify content access for any nodes'),
+ ),
+ 'grant own content access' => array(
+ 'title' => t('Grant Own Content Access'),
+ 'description' => t('View and modify content access for own nodes'),
+ ),
+ );
}
/**
@@ -83,7 +92,7 @@ function content_access_node_grants($acc
}
/**
- * Implementation of hook_node_access_records()
+ * Implementation of hook_node_access_records().
*/
function content_access_node_access_records($node) {
if (content_access_disabling()) {
@@ -95,19 +104,21 @@ function content_access_node_access_reco
$grants = array();
foreach (array('view', 'update', 'delete') as $op) {
foreach (content_access_get_rids_per_node_op($op, $node) as $rid) {
- $grants[$rid]['grant_'. $op] = 1;
+ $grants[$rid]['grant_' . $op] = 1;
}
}
foreach ($grants as $rid => $grant) {
$grants[$rid] = content_access_proccess_grant($grant, $rid, $node);
}
+
// Care for the author grant.
$grant = array();
foreach (array('view', 'update', 'delete') as $op) {
// Get all roles that have access to use $op on this node.
$any_roles = drupal_map_assoc(content_access_per_node_setting($op, $node));
+ $any_roles = $any_roles ? $any_roles : array();
$any_roles += ($op != 'view') ? content_access_get_settings($op, $node->type) : array();
- $grant['grant_'. $op] = content_access_own_op($node, $any_roles, content_access_get_rids_per_node_op($op .'_own', $node));
+ $grant['grant_' . $op] = content_access_own_op($node, $any_roles, content_access_get_rids_per_node_op($op . '_own', $node));
}
if (array_filter($grant)) {
@@ -127,16 +138,17 @@ function content_access_node_access_reco
else {
content_access_optimize_grants($grants, $node);
}
+
return $grants;
}
/**
- * Implementation of hook_nodeapi().
+ * Implementation of hook_node_delete().
*/
-function content_access_nodeapi($node, $op, $teaser, $page) {
- if ($op == 'delete') {
- db_query("DELETE FROM {content_access} WHERE nid = %d", $node->nid);
- }
+function content_access_node_delete($node) {
+ db_delete('content_access')
+ ->condition('nid', $node->nid)
+ ->execute();
}
/**
@@ -183,6 +195,7 @@ function content_access_get_settings($re
}
if (!isset($type)) {
$settings = content_access_get_settings();
+
return isset($settings[$return]) ? $settings[$return] : array();
}
return array();
@@ -229,6 +242,8 @@ function content_access_get_setting_defa
return content_access_get_permission_access(content_access_get_permission_by_op($setting, $type));
case 'priority':
return 0;
+ case 'per_node' :
+ return array();
}
}
@@ -255,13 +270,13 @@ function content_access_get_permission_b
default:
return FALSE;
case 'update':
- return 'edit any '. $type .' content';
+ return 'edit any ' . $type . ' content';
case 'update_own':
- return 'edit own '. $type .' content';
+ return 'edit own ' . $type . ' content';
case 'delete':
- return 'delete any '. $type .' content';
+ return 'delete any ' . $type . ' content';
case 'delete_own':
- return 'delete own '. $type .' content';
+ return 'delete own ' . $type . ' content';
}
}
@@ -317,8 +332,9 @@ function content_access_own_op($node, $a
if (!isset($roles[$node->uid])) {
$roles[$node->uid] = $node->uid ? array(DRUPAL_AUTHENTICATED_RID) : array(DRUPAL_ANONYMOUS_RID);
- $result = db_query('SELECT rid FROM {users_roles} WHERE uid = %d', $node->uid);
- while ($role = db_fetch_object($result)) {
+ $result = db_query('SELECT rid FROM {users_roles} WHERE uid = :uid', array(':uid' => $node->uid));
+
+ foreach ($result as $role) {
$roles[$node->uid][] = $role->rid;
}
}
@@ -343,9 +359,11 @@ function content_access_own_op($node, $a
*/
function content_access_get_rids_per_node_op($op, $node) {
$rids = content_access_per_node_setting($op, $node);
+
if ($permission = content_access_get_permission_by_op($op, $node->type)) {
$perm_roles = content_access_get_permission_access($permission);
$rids = array_diff($rids, $perm_roles);
+
if (in_array(DRUPAL_AUTHENTICATED_RID, $perm_roles)) {
return in_array(DRUPAL_ANONYMOUS_RID, $rids) ? array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID) : array(DRUPAL_AUTHENTICATED_RID);
}
@@ -386,9 +404,19 @@ function content_access_per_node_setting
* Saves custom per node settings in the own content_access table.
*/
function content_access_save_per_node_settings($node, $settings) {
- db_query("UPDATE {content_access} SET settings = '%s' WHERE nid = %d", serialize($settings), $node->nid);
- if (!db_affected_rows()) {
- db_query("INSERT INTO {content_access} (nid, settings) VALUES(%d, '%s')", $node->nid, serialize($settings));
+ db_update('content_access')
+ ->condition('nid', $node->nid)
+ ->fields(array('settings' => serialize($settings)))
+ ->execute();
+
+ $count = db_query('SELECT COUNT(nid) FROM {content_access} WHERE nid = :nid', array(
+ ':nid' => $node->nid,
+ ))->fetchField();
+
+ if (!$count) {
+ db_insert('content_access')
+ ->fields(array('nid' => $node->nid, 'settings' => serialize($settings)))
+ ->execute();
}
// Make content_access_per_node_setting() use the new settings
content_access_per_node_setting(NULL, $node, $settings);
@@ -398,9 +426,13 @@ function content_access_save_per_node_se
* Deletes all custom per node settings, so that content type defaults are used again.
*/
function content_access_delete_per_node_settings($node) {
- db_query("DELETE FROM {content_access} WHERE nid = %d", $node->nid);
+ db_delete('content_access')
+ ->condition('nid', $node->nid)
+ ->execute();
+
// Clear the cache.
content_access_per_node_setting(NULL, $node, FALSE);
+
// Delete possible acl settings
if (module_exists('acl')) {
foreach (array('view', 'update', 'delete') as $op) {
@@ -411,18 +443,6 @@ function content_access_delete_per_node_
}
/**
- * Gets the content access acl id of the node.
- */
-function content_access_get_acl_id($node, $op) {
- $acl_id = acl_get_id_by_name('content_access', $op .'_'. $node->nid);
- if (!$acl_id) {
- // Create one:
- $acl_id = acl_create_new_acl('content_access', $op .'_'. $node->nid);
- }
- return $acl_id;
-}
-
-/**
* Gets the per node settings of a node.
*
* @note
@@ -430,11 +450,13 @@ function content_access_get_acl_id($node
* it will return an empty array.
*/
function content_access_get_per_node_settings($node) {
- $settings = db_result(db_query("SELECT settings FROM {content_access} WHERE nid = %d", $node->nid));
- if (!$settings) {
- return array();
+ foreach (db_query("SELECT settings FROM {content_access} WHERE nid = :nid", array(':nid' => $node->nid)) as $record) {
+ $settings = $record->settings;
+ if (!$settings) {
+ return array();
+ }
+ return unserialize($settings);
}
- return unserialize($settings);
}
/**
@@ -445,13 +467,15 @@ function content_access_get_per_node_set
*/
function content_access_optimize_grants(&$grants, $node) {
$rids = array('view' => array(), 'update' => array(), 'delete' => array());
+
foreach ($grants as $key => $grant) {
foreach (array('view', 'update', 'delete') as $op) {
- if (is_numeric($key) && !empty($grant['grant_'. $op])) {
+ if (is_numeric($key) && !empty($grant['grant_' . $op])) {
$rids[$op][] = $key;
}
}
}
+
// Detect if all are allowed to view
$all = array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID);
if (count(array_diff($all, $rids['view'])) == 0) {
@@ -459,6 +483,7 @@ function content_access_optimize_grants(
$rids['view'] = array('all');
$grants['all'] = array('realm' => 'all', 'gid' => 0, 'grant_view' => 1, 'grant_update' => 0, 'grant_delete' => 0, 'priority' => content_access_get_settings('priority', $node->type));
}
+
// If authenticated users are involved, remove unnecessary other roles.
foreach (array('view', 'update', 'delete') as $op) {
if (in_array(DRUPAL_AUTHENTICATED_RID, $rids[$op])) {
@@ -472,7 +497,7 @@ function content_access_optimize_grants(
continue;
}
foreach (array('view', 'update', 'delete') as $op) {
- if ($grant['grant_'. $op] && in_array($key, $rids[$op])) {
+ if ($grant['grant_' . $op] && in_array($key, $rids[$op])) {
//it's still here, so we can't remove this grant
continue 2;
}
@@ -483,8 +508,25 @@ function content_access_optimize_grants(
}
/**
- * Implementation of hook_node_type():
- * Update settings on node type name change.
+ * Implementation of hook_node_type().
+ *
+ * Updates settings on node type name delete.
+ */
+function content_access_node_type_delete($info) {
+ content_access_node_type('delete', $info);
+}
+
+/**
+ * Implementation of hook_node_type().
+ *
+ * Updates settings on node type name change.
+ */
+function content_access_node_type_update($info) {
+ content_access_node_type('update', $info);
+}
+
+/**
+ * Implementation of hook_node_type().
*/
function content_access_node_type($op, $info) {
switch ($op) {