/[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.6 - (show annotations) (download) (as text)
Fri Apr 3 20:38:20 2009 UTC (7 months, 3 weeks ago) by timmillwood
Branch: MAIN
CVS Tags: DRUPAL-6--1-5
Changes since 1.5: +33 -14 lines
File MIME type: text/x-php
#346748 #404996 #403630
1 <?php
2 // $Id: override_node_options.module,v 1.5 2008/12/08 22:01:40 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_result($results)) {
17 $perms[] = 'override ' . $value . ' published option';
18 $perms[] = 'override ' . $value . ' promote to front page option';
19 $perms[] = 'override ' . $value . ' sticky option';
20 $perms[] = 'override ' . $value . ' revision option';
21 $perms[] = 'override ' . $value . ' authored on option';
22 $perms[] = 'override ' . $value . ' 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(node)){
88 $form['authoring_information'] = array(
89 '#type' => 'fieldset',
90 '#title' => t('Authoring information'),
91 '#description' => t('Options for the Authoring information fieldset on the node form.'),
92 );
93
94 $form['authoring_information']['override_node_options_aicollapsible'] = array(
95 '#type' => 'checkbox',
96 '#title' => t('Authoring information collapsible'),
97 '#default_value' => variable_get('override_node_options_aicollapsible', 1),
98 );
99 $form['authoring_information']['override_node_options_aicollapsed'] = array(
100 '#type' => 'checkbox',
101 '#title' => t('Authoring information collapsed by default'),
102 '#default_value' => variable_get('override_node_options_aicollapsed', 1),
103 );
104 }
105
106 if(module_exists(node)){
107 $form['publishing_options'] = array(
108 '#type' => 'fieldset',
109 '#title' => t('Publishing options'),
110 '#description' => t('Options for the Publishing options fieldset on the node form.'),
111 );
112
113 $form['publishing_options']['override_node_options_pocollapsible'] = array(
114 '#type' => 'checkbox',
115 '#title' => t('Publishing options collapsible'),
116 '#default_value' => variable_get('override_node_options_pocollapsible', 1),
117 );
118 $form['publishing_options']['override_node_options_pocollapsed'] = array(
119 '#type' => 'checkbox',
120 '#title' => t('Publishing options collapsed by default'),
121 '#default_value' => variable_get('override_node_options_pocollapsed', 1),
122 );
123 }
124
125 return system_settings_form($form);
126
127 }
128
129 /**
130 * Implementation of hook_form_alter().
131 */
132 function override_node_options_form_alter(&$form, $form_state, $form_id) {
133 if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id && !user_access('administer nodes')) {
134 $node = $form['#node'];
135
136 /* make sure the preview shows the correct values */
137 if($node->op == 'Preview') {
138 _override_node_options_apply_keys($node);
139 }
140
141 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')){
142
143 $form['options'] = array(
144 '#type' => 'fieldset',
145 '#title' => t('Publishing options'),
146 '#collapsible' => variable_get('override_node_options_collapsible', 1),
147 '#collapsed' => variable_get('override_node_options_collapsed', 1), '#weight' => 25);
148 }
149 if(user_access('override ' . $form['type']['#value'] . ' published option')){
150 $form['options']['override_publishing_status'] = array(
151 '#type' => 'checkbox',
152 '#title' => t('Published'),
153 '#default_value' => $node->status);
154 }
155
156 if(user_access('override ' . $form['type']['#value'] . ' promote to front page option')){
157 $form['options']['override_publishing_promote'] = array(
158 '#type' => 'checkbox',
159 '#title' => t('Promoted to front page'),
160 '#default_value' => $node->promote);
161 }
162
163 if(user_access('override ' . $form['type']['#value'] . ' sticky option')){
164 $form['options']['override_publishing_sticky'] = array(
165 '#type' => 'checkbox', '#title' => t('Sticky at top of lists'),
166 '#default_value' => $node->sticky);
167 }
168
169 if(user_access('override ' . $form['type']['#value'] . ' revision option')){
170 $form['options']['override_publishing_revision'] = array(
171 '#type' => 'checkbox',
172 '#title' => t('Create new revision'),
173 '#default_value' => $node->revision);
174 }
175 if(user_access('override ' . $form['type']['#value'] . ' authored by option') || user_access('override ' . $form['type']['#value'] . ' authored on option')){
176 $form['author'] = array(
177 '#type' => 'fieldset',
178 '#title' => t('Authoring information'),
179 '#collapsible' => variable_get('override_node_options_collapsible', 1),
180 '#collapsed' => variable_get('override_node_options_collapsed', 1), '#weight' => 20);
181 }
182 if(user_access('override ' . $form['type']['#value'] . ' authored by option')){
183 $form['author']['override_authored_by'] = array(
184 '#type' => 'textfield',
185 '#title' => t('Authored by'),
186 '#maxlength' => 60,
187 '#default_value' => $node->name ? $node->name : '',
188 '#weight' => -1,
189 '#description' => t('Leave blank for %anonymous.', array('%anonymous' => variable_get('anonymous', t('Anonymous')))),
190 );
191
192 // User must have permission 'access user profiles' for autocomplete
193 if (user_access('access user profiles')) {
194 $form['author']['override_authored_by']['#autocomplete_path'] = 'user/autocomplete';
195 }
196
197 }
198
199 if(user_access('override ' . $form['type']['#value'] . ' authored on option')){
200 $form['author']['override_authored_on'] = array(
201 '#type' => 'textfield',
202 '#title' => t('Authored on'),
203 '#maxlength' => 25,
204 '#default_value' => $node->date,
205 '#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'))),
206 );
207
208 }
209 }
210
211 if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
212 if(module_exists(node)){
213 $form['options']['#collapsible'] = variable_get('override_node_options_pocollapsible', 1);
214 $form['options']['#collapsed'] = variable_get('override_node_options_pocollapsed', 1);
215 }
216 if(module_exists(node)){
217 $form['options']['#collapsible'] = variable_get('override_node_options_aicollapsible', 1);
218 $form['options']['#collapsed'] = variable_get('override_node_options_aicollapsed', 1);
219 }
220 if(module_exists(upload)){
221 $form['attachments']['#collapsible'] = variable_get('override_node_options_facollapsible', 1);
222 $form['attachments']['#collapsed'] = variable_get('override_node_options_facollapsed', 1);
223 }
224 if(module_exists(scheduler)){
225 $form['scheduler_settings']['#collapsible'] = variable_get('override_node_options_sscollapsible', 1);
226 $form['scheduler_settings']['#collapsed'] = variable_get('override_node_options_sscollapsed', 1);
227 }
228 }
229 }
230
231
232 function _override_node_options_apply_keys(&$node){
233
234 $keys = array(
235 'override_publishing_status' => 'status',
236 'override_publishing_promote' => 'promote',
237 'override_publishing_sticky' => 'sticky',
238 'override_publishing_revision' => 'revision'
239 );
240 foreach ($keys as $override_key => $real_key) {
241 if (isset($node->$override_key)) {
242 $node->$real_key = $node->$override_key;
243 }
244 else {
245 $options = variable_get('node_options_' . $node->type, NULL);
246 foreach($options as $default){
247 $node->$default = TRUE;
248 }
249 }
250 }
251
252 }
253
254 /**
255 * Implementation of hook_nodeapi().
256 */
257 function override_node_options_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
258 switch ($op) {
259 case 'presave':
260 // Allow users with 'override node publishing options' to change node
261 // options.
262 // TODO: Once in core, remove adminster nodes check.
263 if (!user_access('administer nodes')) {
264
265 _override_node_options_apply_keys($node);
266
267 if(user_access('override authored on option')){
268 // Node creation date override
269 if ($node->date !== $node->override_authored_on || !empty($node->override_authored_on)) {
270 $node->created = !empty($node->override_authored_on) ? strtotime($node->override_authored_on) : time();
271 }
272 }
273 if (isset($node->override_authored_by) && ($node->name !== $node->override_authored_by)) {
274 if (!empty($node->override_authored_by)) {
275 $account = user_load(array('name' => $node->override_authored_by));
276 $node->uid = $account->uid;
277 }
278 else {
279 $node->uid = 0;
280 }
281 }
282
283
284
285 }
286 break;
287 }
288 }

  ViewVC Help
Powered by ViewVC 1.1.2