array( '#label' => t('Set node permissions'), '#arguments' => array( 'node' => array('#entity' => 'node', '#label' => t('Content')), ), '#module' => t('Content access'), ), 'content_access_action_reset_node_permissions' => array( '#label' => t('Reset node permissions'), '#arguments' => array( 'node' => array('#entity' => 'node', '#label' => t('Content')), ), '#module' => t('Content access'), ), ); } /** * Action implementation: Set permissions for a node */ function content_access_action_set_node_permissions($node, $settings) { if (!content_access_get_settings('per_node', $node->type)) { workflow_ng_handle_error_msg('Cannot set per-node permissions for '. $node->type); return; } content_access_save_per_node_settings($node, $settings); } /** * Form for configuring content_access_action_set_node_permissions action. */ function content_access_action_set_node_permissions_form($settings = array(), $argument_info) { return content_access_page_form($settings); } /** * Save configuration for content_access_action_set_node_permissions action. */ function content_access_action_set_node_permissions_submit($form_id, $form_values) { $settings = array(); content_access_parse_settings(content_access_get_ops(), $settings, $form_values); return $settings; } /** * Action implementation: Reset permissions for a node */ function content_access_action_reset_node_permissions($node) { if (!content_access_get_settings('per_node', $node->type)) { workflow_ng_handle_error_msg('Cannot set per-node permissions for '. $node->type); return; } $settings = array(); foreach (content_access_get_ops() as $op) { $settings[$op] = content_access_get_settings($op, $node->type); } content_access_save_per_node_settings($node, $settings); } /** * Implementation of hook_condition_info(). */ function content_access_condition_info() { return array( 'content_access_condition_check_permissions' => array( '#label' => t('Node permissions'), '#arguments' => array( 'node' => array('#entity' => 'node', '#label' => t('Content')), ), '#description' => t('Evaluates to TRUE, if node allows all selected operations for given roles.'), '#module' => t('Content access'), ), ); } /** * Condition implementation: Check if node has permissions. * * @note * This will only check for the existence of permissions, not the * absence of. I.e. a rule that checks just for authenticated write * will return TRUE for a node that allows authenticated and anonymous * write. */ function content_access_condition_check_permissions($node, $settings) { if (!content_access_get_settings('per_node', $node->type)) { // No error, just fail the condition return false; } // Compare our settings with node's settings foreach (content_access_get_ops() as $op) { $expect_roles = $settings[$op]; $cur_roles = content_access_per_node_setting($op, $node); foreach ($expect_roles as $role) { if (empty($cur_roles[$role])) return false; } } return true; } /** * Form for configuring content_access_condition_check_permissions(). */ function content_access_condition_check_permissions_form($settings = array()) { return content_access_page_form($settings); } /** * Save configuration for content_access_condition_check_permissions(). */ function content_access_condition_check_permissions_submit($form_id, $form_values) { $settings = array(); content_access_parse_settings(content_access_get_ops(), $settings, $form_values); return $settings; }