/[drupal]/contributions/modules/override_node_options/override_node_options.module
ViewVC logotype

Contents of /contributions/modules/override_node_options/override_node_options.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.5.2.3 - (show annotations) (download) (as text)
Sun Jan 11 13:38:13 2009 UTC (10 months, 2 weeks ago) by timmillwood
Branch: DRUPAL-6--1
CVS Tags: DRUPAL-6--1-4
Changes since 1.5.2.2: +9 -9 lines
File MIME type: text/x-php
Bug fixes
1 <?php
2 // $Id: override_node_options.module,v 1.5.2.2 2008/12/20 15:33:50 timmillwood Exp $
3
4 /**
5 * @file
6 * Allow users to override the default publishing options for nodes they can
7 * edit without giving them the 'administer nodes' permission.
8 */
9
10 /**
11 * Implementation of hook_perm().
12 */
13 function override_node_options_perm() {
14 $results = db_query("SELECT type FROM {node_type}");
15
16 while ($value = db_fetch_array($results)) {
17 $perms[] = 'override ' . $value['type'] . ' published option';
18 $perms[] = 'override ' . $value['type'] . ' promote to front page option';
19 $perms[] = 'override ' . $value['type'] . ' sticky option';
20 $perms[] = 'override ' . $value['type'] . ' revision option';
21 $perms[] = 'override ' . $value['type'] . ' authored on option';
22 $perms[] = 'override ' . $value['type'] . ' authored by option';
23 }
24 return $perms;
25 }
26
27 /**
28 * Implementation of hook_menu().
29 * This setups up the administration menu link.
30 */
31 function override_node_options_menu() {
32 $items = array();
33 $items['admin/settings/override_node_options'] = array(
34 'title' => t('Override node options'),
35 'description' => t('Allow non-admins to override the default publishing options for nodes they can edit'),
36 'page callback' => 'drupal_get_form',
37 'page arguments' => array('override_node_options_admin_settings'),
38 'access arguments' => array('access administration pages'),
39 'type' => MENU_NORMAL_ITEM,
40 );
41 return $items;
42 }
43
44
45 /**
46 * Implementation of hook_admin_settings().
47 * These settings are to control the collapsed and collapsible settings.
48 */
49 function override_node_options_admin_settings() {
50 if(module_exists(upload)){
51 $form['attachments'] = array(
52 '#type' => 'fieldset',
53 '#title' => t('File attachments'),
54 '#description' => t('Options for the File attachments fieldset on the node form.'),
55 );
56
57 $form['attachments']['override_node_options_facollapsible'] = array(
58 '#type' => 'checkbox',
59 '#title' => t('File attachments collapsible'),
60 '#default_value' => variable_get('override_node_options_facollapsible', 1),
61 );
62 $form['attachments']['override_node_options_facollapsed'] = array(
63 '#type' => 'checkbox',
64 '#title' => t('File attachments collapsed by default'),
65 '#default_value' => variable_get('override_node_options_facollapsed', 1),
66 );
67 }
68 if(module_exists(scheduler)){
69 $form['scheduler_settings'] = array(
70 '#type' => 'fieldset',
71 '#title' => t('Scheduler settings'),
72 '#description' => t('Options for the Scheduler settings fieldset on the node form.'),
73 );
74
75 $form['scheduler_settings']['override_node_options_sscollapsible'] = array(
76 '#type' => 'checkbox',
77 '#title' => t('Scheduler settings collapsible'),
78 '#default_value' => variable_get('override_node_options_sscollapsible', 1),
79 );
80 $form['scheduler_settings']['override_node_options_sscollapsed'] = array(
81 '#type' => 'checkbox',
82 '#title' => t('Scheduler settings collapsed by default'),
83 '#default_value' => variable_get('override_node_options_sscollapsed', 1),
84 );
85 }
86
87 if(module_exists(comment)){
88 $form['comment_settings'] = array(
89 '#type' => 'fieldset',
90 '#title' => t('Comment settings'),
91 '#description' => t('Options for the Comment settings fieldset on the node form.'),
92 );
93
94 $form['comment_settings']['override_node_options_cscollapsible'] = array(
95 '#type' => 'checkbox',
96 '#title' => t('Comment settings collapsible'),
97 '#default_value' => variable_get('override_node_options_cscollapsible', 1),
98 );
99 $form['comment_settings']['override_node_options_cscollapsed'] = array(
100 '#type' => 'checkbox',
101 '#title' => t('Comment settings collapsed by default'),
102 '#default_value' => variable_get('override_node_options_cscollapsed', 1),
103 );
104 }
105
106 if(module_exists(node)){
107 $form['authoring_information'] = array(
108 '#type' => 'fieldset',
109 '#title' => t('Authoring information'),
110 '#description' => t('Options for the Authoring information fieldset on the node form.'),
111 );
112
113 $form['authoring_information']['override_node_options_aicollapsible'] = array(
114 '#type' => 'checkbox',
115 '#title' => t('Authoring information collapsible'),
116 '#default_value' => variable_get('override_node_options_aicollapsible', 1),
117 );
118 $form['authoring_information']['override_node_options_aicollapsed'] = array(
119 '#type' => 'checkbox',
120 '#title' => t('Authoring information collapsed by default'),
121 '#default_value' => variable_get('override_node_options_aicollapsed', 1),
122 );
123 }
124
125 if(module_exists(node)){
126 $form['publishing_options'] = array(
127 '#type' => 'fieldset',
128 '#title' => t('Publishing options'),
129 '#description' => t('Options for the Publishing options fieldset on the node form.'),
130 );
131
132 $form['publishing_options']['override_node_options_pocollapsible'] = array(
133 '#type' => 'checkbox',
134 '#title' => t('Publishing options collapsible'),
135 '#default_value' => variable_get('override_node_options_pocollapsible', 1),
136 );
137 $form['publishing_options']['override_node_options_pocollapsed'] = array(
138 '#type' => 'checkbox',
139 '#title' => t('Publishing options collapsed by default'),
140 '#default_value' => variable_get('override_node_options_pocollapsed', 1),
141 );
142 }
143
144 return system_settings_form($form);
145
146 }
147
148 /**
149 * Implementation of hook_form_alter().
150 */
151 function override_node_options_form_alter(&$form, $form_state, $form_id) {
152 if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id && !user_access('administer nodes')) {
153 $node = $form['#node'];
154
155 if(user_access('override ' . $form['type']['#value'] . ' published option') || user_access('override ' . $form['type']['#value'] . ' promote to front page option') || user_access('override ' . $form['type']['#value'] . ' sticky option') || user_access('override ' . $form['type']['#value'] . ' revision option')){
156
157 $form['options'] = array(
158 '#type' => 'fieldset',
159 '#title' => t('Publishing options'),
160 '#collapsible' => variable_get('override_node_options_pocollapsible', 1),
161 '#collapsed' => variable_get('override_node_options_pocollapsed', 1), '#weight' => 25);
162 }
163 if(user_access('override ' . $form['type']['#value'] . ' published option')){
164 $form['options']['override_publishing_status'] = array(
165 '#type' => 'checkbox',
166 '#title' => t('Published'),
167 '#default_value' => $node->status);
168 }
169
170 if(user_access('override ' . $form['type']['#value'] . ' promote to front page option')){
171 $form['options']['override_publishing_promote'] = array(
172 '#type' => 'checkbox',
173 '#title' => t('Promoted to front page'),
174 '#default_value' => $node->promote);
175 }
176
177 if(user_access('override ' . $form['type']['#value'] . ' sticky option')){
178 $form['options']['override_publishing_sticky'] = array(
179 '#type' => 'checkbox', '#title' => t('Sticky at top of lists'),
180 '#default_value' => $node->sticky);
181 }
182
183 if(user_access('override ' . $form['type']['#value'] . ' revision option')){
184 $form['options']['override_publishing_revision'] = array(
185 '#type' => 'checkbox',
186 '#title' => t('Create new revision'),
187 '#default_value' => $node->revision);
188 }
189 if(user_access('override ' . $form['type']['#value'] . ' authored by option') || user_access('override ' . $form['type']['#value'] . ' authored on option')){
190 $form['author'] = array(
191 '#type' => 'fieldset',
192 '#title' => t('Authoring information'),
193 '#collapsible' => variable_get('override_node_options_aicollapsible', 1),
194 '#collapsed' => variable_get('override_node_options_aicollapsed', 1), '#weight' => 20);
195 }
196 if(user_access('override ' . $form['type']['#value'] . ' authored by option')){
197 $form['author']['override_authored_by'] = array(
198 '#type' => 'textfield',
199 '#title' => t('Authored by'),
200 '#maxlength' => 60,
201 '#default_value' => $node->name ? $node->name : '',
202 '#weight' => -1,
203 '#description' => t('Leave blank for %anonymous.', array('%anonymous' => variable_get('anonymous', t('Anonymous')))),
204 );
205
206 // User must have permission 'access user profiles' for autocomplete
207 if (user_access('access user profiles')) {
208 $form['author']['override_authored_by']['#autocomplete_path'] = 'user/autocomplete';
209 }
210
211 }
212
213 if(user_access('override ' . $form['type']['#value'] . ' authored on option')){
214 $form['author']['override_authored_on'] = array(
215 '#type' => 'textfield',
216 '#title' => t('Authored on'),
217 '#maxlength' => 25,
218 '#default_value' => $node->date,
219 '#description' => t('Format: %time. Leave blank to use the time of form submission.', array('%time' => !empty($node->date) ? $node->date : format_date($node->created, 'custom', 'Y-m-d H:i:s O'))),
220 );
221
222 }
223 }
224
225 if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
226 if(module_exists(comment)){
227 $form['comment_settings']['#collapsible'] = variable_get('override_node_options_cscollapsible', 1);
228 $form['comment_settings']['#collapsed'] = variable_get('override_node_options_cscollapsed', 1);
229 }
230 if(module_exists(node)){
231 $form['options']['#collapsible'] = variable_get('override_node_options_pocollapsible', 1);
232 $form['options']['#collapsed'] = variable_get('override_node_options_pocollapsed', 1);
233 }
234 if(module_exists(node)){
235 $form['author']['#collapsible'] = variable_get('override_node_options_aicollapsible', 1);
236 $form['author']['#collapsed'] = variable_get('override_node_options_aicollapsed', 1);
237 }
238 if(module_exists(upload)){
239 $form['attachments']['#collapsible'] = variable_get('override_node_options_facollapsible', 1);
240 $form['attachments']['#collapsed'] = variable_get('override_node_options_facollapsed', 1);
241 }
242 if(module_exists(scheduler)){
243 $form['scheduler_settings']['#collapsible'] = variable_get('override_node_options_sscollapsible', 1);
244 $form['scheduler_settings']['#collapsed'] = variable_get('override_node_options_sscollapsed', 1);
245 }
246 }
247 }
248
249
250 /**
251 * Implementation of hook_nodeapi().
252 */
253 function override_node_options_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
254 switch ($op) {
255 case 'presave':
256 // Allow users with 'override node publishing options' to change node
257 // options.
258 // TODO: Once in core, remove adminster nodes check.
259 if (!user_access('administer nodes')) {
260 $keys = array(
261 'override_publishing_status' => 'status',
262 'override_publishing_promote' => 'promote',
263 'override_publishing_sticky' => 'sticky',
264 'override_publishing_revision' => 'revision'
265 );
266 foreach ($keys as $override_key => $real_key) {
267 if (isset($node->$override_key)) {
268 $node->$real_key = $node->$override_key;
269 }
270 }
271 if(user_access('override ' . $node->type . ' authored on option')){
272 // Node creation date override
273 if ($node->date !== $node->override_authored_on || !empty($node->override_authored_on)) {
274 $node->created = !empty($node->override_authored_on) ? strtotime($node->override_authored_on) : time();
275 }
276 }
277 if(user_access('override ' . $node->type . ' authored by option')){
278 if ($node->name !== $node->override_authored_by) {
279 if (!empty($node->override_authored_by)) {
280 $account = user_load(array('name' => $node->override_authored_by));
281 $node->uid = $account->uid;
282 }
283 else {
284 $node->uid = 0;
285 }
286 }
287 }
288
289
290 }
291 break;
292 }
293 }

  ViewVC Help
Powered by ViewVC 1.1.2