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 specified context string matching user-specified string
|
danielebarchiesi@0
|
6 */
|
danielebarchiesi@0
|
7
|
danielebarchiesi@0
|
8 $plugin = array(
|
danielebarchiesi@0
|
9 'title' => t("String: comparison"),
|
danielebarchiesi@0
|
10 'description' => t('Control access by string match.'),
|
danielebarchiesi@0
|
11 'callback' => 'ctools_string_equal_ctools_access_check',
|
danielebarchiesi@0
|
12 'settings form' => 'ctools_string_equal_ctools_access_settings',
|
danielebarchiesi@0
|
13 'summary' => 'ctools_string_equal_ctools_access_summary',
|
danielebarchiesi@0
|
14 'required context' => new ctools_context_required(t('String'), 'string'),
|
danielebarchiesi@0
|
15 'defaults' => array('operator' => '=', 'value' => '', 'case' => FALSE),
|
danielebarchiesi@0
|
16 );
|
danielebarchiesi@0
|
17
|
danielebarchiesi@0
|
18 /**
|
danielebarchiesi@0
|
19 * Settings form
|
danielebarchiesi@0
|
20 */
|
danielebarchiesi@0
|
21 function ctools_string_equal_ctools_access_settings($form, &$form_state, $conf) {
|
danielebarchiesi@0
|
22 $form['settings']['operator'] = array(
|
danielebarchiesi@0
|
23 '#type' => 'radios',
|
danielebarchiesi@0
|
24 '#title' => t('Operator'),
|
danielebarchiesi@0
|
25 '#options' => array(
|
danielebarchiesi@0
|
26 '=' => t('Equal'),
|
danielebarchiesi@0
|
27 '!=' => t('Not equal'),
|
danielebarchiesi@0
|
28 'regex' => t('Regular expression'),
|
danielebarchiesi@0
|
29 '!regex' => t('Not equal to regular expression'),
|
danielebarchiesi@0
|
30 ),
|
danielebarchiesi@0
|
31 '#default_value' => $conf['operator'],
|
danielebarchiesi@0
|
32 '#description' => t('If using a regular expression, you should enclose the pattern in slashes like so: <em>/foo/</em>. If you need to compare against slashes you can use another character to enclose the pattern, such as @. See <a href="http://www.php.net/manual/en/reference.pcre.pattern.syntax.php">PHP regex documentation</a> for more.'),
|
danielebarchiesi@0
|
33 );
|
danielebarchiesi@0
|
34
|
danielebarchiesi@0
|
35 $form['settings']['value'] = array(
|
danielebarchiesi@0
|
36 '#type' => 'textfield',
|
danielebarchiesi@0
|
37 '#title' => t('String'),
|
danielebarchiesi@0
|
38 '#default_value' => $conf['value'],
|
danielebarchiesi@0
|
39 );
|
danielebarchiesi@0
|
40
|
danielebarchiesi@0
|
41 $form['settings']['case'] = array(
|
danielebarchiesi@0
|
42 '#type' => 'checkbox',
|
danielebarchiesi@0
|
43 '#title' => t('Case sensitive'),
|
danielebarchiesi@0
|
44 '#default_value' => $conf['case'],
|
danielebarchiesi@0
|
45 );
|
danielebarchiesi@0
|
46 return $form;
|
danielebarchiesi@0
|
47 }
|
danielebarchiesi@0
|
48
|
danielebarchiesi@0
|
49 /**
|
danielebarchiesi@0
|
50 * Check for access
|
danielebarchiesi@0
|
51 */
|
danielebarchiesi@0
|
52 function ctools_string_equal_ctools_access_check($conf, $context) {
|
danielebarchiesi@0
|
53 if (empty($context) || empty($context->data)) {
|
danielebarchiesi@0
|
54 $string = '';
|
danielebarchiesi@0
|
55 }
|
danielebarchiesi@0
|
56 else {
|
danielebarchiesi@0
|
57 $string = $context->data;
|
danielebarchiesi@0
|
58 }
|
danielebarchiesi@0
|
59
|
danielebarchiesi@0
|
60 $value = $conf['value'];
|
danielebarchiesi@0
|
61 if (empty($conf['case'])) {
|
danielebarchiesi@0
|
62 $string = drupal_strtolower($string);
|
danielebarchiesi@0
|
63 $value = drupal_strtolower($value);
|
danielebarchiesi@0
|
64 }
|
danielebarchiesi@0
|
65
|
danielebarchiesi@0
|
66 switch ($conf['operator']) {
|
danielebarchiesi@0
|
67 case '=':
|
danielebarchiesi@0
|
68 return $string === $value;
|
danielebarchiesi@0
|
69 case '!=':
|
danielebarchiesi@0
|
70 return $string !== $value;
|
danielebarchiesi@0
|
71 case 'regex':
|
danielebarchiesi@0
|
72 return preg_match($value, $string);
|
danielebarchiesi@0
|
73 case '!regex':
|
danielebarchiesi@0
|
74 return !preg_match($value, $string);
|
danielebarchiesi@0
|
75 }
|
danielebarchiesi@0
|
76 }
|
danielebarchiesi@0
|
77
|
danielebarchiesi@0
|
78 /**
|
danielebarchiesi@0
|
79 * Provide a summary description based upon the specified context
|
danielebarchiesi@0
|
80 */
|
danielebarchiesi@0
|
81 function ctools_string_equal_ctools_access_summary($conf, $context) {
|
danielebarchiesi@0
|
82 $values = array('@identifier' => $context->identifier, '@value' => $conf['value']);
|
danielebarchiesi@0
|
83 switch ($conf['operator']) {
|
danielebarchiesi@0
|
84 case '=':
|
danielebarchiesi@0
|
85 return t('@identifier is "@value"', $values);
|
danielebarchiesi@0
|
86 case '!=':
|
danielebarchiesi@0
|
87 return t('@identifier is not "@value"', $values);
|
danielebarchiesi@0
|
88 case 'regex':
|
danielebarchiesi@0
|
89 return t('@identifier matches "@value"', $values);
|
danielebarchiesi@0
|
90 case '!regex':
|
danielebarchiesi@0
|
91 return t('@identifier does not match "@value"', $values);
|
danielebarchiesi@0
|
92 }
|
danielebarchiesi@0
|
93 }
|
danielebarchiesi@0
|
94
|