/[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.2 - (hide annotations) (download) (as text)
Sat Dec 20 15:33:50 2008 UTC (11 months, 1 week ago) by timmillwood
Branch: DRUPAL-6--1
CVS Tags: DRUPAL-6--1-2, DRUPAL-6--1-3
Changes since 1.5.2.1: +4 -3 lines
File MIME type: text/x-php
Bug fixes
1 robroy 1.1 <?php
2 timmillwood 1.5.2.2 // $Id: override_node_options.module,v 1.5.2.1 2008/12/09 17:56:00 timmillwood Exp $
3 robroy 1.1
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 timmillwood 1.4 $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 timmillwood 1.3 }
26    
27 timmillwood 1.4 /**
28     * Implementation of hook_menu().
29     * This setups up the administration menu link.
30     */
31 timmillwood 1.3 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 timmillwood 1.4
45     /**
46     * Implementation of hook_admin_settings().
47     * These settings are to control the collapsed and collapsible settings.
48     */
49 timmillwood 1.3 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 timmillwood 1.5
87 timmillwood 1.5.2.1 if(module_exists(comment)){
88     $form['authoring_information'] = 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 timmillwood 1.5 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 timmillwood 1.3 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 robroy 1.1 }
147    
148     /**
149     * Implementation of hook_form_alter().
150     */
151 timmillwood 1.3 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 robroy 1.1 $node = $form['#node'];
154 timmillwood 1.5
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 timmillwood 1.4 $form['options'] = array(
158     '#type' => 'fieldset',
159     '#title' => t('Publishing options'),
160 timmillwood 1.5.2.1 '#collapsible' => variable_get('override_node_options_pocollapsible', 1),
161     '#collapsed' => variable_get('override_node_options_pocollapsed', 1), '#weight' => 25);
162 timmillwood 1.5 }
163 timmillwood 1.4 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 timmillwood 1.3 }
169 timmillwood 1.4
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 timmillwood 1.3 }
176 timmillwood 1.4
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 timmillwood 1.3 }
182 timmillwood 1.4
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 timmillwood 1.3 }
189 timmillwood 1.5 if(user_access('override ' . $form['type']['#value'] . ' authored by option') || user_access('override ' . $form['type']['#value'] . ' authored on option')){
190 timmillwood 1.4 $form['author'] = array(
191     '#type' => 'fieldset',
192     '#title' => t('Authoring information'),
193 timmillwood 1.5.2.1 '#collapsible' => variable_get('override_node_options_aicollapsible', 1),
194     '#collapsed' => variable_get('override_node_options_aicollapsed', 1), '#weight' => 20);
195 timmillwood 1.5 }
196 timmillwood 1.4 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 timmillwood 1.3 '#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 timmillwood 1.5.2.1 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 timmillwood 1.3 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 timmillwood 1.5 if(module_exists(node)){
235 timmillwood 1.5.2.1 $form['author']['#collapsible'] = variable_get('override_node_options_aicollapsible', 1);
236     $form['author']['#collapsed'] = variable_get('override_node_options_aicollapsed', 1);
237 timmillwood 1.5 }
238 timmillwood 1.3 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 robroy 1.1 }
247     }
248    
249 timmillwood 1.3
250 robroy 1.1 /**
251     * Implementation of hook_nodeapi().
252     */
253     function override_node_options_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
254     switch ($op) {
255 timmillwood 1.3 case 'presave':
256 robroy 1.1 // Allow users with 'override node publishing options' to change node
257     // options.
258     // TODO: Once in core, remove adminster nodes check.
259 timmillwood 1.3 if (!user_access('administer nodes')) {
260 robroy 1.1 $keys = array(
261     'override_publishing_status' => 'status',
262     'override_publishing_promote' => 'promote',
263     'override_publishing_sticky' => 'sticky',
264 timmillwood 1.4 'override_publishing_revision' => 'revision'
265 robroy 1.1 );
266     foreach ($keys as $override_key => $real_key) {
267     if (isset($node->$override_key)) {
268     $node->$real_key = $node->$override_key;
269     }
270     }
271 timmillwood 1.5.2.2 if(user_access('override ' . $node->type . ' authored on option')){
272 timmillwood 1.3 // 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 timmillwood 1.4 }
277 timmillwood 1.5.2.2 if(user_access('override ' . $node->type . ' authored by option')){
278 timmillwood 1.4 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 timmillwood 1.5.2.2 }
288 timmillwood 1.4
289 timmillwood 1.3
290 robroy 1.1 }
291     break;
292     }
293     }

  ViewVC Help
Powered by ViewVC 1.1.2