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 }
|