total control - admin dashboard
[indybay:drupal.git] / docs / sites / all / modules / contrib / total_control / total_control.admin.inc
1 <?php
2
3 /**
4  * @file
5  *
6  * This module enables a page to be used as an administrative dashboard
7  * Also included are several views for site administration.
8  *
9  */
10
11 /**
12  * menu callback for settings page
13  */
14 function total_control_admin_settings() {
15   // Redirect on log in.
16   $form['total_control_login_redirect'] = array(
17     '#type' => 'checkbox',
18     '#title' => t('Redirect administrators to Dashboard after log in'),
19     '#default_value' => variable_get('total_control_login_redirect', 0),
20     '#description' => t('Users with the !permission can be automatically 
21       redirected to the Dashboard when they log in.', array('!permission' => 
22       l(t('Have Total Control permission'), 'admin/user/permissions'))),
23   );
24   
25   $overridden = ' <strong>' . t('Automatic settings override these options.') . '</strong>';
26   $collapse_type = FALSE;
27   $collapse_role = FALSE;
28   $collapse_auto = TRUE;
29   $disable_type_pane = '';
30   $disable_type_page = '';
31   $disable_role_pane = '';
32   $disable_role_page = '';
33   $auto_pane_default = variable_get('total_control_auto_panels', array());
34   $auto_page_default = variable_get('total_control_auto_pages', array());
35   
36   $types = node_type_get_types();
37   $content_types = array();
38   foreach ($types as $machine => $type) {
39     $content_types[$machine] = $type->name;
40   }
41   if (!empty($auto_pane_default) && !($auto_pane_default['type'] === 0)) {
42     $disable_type_pane = TRUE;
43     $collapse_auto = FALSE;
44   }
45   
46   if (!empty($auto_page_default) && !($auto_page_default['type'] === 0)) {
47     $disable_type_page = TRUE;
48     $collapse_auto = FALSE;
49   }
50   if ((!empty($auto_page_default) && !empty($auto_pane_default)) 
51     && !($auto_page_default['type'] === 0) && !($auto_pane_default['type'] === 0)) {
52     $collapse_type = TRUE;
53   }
54   
55   $roles = user_roles(TRUE);
56   $role_options = array();
57   $role_defaults = array(2);
58   foreach ($roles as $rid => $role) {
59     $role_options[$rid] = $role;
60   }
61   if (!empty($auto_pane_default) 
62     && array_key_exists('role', $auto_pane_default) 
63     && !($auto_pane_default['role'] === 0)) {
64     $disable_role_pane = TRUE;
65     $collapse_auto = FALSE;
66   }
67   if (!empty($auto_page_default) 
68     && array_key_exists('role', $auto_page_default) 
69     && !($auto_page_default['role'] === 0)) {
70     $disable_role_page = TURE;
71     $collapse_auto = FALSE;
72   }
73   if (count($roles) == 1 
74     || (array_key_exists('role', $auto_page_default) 
75       && (!($auto_page_default['role'] === 0) 
76       && !($auto_pane_default['role'] === 0)) 
77       && (!empty($auto_page_default) 
78       && !empty($auto_pane_default)) )) {
79     $collapse_role = TRUE;
80   }
81   
82   $auto_options = array(
83     'type' => t('Content Types'), 
84     // TODO 'role' => t('User Roles'),
85   );
86
87   // Content types, pages and panes.
88   $form['types'] = array(
89     '#type' => 'fieldset',
90     '#title' => t('Types of content: pages and panes'),
91     '#collapsible' => TRUE,
92     '#collapsed' => $collapse_type,
93     );
94
95   $text = t('Checking these boxes will create panes on the dashboard for these content types.');
96   $description = ($disable_type_pane) ? $text . $overridden : $text;
97   $form['types']['total_control_type_panels'] = array(
98     '#type' => 'checkboxes',
99     '#title' => t('On the Dashboard'),
100     '#options' => $content_types,
101     '#description' => $description,
102     '#default_value' => variable_get('total_control_type_panels', array()),
103     '#disabled' => $disable_type_pane,
104     );
105
106   $text = t('Checking these boxes will create administration pages for these content types.');
107   $description = ($disable_type_page) ? $text . $overridden : $text;
108   $form['types']['total_control_type_pages'] = array(
109     '#type' => 'checkboxes',
110     '#title' => t('Administration Pages'),
111     '#options' => $content_types,
112     '#description' => $description,
113     '#default_value' => variable_get('total_control_type_pages', array()),
114     '#disabled' => $disable_type_page,
115     );
116   
117   // User roles, pages and panes.
118   $form['users'] = array(
119     '#type' => 'fieldset',
120     '#title' => t('Types of users: pages and panes'),
121     '#collapsible' => TRUE,
122     '#collapsed' => $collapse_role,
123     );  
124   $form['users']['total_control_role_panels'] = array(
125     '#type' => 'checkboxes',
126     '#title' => t('On the Dashboard'),
127     '#options' => $role_options,
128     '#description' => t('Checking these boxes will create panes on the dashboard for these user types.'),
129     '#default_value' => variable_get('total_control_role_panels', $role_defaults),
130     );
131   $form['users']['total_control_role_pages'] = array(
132     '#type' => 'checkboxes',
133     '#title' => t('Administration Pages'),
134     '#options' => $role_options,
135     '#description' => t('Checking these boxes will create administration pages for these user types.'),
136     '#default_value' => variable_get('total_control_role_pages', $role_defaults),
137     );
138     
139   // Automatically add displays.
140   $form['auto'] = array(
141     '#type' => 'fieldset',
142     '#title' => t('Advanced Settings: Automatically add pages and panes'),
143     '#collapsible' => TRUE,
144     '#collapsed' => $collapse_auto,
145     );
146   $form['auto']['total_control_auto_panels'] = array(
147     '#type' => 'checkboxes',
148     '#title' => t('On the Dashboard'),
149     '#options' => $auto_options,
150     '#description' => t('Automatically create panes on the dashboard when new 
151       content types are added.'),
152     '#default_value' => $auto_pane_default,
153     );
154   $form['auto']['total_control_auto_pages'] = array(
155     '#type' => 'checkboxes',
156     '#title' => t('Administration Pages'),
157     '#options' => $auto_options,
158     '#description' => t('Automatically create administration pages when new 
159       content types are added.'),
160     '#default_value' => $auto_page_default,
161     );
162   
163   $form['#submit'][] = 'total_control_admin_settings_submit';
164   
165   return system_settings_form($form);
166 }
167
168 /**
169  * Submit function for settings page
170  */
171 function total_control_admin_settings_submit($form, &$form_state) {
172   if ($form_state['values']['total_control_role_panels'][2] == 0) {
173     // change it back and tell them why
174     $form_state['values']['total_control_role_panels'][2] = 2;
175     drupal_set_message(t('You can not delete the pane view for users.  To 
176       remove it from your dashboard, use the <a href="!panels_interface">Page 
177       Manager</a>.', array('!panels_interface' => url('admin/structure/pages'))));
178   }
179   if ($form_state['values']['total_control_role_pages'][2] == 0) {
180     // change it back and tell them why
181     $form_state['values']['total_control_role_pages'][2] = 2;
182     drupal_set_message(t('You should not delete the page view for all users, 
183       use the <a href="!views_interface">Views user interface</a> to disable
184       it instead.', array('!views_interface' => url('admin/structure/views'))));
185   }
186
187   // Load the views once so we don't have to do it each time.
188   $paneview = views_get_view('control_content_panes');
189   $pageview = views_get_view('control_content');
190
191   // Adjust content pane displays per Total Control settings.
192   foreach ($form_state['values']['total_control_type_panels'] as $machine => $value) {
193     if ($machine === $value) {
194       $type = node_type_load($machine);
195       total_control_add_views_pane_display($paneview, $type->name, $machine);
196     }
197     else {
198       $type = node_type_load($machine);
199       total_control_views_delete_pane_display($machine);
200     }
201   }
202
203   // Adjust page displays per Total Control settings.
204   foreach ($form_state['values']['total_control_type_pages'] as $machine => $value) {
205     if ($machine === $value) {
206       $type = node_type_load($machine);
207       total_control_add_views_page_display($pageview, $type->name, $machine);
208     }
209     else {
210       $type = node_type_load($machine);
211       total_control_views_delete_page_display($machine);
212     }
213   }
214 }