/[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 - (hide annotations) (download) (as text)
Sat Dec 6 22:29:28 2008 UTC (11 months, 3 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 robroy 1.1 <?php
2 timmillwood 1.4 // $Id: override_node_options.module,v 1.3 2008/11/02 15:42: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     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 robroy 1.1 }
108    
109     /**
110     * Implementation of hook_form_alter().
111     */
112 timmillwood 1.3 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 robroy 1.1 $node = $form['#node'];
115 timmillwood 1.4 $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 timmillwood 1.3 }
127 timmillwood 1.4
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 timmillwood 1.3 }
134 timmillwood 1.4
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 timmillwood 1.3 }
140 timmillwood 1.4
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 timmillwood 1.3 }
147 timmillwood 1.4
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 timmillwood 1.3 '#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 robroy 1.1 }
197     }
198    
199 timmillwood 1.3
200 robroy 1.1 /**
201     * Implementation of hook_nodeapi().
202     */
203     function override_node_options_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
204     switch ($op) {
205 timmillwood 1.3 case 'presave':
206 robroy 1.1 // Allow users with 'override node publishing options' to change node
207     // options.
208     // TODO: Once in core, remove adminster nodes check.
209 timmillwood 1.3 if (!user_access('administer nodes')) {
210 robroy 1.1 $keys = array(
211     'override_publishing_status' => 'status',
212     'override_publishing_promote' => 'promote',
213     'override_publishing_sticky' => 'sticky',
214 timmillwood 1.4 'override_publishing_revision' => 'revision'
215 robroy 1.1 );
216     foreach ($keys as $override_key => $real_key) {
217     if (isset($node->$override_key)) {
218     $node->$real_key = $node->$override_key;
219     }
220     }
221 timmillwood 1.4 if(user_access('override authored on option')){
222 timmillwood 1.3 // 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 timmillwood 1.4 }
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 timmillwood 1.3
239 robroy 1.1 }
240     break;
241     }
242     }

  ViewVC Help
Powered by ViewVC 1.1.2