/[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.4 - (show annotations) (download) (as text)
Sat Dec 6 22:29:28 2008 UTC (11 months, 2 weeks ago) by timmillwood
Branch: MAIN
Changes since 1.3: +89 -20 lines
File MIME type: text/x-php
Added 'Authored by' override, content type specific permissions and INSTALL.txt file.
1 <?php
2 // $Id: override_node_options.module,v 1.3 2008/11/02 15:42:00 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 if(module_exists(node)){
87 $form['publishing_options'] = array(
88 '#type' => 'fieldset',
89 '#title' => t('Publishing options'),
90 '#description' => t('Options for the Publishing options fieldset on the node form.'),
91 );
92
93 $form['publishing_options']['override_node_options_pocollapsible'] = array(
94 '#type' => 'checkbox',
95 '#title' => t('Publishing options collapsible'),
96 '#default_value' => variable_get('override_node_options_pocollapsible', 1),
97 );
98 $form['publishing_options']['override_node_options_pocollapsed'] = array(
99 '#type' => 'checkbox',
100 '#title' => t('Publishing options collapsed by default'),
101 '#default_value' => variable_get('override_node_options_pocollapsed', 1),
102 );
103 }
104
105 return system_settings_form($form);
106
107 }
108
109 /**
110 * Implementation of hook_form_alter().
111 */
112 function override_node_options_form_alter(&$form, $form_state, $form_id) {
113 if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id && !user_access('administer nodes')) {
114 $node = $form['#node'];
115 $form['options'] = array(
116 '#type' => 'fieldset',
117 '#title' => t('Publishing options'),
118 '#collapsible' => variable_get('override_node_options_collapsible', 1),
119 '#collapsed' => variable_get('override_node_options_collapsed', 1), '#weight' => 25);
120
121 if(user_access('override ' . $form['type']['#value'] . ' published option')){
122 $form['options']['override_publishing_status'] = array(
123 '#type' => 'checkbox',
124 '#title' => t('Published'),
125 '#default_value' => $node->status);
126 }
127
128 if(user_access('override ' . $form['type']['#value'] . ' promote to front page option')){
129 $form['options']['override_publishing_promote'] = array(
130 '#type' => 'checkbox',
131 '#title' => t('Promoted to front page'),
132 '#default_value' => $node->promote);
133 }
134
135 if(user_access('override ' . $form['type']['#value'] . ' sticky option')){
136 $form['options']['override_publishing_sticky'] = array(
137 '#type' => 'checkbox', '#title' => t('Sticky at top of lists'),
138 '#default_value' => $node->sticky);
139 }
140
141 if(user_access('override ' . $form['type']['#value'] . ' revision option')){
142 $form['options']['override_publishing_revision'] = array(
143 '#type' => 'checkbox',
144 '#title' => t('Create new revision'),
145 '#default_value' => $node->revision);
146 }
147
148 $form['author'] = array(
149 '#type' => 'fieldset',
150 '#title' => t('Authoring information'),
151 '#collapsible' => variable_get('override_node_options_collapsible', 1),
152 '#collapsed' => variable_get('override_node_options_collapsed', 1), '#weight' => 20);
153
154 if(user_access('override ' . $form['type']['#value'] . ' authored by option')){
155 $form['author']['override_authored_by'] = array(
156 '#type' => 'textfield',
157 '#title' => t('Authored by'),
158 '#maxlength' => 60,
159 '#default_value' => $node->name ? $node->name : '',
160 '#weight' => -1,
161 '#description' => t('Leave blank for %anonymous.', array('%anonymous' => variable_get('anonymous', t('Anonymous')))),
162 );
163
164 // User must have permission 'access user profiles' for autocomplete
165 if (user_access('access user profiles')) {
166 $form['author']['override_authored_by']['#autocomplete_path'] = 'user/autocomplete';
167 }
168
169 }
170
171 if(user_access('override ' . $form['type']['#value'] . ' authored on option')){
172 $form['author']['override_authored_on'] = array(
173 '#type' => 'textfield',
174 '#title' => t('Authored on'),
175 '#maxlength' => 25,
176 '#default_value' => $node->date,
177 '#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'))),
178 );
179
180 }
181 }
182
183 if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
184 if(module_exists(node)){
185 $form['options']['#collapsible'] = variable_get('override_node_options_pocollapsible', 1);
186 $form['options']['#collapsed'] = variable_get('override_node_options_pocollapsed', 1);
187 }
188 if(module_exists(upload)){
189 $form['attachments']['#collapsible'] = variable_get('override_node_options_facollapsible', 1);
190 $form['attachments']['#collapsed'] = variable_get('override_node_options_facollapsed', 1);
191 }
192 if(module_exists(scheduler)){
193 $form['scheduler_settings']['#collapsible'] = variable_get('override_node_options_sscollapsible', 1);
194 $form['scheduler_settings']['#collapsed'] = variable_get('override_node_options_sscollapsed', 1);
195 }
196 }
197 }
198
199
200 /**
201 * Implementation of hook_nodeapi().
202 */
203 function override_node_options_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
204 switch ($op) {
205 case 'presave':
206 // Allow users with 'override node publishing options' to change node
207 // options.
208 // TODO: Once in core, remove adminster nodes check.
209 if (!user_access('administer nodes')) {
210 $keys = array(
211 'override_publishing_status' => 'status',
212 'override_publishing_promote' => 'promote',
213 'override_publishing_sticky' => 'sticky',
214 'override_publishing_revision' => 'revision'
215 );
216 foreach ($keys as $override_key => $real_key) {
217 if (isset($node->$override_key)) {
218 $node->$real_key = $node->$override_key;
219 }
220 }
221 if(user_access('override authored on option')){
222 // Node creation date override
223 if ($node->date !== $node->override_authored_on || !empty($node->override_authored_on)) {
224 $node->created = !empty($node->override_authored_on) ? strtotime($node->override_authored_on) : time();
225 }
226 }
227 if ($node->name !== $node->override_authored_by) {
228 if (!empty($node->override_authored_by)) {
229 $account = user_load(array('name' => $node->override_authored_by));
230 $node->uid = $account->uid;
231 }
232 else {
233 $node->uid = 0;
234 }
235 }
236
237
238
239 }
240 break;
241 }
242 }

  ViewVC Help
Powered by ViewVC 1.1.2