/[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 - (show annotations) (download) (as text)
Mon Dec 8 22:01:40 2008 UTC (11 months, 2 weeks ago) by timmillwood
Branch: MAIN
CVS Tags: DRUPAL-6--1-0
Branch point for: DRUPAL-6--1
Changes since 1.4: +31 -4 lines
File MIME type: text/x-php
Bug fixes
1 <?php
2 // $Id: override_node_options.module,v 1.4 2008/12/06 22:29:28 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 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')){
137
138 $form['options'] = array(
139 '#type' => 'fieldset',
140 '#title' => t('Publishing options'),
141 '#collapsible' => variable_get('override_node_options_collapsible', 1),
142 '#collapsed' => variable_get('override_node_options_collapsed', 1), '#weight' => 25);
143 }
144 if(user_access('override ' . $form['type']['#value'] . ' published option')){
145 $form['options']['override_publishing_status'] = array(
146 '#type' => 'checkbox',
147 '#title' => t('Published'),
148 '#default_value' => $node->status);
149 }
150
151 if(user_access('override ' . $form['type']['#value'] . ' promote to front page option')){
152 $form['options']['override_publishing_promote'] = array(
153 '#type' => 'checkbox',
154 '#title' => t('Promoted to front page'),
155 '#default_value' => $node->promote);
156 }
157
158 if(user_access('override ' . $form['type']['#value'] . ' sticky option')){
159 $form['options']['override_publishing_sticky'] = array(
160 '#type' => 'checkbox', '#title' => t('Sticky at top of lists'),
161 '#default_value' => $node->sticky);
162 }
163
164 if(user_access('override ' . $form['type']['#value'] . ' revision option')){
165 $form['options']['override_publishing_revision'] = array(
166 '#type' => 'checkbox',
167 '#title' => t('Create new revision'),
168 '#default_value' => $node->revision);
169 }
170 if(user_access('override ' . $form['type']['#value'] . ' authored by option') || user_access('override ' . $form['type']['#value'] . ' authored on option')){
171 $form['author'] = array(
172 '#type' => 'fieldset',
173 '#title' => t('Authoring information'),
174 '#collapsible' => variable_get('override_node_options_collapsible', 1),
175 '#collapsed' => variable_get('override_node_options_collapsed', 1), '#weight' => 20);
176 }
177 if(user_access('override ' . $form['type']['#value'] . ' authored by option')){
178 $form['author']['override_authored_by'] = array(
179 '#type' => 'textfield',
180 '#title' => t('Authored by'),
181 '#maxlength' => 60,
182 '#default_value' => $node->name ? $node->name : '',
183 '#weight' => -1,
184 '#description' => t('Leave blank for %anonymous.', array('%anonymous' => variable_get('anonymous', t('Anonymous')))),
185 );
186
187 // User must have permission 'access user profiles' for autocomplete
188 if (user_access('access user profiles')) {
189 $form['author']['override_authored_by']['#autocomplete_path'] = 'user/autocomplete';
190 }
191
192 }
193
194 if(user_access('override ' . $form['type']['#value'] . ' authored on option')){
195 $form['author']['override_authored_on'] = array(
196 '#type' => 'textfield',
197 '#title' => t('Authored on'),
198 '#maxlength' => 25,
199 '#default_value' => $node->date,
200 '#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'))),
201 );
202
203 }
204 }
205
206 if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
207 if(module_exists(node)){
208 $form['options']['#collapsible'] = variable_get('override_node_options_pocollapsible', 1);
209 $form['options']['#collapsed'] = variable_get('override_node_options_pocollapsed', 1);
210 }
211 if(module_exists(node)){
212 $form['options']['#collapsible'] = variable_get('override_node_options_aicollapsible', 1);
213 $form['options']['#collapsed'] = variable_get('override_node_options_aicollapsed', 1);
214 }
215 if(module_exists(upload)){
216 $form['attachments']['#collapsible'] = variable_get('override_node_options_facollapsible', 1);
217 $form['attachments']['#collapsed'] = variable_get('override_node_options_facollapsed', 1);
218 }
219 if(module_exists(scheduler)){
220 $form['scheduler_settings']['#collapsible'] = variable_get('override_node_options_sscollapsible', 1);
221 $form['scheduler_settings']['#collapsed'] = variable_get('override_node_options_sscollapsed', 1);
222 }
223 }
224 }
225
226
227 /**
228 * Implementation of hook_nodeapi().
229 */
230 function override_node_options_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
231 switch ($op) {
232 case 'presave':
233 // Allow users with 'override node publishing options' to change node
234 // options.
235 // TODO: Once in core, remove adminster nodes check.
236 if (!user_access('administer nodes')) {
237 $keys = array(
238 'override_publishing_status' => 'status',
239 'override_publishing_promote' => 'promote',
240 'override_publishing_sticky' => 'sticky',
241 'override_publishing_revision' => 'revision'
242 );
243 foreach ($keys as $override_key => $real_key) {
244 if (isset($node->$override_key)) {
245 $node->$real_key = $node->$override_key;
246 }
247 }
248 if(user_access('override authored on option')){
249 // Node creation date override
250 if ($node->date !== $node->override_authored_on || !empty($node->override_authored_on)) {
251 $node->created = !empty($node->override_authored_on) ? strtotime($node->override_authored_on) : time();
252 }
253 }
254 if ($node->name !== $node->override_authored_by) {
255 if (!empty($node->override_authored_by)) {
256 $account = user_load(array('name' => $node->override_authored_by));
257 $node->uid = $account->uid;
258 }
259 else {
260 $node->uid = 0;
261 }
262 }
263
264
265
266 }
267 break;
268 }
269 }

  ViewVC Help
Powered by ViewVC 1.1.2