From 65420c9c6ed2ae03a6bd0701627ec938cc48b988 Mon Sep 17 00:00:00 2001 From: ptsimard Date: Tue, 28 Oct 2014 15:15:30 -0400 Subject: [PATCH] Issue #928258 by Deciphered, ptsimard: Add editable filter to views. --- administerusersbyrole.info | 3 +- views/administerusersbyrole.views.inc | 8 ++- ...nisterusersbyrole_handler_filter_permission.inc | 71 ++++++++++++++++++++++ 3 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 views/administerusersbyrole_handler_filter_permission.inc diff --git a/administerusersbyrole.info b/administerusersbyrole.info index d40f76d..d7058ae 100644 --- a/administerusersbyrole.info +++ b/administerusersbyrole.info @@ -4,4 +4,5 @@ core = 7.x files[] = administerusersbyrole.test files[] = views/administerusersbyrole_handler_field_user_link_edit.inc -files[] = views/administerusersbyrole_handler_field_user_link_cancel.inc \ No newline at end of file +files[] = views/administerusersbyrole_handler_field_user_link_cancel.inc +files[] = views/administerusersbyrole_handler_filter_permission.inc diff --git a/views/administerusersbyrole.views.inc b/views/administerusersbyrole.views.inc index 7976ebc..84c5f44 100644 --- a/views/administerusersbyrole.views.inc +++ b/views/administerusersbyrole.views.inc @@ -14,7 +14,7 @@ function administerusersbyrole_views_data_alter(&$data) { $data['users']['edit_node']['field']['handler'] = 'administerusersbyrole_handler_field_user_link_edit'; $data['users']['cancel_node']['field']['handler'] = 'administerusersbyrole_handler_field_user_link_cancel'; } - + /** * Implements hook_views_handlers(). */ @@ -32,6 +32,10 @@ function administerusersbyrole_views_handlers() { 'parent' => 'views_handler_field_user_link_cancel', 'file' => 'administerusersbyrole_handler_field_user_link_cancel.inc', ), + 'administerusersbyrole_handler_filter_permission' => array( + 'parent' => 'views_handler_filter_many_to_one', + 'file' => 'administerusersbyrole_handler_filter_permission.inc', + ), ), ); -} \ No newline at end of file +} diff --git a/views/administerusersbyrole_handler_filter_permission.inc b/views/administerusersbyrole_handler_filter_permission.inc new file mode 100644 index 0000000..4a487eb --- /dev/null +++ b/views/administerusersbyrole_handler_filter_permission.inc @@ -0,0 +1,71 @@ +operator = 'not'; + $roles = db_query('SELECT rid, name FROM {role} WHERE rid > 2 ORDER BY name'); + $exclude = array(); + global $user; + foreach ($roles as $role) { + // "edit users with role {$role->name}" + if (!user_access(_administerusersbyrole_build_perm_string($role->name, 'edit', FALSE))) { + $exclude[] = $role->rid; + } + } + if (!empty($exclude)) { + $this->value = $exclude; + } + } + + function admin_summary() {} + function operator_form() {} + function expose_options() {} + function expose_form(&$form, &$form_state) {} + + function value_form(&$form, &$form_state) { + parent::value_form($form, $form_state); + + // Hiding the form by forcing the value + $form['value']['#default_value'] = array(0 => '0'); + $form['value']['#access'] = FALSE; + + // Removing expose option since the user shouldn't be able to select + // anything he can't acccess. + $form['expose_button']['#access'] = FALSE; + } + + function query() { + $table = $this->ensure_my_table(); + //"$table.rid IS NULL OR $table.uid = ***CURRENT_USER***" + $this->query->add_where( + $this->options['group'], + db_or() + ->isNull($table . '.rid') + ->condition($table . '.uid', '***CURRENT_USER***', '=') + ); + + // Allow only UID:1 to edit UID:1. + $table = $this->query->base_table; + //"$table.uid <> 1 OR ($table.uid = 1 AND $table.uid = ***CURRENT_USER***)" + $this->query->add_where( + $this->options['group'], + db_or() + ->condition($table . '.uid', 1, '<>') + ->condition( + db_and() + ->condition($table . '.uid', 1, '=') + ->condition($table . '.uid', '***CURRENT_USER***', '=')) + ); + } +} -- 1.9.4.msysgit.1