From c113def3e235d122a58ef55cd9ce7229da71a69e Mon Sep 17 00:00:00 2001 From: Ron Shimshock Date: Tue, 8 Nov 2016 00:56:55 -0600 Subject: [PATCH] Add revisions CRUD permissions --- fieldable_panels_panes.install | 10 ++++++ fieldable_panels_panes.module | 42 +++++++++++++++++----- .../views/fieldable_panels_panes.views_default.inc | 2 +- ..._panels_panes_handler_field_delete_revision.inc | 2 +- ...le_panels_panes_handler_field_edit_revision.inc | 2 +- ...le_panels_panes_handler_field_view_revision.inc | 2 +- 6 files changed, 47 insertions(+), 13 deletions(-) diff --git a/fieldable_panels_panes.install b/fieldable_panels_panes.install index efe1ea9..b9b9ca8 100644 --- a/fieldable_panels_panes.install +++ b/fieldable_panels_panes.install @@ -972,3 +972,13 @@ function fieldable_panels_panes_update_7116(&$sandbox) { return t('Updated @count record(s) to use the new locking system.', array('@count' => $sandbox['max'])); } } + +/** + * Assign view revisions permission to roles with administer fieldable panels + * panes. + */ +function fieldable_panels_panes_update_7117() { + foreach (user_roles(FALSE, 'administer fieldable panels panes') as $role_id => $role_name) { + user_role_grant_permissions($role_id, array('view fieldable panels panes revisions')); + } +} diff --git a/fieldable_panels_panes.module b/fieldable_panels_panes.module index 8f190ad..5839ce3 100644 --- a/fieldable_panels_panes.module +++ b/fieldable_panels_panes.module @@ -299,8 +299,8 @@ function fieldable_panels_panes_menu() { 'type' => MENU_LOCAL_TASK, 'page callback' => 'fieldable_panels_panes_entity_list_revisions_page', 'page arguments' => array(4), - 'access callback' => 'fieldable_panels_panes_access', - 'access arguments' => array('delete', 4), + 'access callback' => 'fieldable_panels_panes_revision_access', + 'access arguments' => array('view', 4), 'weight' => -7, ) + $base; @@ -309,7 +309,7 @@ function fieldable_panels_panes_menu() { 'title arguments' => array(4), 'page callback' => 'fieldable_panels_panes_entity_view_page', 'page arguments' => array(4), - 'access callback' => 'fieldable_panels_panes_access', + 'access callback' => 'fieldable_panels_panes_revision_access', 'access arguments' => array('view', 4), 'load arguments' => array(6), ) + $base; @@ -319,7 +319,7 @@ function fieldable_panels_panes_menu() { 'type' => MENU_DEFAULT_LOCAL_TASK, 'page callback' => 'fieldable_panels_panes_entity_view_page', 'page arguments' => array(4), - 'access callback' => 'fieldable_panels_panes_access', + 'access callback' => 'fieldable_panels_panes_revision_access', 'access arguments' => array('view', 4), 'load arguments' => array(6), 'weight' => -10, @@ -331,7 +331,7 @@ function fieldable_panels_panes_menu() { 'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE, 'page callback' => 'fieldable_panels_panes_entity_edit_page', 'page arguments' => array(4), - 'access callback' => 'fieldable_panels_panes_access', + 'access callback' => 'fieldable_panels_panes_revision_access', 'access arguments' => array('update', 4), 'weight' => -8, 'load arguments' => array(6), @@ -343,7 +343,7 @@ function fieldable_panels_panes_menu() { 'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE, 'page callback' => 'drupal_get_form', 'page arguments' => array('fieldable_panels_panes_entity_delete_revision_form', 4), - 'access callback' => 'fieldable_panels_panes_access', + 'access callback' => 'fieldable_panels_panes_revision_access', 'access arguments' => array('delete', 4), 'weight' => -7, 'load arguments' => array(6), @@ -452,6 +452,22 @@ function fieldable_panels_panes_permission() { 'title' => t('Access list pages for fieldable panels panes'), 'description' => t('Allows users to see fieldable panel panes bundles and entities.'), ), + 'create fieldable panels panes revisions' => array( + 'title' => t('Create fieldable panels panes revisions'), + 'description' => t('Allows users to create fieldable panel panes revisions.'), + ), + 'view fieldable panels panes revisions' => array( + 'title' => t('View fieldable panels panes revisions'), + 'description' => t('Allows users to access fieldable panel panes revisions. This is a minimum required permission, including for users that have the "administer fieldable panels panes" permission.'), + ), + 'update fieldable panels panes revisions' => array( + 'title' => t('Edit fieldable panels panes revisions'), + 'description' => t('Allows users to modify fieldable panel panes revisions, and set a revision as current.'), + ), + 'delete fieldable panels panes revisions' => array( + 'title' => t('Delete fieldable panels panes revisions'), + 'description' => t('Allows users to delete fieldable panel panes revisions.'), + ), ); $entity_info = entity_get_info('fieldable_panels_pane'); @@ -699,7 +715,7 @@ function fieldable_panels_panes_entity_title($entity) { * revision, otherwise, FALSE. */ function fieldable_panels_panes_entity_make_current_access($entity) { - return fieldable_panels_panes_access('update', $entity) && $entity->vid != $entity->current_vid; + return fieldable_panels_panes_revision_access('update', $entity) && $entity->vid != $entity->current_vid; } // ------------------------------------------------------------------------- @@ -1160,6 +1176,13 @@ function fieldable_panels_panes_access($op, $entity = NULL, $account = NULL) { } /** + * Determine if a user has access to a fieldable panel pane entity revisions. + */ +function fieldable_panels_panes_revision_access($op, $entity = NULL, $account = NULL) { + return user_access($op . ' fieldable panels panes revisions') && fieldable_panels_panes_access($op, $entity, $account); +} + +/** * Get the safe human readable name of an entity bundle. */ function fieldable_panels_panes_get_bundle_label($bundle) { @@ -1380,8 +1403,9 @@ function fieldable_panels_panes_entity_edit_form($form, &$form_state) { ), ), '#weight' => 30, - // Don't show the revision options if this is a new FPP. - '#access' => !empty($entity->fpid), + // Don't show the revision options if this is a new FPP, and user does not + // have 'create FPP revision' or 'admin FPP' permissions. + '#access' => !empty($entity->fpid) && (user_access('create fieldable panels panes revision') || user_access('administer fieldable panels panes')), ); $form['revision']['revision'] = array( diff --git a/plugins/views/fieldable_panels_panes.views_default.inc b/plugins/views/fieldable_panels_panes.views_default.inc index 9793a92..24f6a6d 100644 --- a/plugins/views/fieldable_panels_panes.views_default.inc +++ b/plugins/views/fieldable_panels_panes.views_default.inc @@ -193,7 +193,7 @@ function fieldable_panels_panes_views_default_views() { $handler = $view->new_display('default', 'Master', 'default'); $handler->display->display_options['use_more_always'] = FALSE; $handler->display->display_options['access']['type'] = 'perm'; - $handler->display->display_options['access']['perm'] = 'administer fieldable panels panes'; + $handler->display->display_options['access']['perm'] = 'view fieldable panels panes revisions'; $handler->display->display_options['cache']['type'] = 'none'; $handler->display->display_options['query']['type'] = 'views_query'; $handler->display->display_options['query']['options']['query_comment'] = FALSE; diff --git a/plugins/views/fieldable_panels_panes_handler_field_delete_revision.inc b/plugins/views/fieldable_panels_panes_handler_field_delete_revision.inc index dc392e3..744ee4d 100644 --- a/plugins/views/fieldable_panels_panes_handler_field_delete_revision.inc +++ b/plugins/views/fieldable_panels_panes_handler_field_delete_revision.inc @@ -12,7 +12,7 @@ class fieldable_panels_panes_handler_field_delete_revision extends fieldable_pan * Renders the link. */ function render_link($entity, $values) { - if (fieldable_panels_panes_access('delete', $entity)) { + if (fieldable_panels_panes_revision_access('delete', $entity)) { $this->options['alter']['make_link'] = TRUE; $this->options['alter']['path'] = "admin/structure/fieldable-panels-panes/view/$entity->fpid/revision/$entity->vid/delete"; $this->options['alter']['query'] = drupal_get_destination(); diff --git a/plugins/views/fieldable_panels_panes_handler_field_edit_revision.inc b/plugins/views/fieldable_panels_panes_handler_field_edit_revision.inc index 1ad6e9a..82210f2 100644 --- a/plugins/views/fieldable_panels_panes_handler_field_edit_revision.inc +++ b/plugins/views/fieldable_panels_panes_handler_field_edit_revision.inc @@ -12,7 +12,7 @@ class fieldable_panels_panes_handler_field_edit_revision extends fieldable_panel * Renders the link. */ function render_link($entity, $values) { - if (fieldable_panels_panes_access('update', $entity)) { + if (fieldable_panels_panes_revision_access('update', $entity)) { $this->options['alter']['make_link'] = TRUE; $this->options['alter']['path'] = "admin/structure/fieldable-panels-panes/view/$entity->fpid/revision/$entity->vid/edit"; $this->options['alter']['query'] = drupal_get_destination(); diff --git a/plugins/views/fieldable_panels_panes_handler_field_view_revision.inc b/plugins/views/fieldable_panels_panes_handler_field_view_revision.inc index 9c74463..4e19680 100644 --- a/plugins/views/fieldable_panels_panes_handler_field_view_revision.inc +++ b/plugins/views/fieldable_panels_panes_handler_field_view_revision.inc @@ -63,7 +63,7 @@ class fieldable_panels_panes_handler_field_view_revision extends views_handler_f } function render_link($entity, $values) { - if (fieldable_panels_panes_access('view', $entity)) { + if (fieldable_panels_panes_revision_access('view', $entity)) { $this->options['alter']['make_link'] = TRUE; $this->options['alter']['path'] = "admin/structure/fieldable-panels-panes/view/$entity->fpid/revision/$entity->vid"; $text = !empty($this->options['text']) ? $this->options['text'] : t('view'); -- 2.10.2