annotate sites/all/modules/ctools/plugins/access/role.inc @ 4:ce11bbd8f642

added modules
author danieleb <danielebarchiesi@me.com>
date Thu, 19 Sep 2013 10:38:44 +0100
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Plugin to provide access control based upon role membership.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Plugins are described by creating a $plugin array which will be used
danielebarchiesi@0 10 * by the system that includes this file.
danielebarchiesi@0 11 */
danielebarchiesi@0 12 $plugin = array(
danielebarchiesi@0 13 'title' => t("User: role"),
danielebarchiesi@0 14 'description' => t('Control access by role.'),
danielebarchiesi@0 15 'callback' => 'ctools_role_ctools_access_check',
danielebarchiesi@0 16 'default' => array('rids' => array()),
danielebarchiesi@0 17 'settings form' => 'ctools_role_ctools_access_settings',
danielebarchiesi@0 18 'settings form submit' => 'ctools_role_ctools_access_settings_submit',
danielebarchiesi@0 19 'summary' => 'ctools_role_ctools_access_summary',
danielebarchiesi@0 20 'required context' => new ctools_context_required(t('User'), 'user'),
danielebarchiesi@0 21 );
danielebarchiesi@0 22
danielebarchiesi@0 23 /**
danielebarchiesi@0 24 * Settings form for the 'by role' access plugin
danielebarchiesi@0 25 */
danielebarchiesi@0 26 function ctools_role_ctools_access_settings($form, &$form_state, $conf) {
danielebarchiesi@0 27 $form['settings']['rids'] = array(
danielebarchiesi@0 28 '#type' => 'checkboxes',
danielebarchiesi@0 29 '#title' => t('Role'),
danielebarchiesi@0 30 '#default_value' => $conf['rids'],
danielebarchiesi@0 31 '#options' => ctools_get_roles(),
danielebarchiesi@0 32 '#description' => t('Only the checked roles will be granted access.'),
danielebarchiesi@0 33 );
danielebarchiesi@0 34 return $form;
danielebarchiesi@0 35 }
danielebarchiesi@0 36
danielebarchiesi@0 37 /**
danielebarchiesi@0 38 * Compress the roles allowed to the minimum.
danielebarchiesi@0 39 */
danielebarchiesi@0 40 function ctools_role_ctools_access_settings_submit($form, &$form_state) {
danielebarchiesi@0 41 $form_state['values']['settings']['rids'] = array_keys(array_filter($form_state['values']['settings']['rids']));
danielebarchiesi@0 42 }
danielebarchiesi@0 43
danielebarchiesi@0 44 /**
danielebarchiesi@0 45 * Check for access.
danielebarchiesi@0 46 */
danielebarchiesi@0 47 function ctools_role_ctools_access_check($conf, $context) {
danielebarchiesi@0 48 // As far as I know there should always be a context at this point, but this
danielebarchiesi@0 49 // is safe.
danielebarchiesi@0 50 if (empty($context) || empty($context->data) || !isset($context->data->roles)) {
danielebarchiesi@0 51 return FALSE;
danielebarchiesi@0 52 }
danielebarchiesi@0 53
danielebarchiesi@0 54 $roles = array_keys($context->data->roles);
danielebarchiesi@0 55 $roles[] = $context->data->uid ? DRUPAL_AUTHENTICATED_RID : DRUPAL_ANONYMOUS_RID;
danielebarchiesi@0 56 return (bool) array_intersect($conf['rids'], $roles);
danielebarchiesi@0 57 }
danielebarchiesi@0 58
danielebarchiesi@0 59 /**
danielebarchiesi@0 60 * Provide a summary description based upon the checked roles.
danielebarchiesi@0 61 */
danielebarchiesi@0 62 function ctools_role_ctools_access_summary($conf, $context) {
danielebarchiesi@0 63 if (!isset($conf['rids'])) {
danielebarchiesi@0 64 $conf['rids'] = array();
danielebarchiesi@0 65 }
danielebarchiesi@0 66 $roles = ctools_get_roles();
danielebarchiesi@0 67
danielebarchiesi@0 68 $names = array();
danielebarchiesi@0 69 foreach (array_filter($conf['rids']) as $rid) {
danielebarchiesi@0 70 $names[] = check_plain($roles[$rid]);
danielebarchiesi@0 71 }
danielebarchiesi@0 72
danielebarchiesi@0 73 if (empty($names)) {
danielebarchiesi@0 74 return t('@identifier can have any role', array('@identifier' => $context->identifier));
danielebarchiesi@0 75 }
danielebarchiesi@0 76
danielebarchiesi@0 77 return format_plural(count($names), '@identifier has role "@roles"', '@identifier has one of "@roles"', array('@roles' => implode(', ', $names), '@identifier' => $context->identifier));
danielebarchiesi@0 78 }
danielebarchiesi@0 79