danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * Plugin to provide access control based on user rulesetission strings.
|
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' => '',
|
danielebarchiesi@0
|
14 'description' => '',
|
danielebarchiesi@0
|
15 'callback' => 'ctools_ruleset_ctools_access_check',
|
danielebarchiesi@0
|
16 'settings form' => 'ctools_ruleset_ctools_access_settings',
|
danielebarchiesi@0
|
17 'summary' => 'ctools_ruleset_ctools_access_summary',
|
danielebarchiesi@0
|
18
|
danielebarchiesi@0
|
19 // This access plugin actually just contains child plugins that are
|
danielebarchiesi@0
|
20 // exportable, UI configured rulesets.
|
danielebarchiesi@0
|
21 'get child' => 'ctools_ruleset_ctools_access_get_child',
|
danielebarchiesi@0
|
22 'get children' => 'ctools_ruleset_ctools_access_get_children',
|
danielebarchiesi@0
|
23 );
|
danielebarchiesi@0
|
24
|
danielebarchiesi@0
|
25 /**
|
danielebarchiesi@0
|
26 * Merge the main access plugin with a loaded ruleset to form a child plugin.
|
danielebarchiesi@0
|
27 */
|
danielebarchiesi@0
|
28 function ctools_ruleset_ctools_access_merge_plugin($plugin, $parent, $item) {
|
danielebarchiesi@0
|
29 $plugin['name'] = $parent . ':' . $item->name;
|
danielebarchiesi@0
|
30 $plugin['title'] = check_plain($item->admin_title);
|
danielebarchiesi@0
|
31 $plugin['description'] = check_plain($item->admin_description);
|
danielebarchiesi@0
|
32
|
danielebarchiesi@0
|
33 // TODO: Generalize this in CTools.
|
danielebarchiesi@0
|
34 if (!empty($item->requiredcontexts)) {
|
danielebarchiesi@0
|
35 $plugin['required context'] = array();
|
danielebarchiesi@0
|
36 foreach ($item->requiredcontexts as $context) {
|
danielebarchiesi@0
|
37 $info = ctools_get_context($context['name']);
|
danielebarchiesi@0
|
38 // TODO: allow an optional setting
|
danielebarchiesi@0
|
39 $plugin['required context'][] = new ctools_context_required($context['identifier'], $info['context name']);
|
danielebarchiesi@0
|
40 }
|
danielebarchiesi@0
|
41 }
|
danielebarchiesi@0
|
42
|
danielebarchiesi@0
|
43 // Store the loaded ruleset in the plugin.
|
danielebarchiesi@0
|
44 $plugin['ruleset'] = $item;
|
danielebarchiesi@0
|
45 return $plugin;
|
danielebarchiesi@0
|
46 }
|
danielebarchiesi@0
|
47
|
danielebarchiesi@0
|
48 /**
|
danielebarchiesi@0
|
49 * Get a single child access plugin.
|
danielebarchiesi@0
|
50 */
|
danielebarchiesi@0
|
51 function ctools_ruleset_ctools_access_get_child($plugin, $parent, $child) {
|
danielebarchiesi@0
|
52 ctools_include('export');
|
danielebarchiesi@0
|
53 $item = ctools_export_crud_load('ctools_access_ruleset', $child);
|
danielebarchiesi@0
|
54 if ($item) {
|
danielebarchiesi@0
|
55 return ctools_ruleset_ctools_access_merge_plugin($plugin, $parent, $item);
|
danielebarchiesi@0
|
56 }
|
danielebarchiesi@0
|
57 }
|
danielebarchiesi@0
|
58
|
danielebarchiesi@0
|
59 /**
|
danielebarchiesi@0
|
60 * Get all child access plugins.
|
danielebarchiesi@0
|
61 */
|
danielebarchiesi@0
|
62 function ctools_ruleset_ctools_access_get_children($plugin, $parent) {
|
danielebarchiesi@0
|
63 $plugins = array();
|
danielebarchiesi@0
|
64 ctools_include('export');
|
danielebarchiesi@0
|
65 $items = ctools_export_crud_load_all('ctools_access_ruleset');
|
danielebarchiesi@0
|
66 foreach ($items as $name => $item) {
|
danielebarchiesi@0
|
67 $child = ctools_ruleset_ctools_access_merge_plugin($plugin, $parent, $item);
|
danielebarchiesi@0
|
68 $plugins[$child['name']] = $child;
|
danielebarchiesi@0
|
69 }
|
danielebarchiesi@0
|
70
|
danielebarchiesi@0
|
71 return $plugins;
|
danielebarchiesi@0
|
72 }
|
danielebarchiesi@0
|
73
|
danielebarchiesi@0
|
74 /**
|
danielebarchiesi@0
|
75 * Settings form for the 'by ruleset' access plugin
|
danielebarchiesi@0
|
76 */
|
danielebarchiesi@0
|
77 function ctools_ruleset_ctools_access_settings(&$form, &$form_state, $conf) {
|
danielebarchiesi@0
|
78 if (!empty($form_state['plugin']['ruleset']->admin_description)) {
|
danielebarchiesi@0
|
79 $form['markup'] = array(
|
danielebarchiesi@0
|
80 '#markup' => '<div class="description">' . check_plain($form_state['plugin']['ruleset']->admin_description) . '</div>',
|
danielebarchiesi@0
|
81 );
|
danielebarchiesi@0
|
82 }
|
danielebarchiesi@0
|
83
|
danielebarchiesi@0
|
84 return $form;
|
danielebarchiesi@0
|
85 }
|
danielebarchiesi@0
|
86
|
danielebarchiesi@0
|
87 /**
|
danielebarchiesi@0
|
88 * Check for access.
|
danielebarchiesi@0
|
89 */
|
danielebarchiesi@0
|
90 function ctools_ruleset_ctools_access_check($conf, $context, $plugin) {
|
danielebarchiesi@0
|
91 // Load up any contexts we might be using.
|
danielebarchiesi@0
|
92 $contexts = ctools_context_match_required_contexts($plugin['ruleset']->requiredcontexts, $context);
|
danielebarchiesi@0
|
93 $contexts = ctools_context_load_contexts($plugin['ruleset'], FALSE, $contexts);
|
danielebarchiesi@0
|
94
|
danielebarchiesi@0
|
95 return ctools_access($plugin['ruleset']->access, $contexts);
|
danielebarchiesi@0
|
96 }
|
danielebarchiesi@0
|
97
|
danielebarchiesi@0
|
98 /**
|
danielebarchiesi@0
|
99 * Provide a summary description based upon the checked roles.
|
danielebarchiesi@0
|
100 */
|
danielebarchiesi@0
|
101 function ctools_ruleset_ctools_access_summary($conf, $context, $plugin) {
|
danielebarchiesi@0
|
102 if (!empty($plugin['ruleset']->admin_description)) {
|
danielebarchiesi@0
|
103 return check_plain($plugin['ruleset']->admin_description);
|
danielebarchiesi@0
|
104 }
|
danielebarchiesi@0
|
105 else {
|
danielebarchiesi@0
|
106 return check_plain($plugin['ruleset']->admin_title);
|
danielebarchiesi@0
|
107 }
|
danielebarchiesi@0
|
108 }
|
danielebarchiesi@0
|
109
|