annotate sites/all/modules/ctools/plugins/access/path_visibility.inc @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
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/visibility based on path.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 $plugin = array(
danielebarchiesi@0 9 'title' => t('String: URL path'),
danielebarchiesi@0 10 'description' => t('Control access by the current path.'),
danielebarchiesi@0 11 'callback' => 'ctools_path_visibility_ctools_access_check',
danielebarchiesi@0 12 'settings form' => 'ctools_path_visibility_ctools_access_settings',
danielebarchiesi@0 13 'summary' => 'ctools_path_visibility_ctools_access_summary',
danielebarchiesi@0 14 'required context' => new ctools_context_optional(t('Path'), 'string'),
danielebarchiesi@0 15 'default' => array('visibility_setting' => 1, 'paths' => ''),
danielebarchiesi@0 16 );
danielebarchiesi@0 17
danielebarchiesi@0 18 /**
danielebarchiesi@0 19 * Settings form
danielebarchiesi@0 20 */
danielebarchiesi@0 21 function ctools_path_visibility_ctools_access_settings($form, &$form_state, $conf) {
danielebarchiesi@0 22 $form['settings']['note'] = array(
danielebarchiesi@0 23 '#value' => '<div class="description">' . t('Note: if no context is chosen, the current page path will be used.') . '</div>',
danielebarchiesi@0 24 );
danielebarchiesi@0 25
danielebarchiesi@0 26 $form['settings']['visibility_setting'] = array(
danielebarchiesi@0 27 '#type' => 'radios',
danielebarchiesi@0 28 '#options' => array(
danielebarchiesi@0 29 1 => t('Allow access on the following pages'),
danielebarchiesi@0 30 0 => t('Allow access on all pages except the following pages'),
danielebarchiesi@0 31 ),
danielebarchiesi@0 32 '#default_value' => $conf['visibility_setting'],
danielebarchiesi@0 33 );
danielebarchiesi@0 34
danielebarchiesi@0 35 $form['settings']['paths'] = array(
danielebarchiesi@0 36 '#type' => 'textarea',
danielebarchiesi@0 37 '#title' => t('Paths'),
danielebarchiesi@0 38 '#default_value' => $conf['paths'],
danielebarchiesi@0 39 '#description' => t("Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are %blog for the blog page and %blog-wildcard for every personal blog. %front is the front page.", array('%blog' => 'blog', '%blog-wildcard' => 'blog/*', '%front' => '<front>')),
danielebarchiesi@0 40 );
danielebarchiesi@0 41 return $form;
danielebarchiesi@0 42 }
danielebarchiesi@0 43
danielebarchiesi@0 44 /**
danielebarchiesi@0 45 * Check for access.
danielebarchiesi@0 46 */
danielebarchiesi@0 47 function ctools_path_visibility_ctools_access_check($conf, $context) {
danielebarchiesi@0 48 if (isset($context->data)) {
danielebarchiesi@0 49 $base_path = $context->data;
danielebarchiesi@0 50 }
danielebarchiesi@0 51 else {
danielebarchiesi@0 52 $base_path = $_GET['q'];
danielebarchiesi@0 53 }
danielebarchiesi@0 54
danielebarchiesi@0 55 $path = drupal_get_path_alias($base_path);
danielebarchiesi@0 56 $page_match = drupal_match_path($path, $conf['paths']);
danielebarchiesi@0 57
danielebarchiesi@0 58 // If there's a path alias, we may still be at the un-aliased path
danielebarchiesi@0 59 // so check that as well.
danielebarchiesi@0 60 if (!isset($context->data) && $path != $base_path) {
danielebarchiesi@0 61 $page_match = $page_match || drupal_match_path($base_path, $conf['paths']);
danielebarchiesi@0 62 }
danielebarchiesi@0 63
danielebarchiesi@0 64 // When $conf['visibility_setting'] has a value of 0, the block is displayed
danielebarchiesi@0 65 // on all pages except those listed in $block->pages. When set to 1, it
danielebarchiesi@0 66 // is displayed only on those pages listed in $block->pages.
danielebarchiesi@0 67 $page_match = !($conf['visibility_setting'] xor $page_match);
danielebarchiesi@0 68
danielebarchiesi@0 69 return $page_match;
danielebarchiesi@0 70 }
danielebarchiesi@0 71
danielebarchiesi@0 72 /**
danielebarchiesi@0 73 * Provide a summary description.
danielebarchiesi@0 74 */
danielebarchiesi@0 75 function ctools_path_visibility_ctools_access_summary($conf, $context) {
danielebarchiesi@0 76 $paths = array();
danielebarchiesi@0 77 foreach (explode("\n", $conf['paths']) as $path) {
danielebarchiesi@0 78 $paths[] = check_plain($path);
danielebarchiesi@0 79 }
danielebarchiesi@0 80
danielebarchiesi@0 81 $identifier = $context->type == 'any' ? t('Current path') : $context->identifier;
danielebarchiesi@0 82 if ($conf['visibility_setting']) {
danielebarchiesi@0 83 return format_plural(count($paths), '@identifier is "@paths"', '@identifier type is one of "@paths"', array('@paths' => implode(', ', $paths), '@identifier' => $identifier));
danielebarchiesi@0 84 }
danielebarchiesi@0 85 else {
danielebarchiesi@0 86 return format_plural(count($paths), '@identifier is not "@paths"', '@identifier type is not one of "@paths"', array('@paths' => implode(', ', $paths), '@identifier' => $identifier));
danielebarchiesi@0 87 }
danielebarchiesi@0 88 }