print.admin.inc 18.4 KB
Newer Older
jcnventura's avatar
jcnventura committed
1
<?php
jcnventura's avatar
jcnventura committed
2
// $Id$
jcnventura's avatar
jcnventura committed
3

jcnventura's avatar
jcnventura committed
4 5 6 7 8 9
/**
 * @file
 * Contains the administrative functions of the PF module.
 *
 * This file is included by the core PF module, and includes the
 * settings form.
10 11
 *
 * @ingroup print
jcnventura's avatar
jcnventura committed
12
 */
jcnventura's avatar
jcnventura committed
13 14

/**
jcnventura's avatar
jcnventura committed
15 16 17
 * Menu callback for the Printer-friendly pages module settings form.
 *
 * @ingroup forms
jcnventura's avatar
jcnventura committed
18 19
 */
function print_main_settings() {
20 21 22
  $form['settings'] = array(
    '#type' => 'fieldset',
    '#title' => t('Common Settings'),
23 24
  );

25
  $form['settings']['print_css'] = array(
jcnventura's avatar
jcnventura committed
26 27
    '#type' => 'textfield',
    '#title' => t('Stylesheet URL'),
28
    '#default_value' => variable_get('print_css', PRINT_CSS_DEFAULT),
jcnventura's avatar
jcnventura committed
29
    '#size' => 60,
30
    '#maxlength' => 250,
jcnventura's avatar
jcnventura committed
31
    '#description' => t('The URL to your custom print cascading stylesheet, if any. When none is specified, the default module CSS file is used.') . '<br />' .
32 33 34
                      t('Macros: %b (base path: "%base"), %t (path to theme: "%theme")', array('%base' => base_path(), '%theme' => path_to_theme())) . '<br />' .
                      t('Requires the <em>administer site configuration</em> permission.'),
    '#disabled' => !user_access('administer site configuration'),
jcnventura's avatar
jcnventura committed
35 36
  );

37
  $form['settings']['print_urls'] = array(
jcnventura's avatar
jcnventura committed
38 39
    '#type' => 'checkbox',
    '#title' => t('Printer-friendly URLs list'),
40
    '#default_value' => variable_get('print_urls', PRINT_URLS_DEFAULT),
jcnventura's avatar
jcnventura committed
41
    '#description' => t('If set, a list of the destination URLs for the page links will be displayed at the bottom of the page.') . '<br />' .
jcnventura's avatar
jcnventura committed
42
                      t('Note that you can enable/disable the URL list for each content type individually from the !url.', array('!url' => l(t('Content Types page'), 'admin/build/types'))),
jcnventura's avatar
jcnventura committed
43 44
  );

45 46 47 48 49 50 51
  $form['settings']['print_urls_anchors'] = array(
    '#type' => 'checkbox',
    '#title' => t('Include named anchors in printer-friendly URLs list'),
    '#default_value' => variable_get('print_urls_anchors', PRINT_URLS_ANCHORS_DEFAULT),
    '#description' => t('If set, the list of the URLs at the bottom of the page will include anchors links on the same page.'),
  );

52
  $form['settings']['print_comments'] = array(
jcnventura's avatar
jcnventura committed
53 54
    '#type' => 'checkbox',
    '#title' => t('Include comments in printer-friendly version'),
55
    '#default_value' => variable_get('print_comments', PRINT_COMMENTS_DEFAULT),
jcnventura's avatar
jcnventura committed
56 57 58
    '#description' => t('When this option is active, user comments are also included in the printer-friendly version. Requires the comment module.'),
  );

59
  $form['settings']['print_newwindow'] = array(
jcnventura's avatar
jcnventura committed
60
    '#type' => 'radios',
61
    '#title' => t('New window method'),
62 63
    '#options' => array(t('Use HTML target (does not validate as XHTML Strict)'), t('Use Javascript (requires browser support)')),
    '#default_value' => variable_get('print_newwindow', PRINT_NEWWINDOW_DEFAULT),
64
    '#description' => t('Choose the method used to open pages in a new window/tab.'),
jcnventura's avatar
jcnventura committed
65 66
  );

67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
  $form['settings']['logo'] = array(
    '#type' => 'fieldset',
    '#title' => t('Logo options'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );

  $form['settings']['logo']['print_logo_options'] = array(
    '#type' => 'radios',
    '#title' => t('Logo type'),
    '#options' => array(t('None (Disabled)'), t("Current theme's logo"), t('User-specified')),
    '#default_value' => variable_get('print_logo_options', PRINT_LOGO_OPTIONS_DEFAULT),
    '#description' => t("Select the type of logo to display on the printer-friendly version. In case of a user-specified location, insert the path or URL below."),
  );

  $form['settings']['logo']['print_logo_url'] = array(
    '#type' => 'textfield',
    '#title' => t('Logo URL'),
    '#default_value' => variable_get('print_logo_url', PRINT_LOGO_URL_DEFAULT),
    '#size' => 60,
    '#maxlength' => 250,
  );

  $form['settings']['logo']['print_logo_upload'] = array(
    '#type' => 'file',
    '#title' => t('Upload logo'),
    '#size' => 60,
    '#maxlength' => 250,
    '#description' => t("If you don't have direct file access to the server, use this field to upload your logo."),
  );

98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
  $form['settings']['footer'] = array(
    '#type' => 'fieldset',
    '#title' => t('Footer options'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );

  $form['settings']['footer']['print_footer_options'] = array(
    '#type' => 'radios',
    '#title' => t('Footer type'),
    '#options' => array(t('None (Disabled)'), t("Site's footer"), t('User-specified')),
    '#default_value' => variable_get('print_footer_options', PRINT_FOOTER_OPTIONS_DEFAULT),
    '#description' => t("Select the type of footer to display on the printer-friendly version. In case of a user-specified footer, insert it below."),
  );

  $form['settings']['footer']['print_footer_user'] = array(
    '#type' => 'textfield',
    '#title' => t('User-specified'),
    '#default_value' => variable_get('print_footer_user', PRINT_FOOTER_USER_DEFAULT),
    '#size' => 60,
    '#maxlength' => 250,
  );

121
  $form['settings']['print_sourceurl_settings'] = array(
122 123 124 125
    '#type' => 'fieldset',
    '#title' => t('Source URL'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
jcnventura's avatar
jcnventura committed
126 127
  );

128
  $form['settings']['print_sourceurl_settings']['print_sourceurl_enabled'] = array(
jcnventura's avatar
jcnventura committed
129 130
    '#type' => 'checkbox',
    '#title' => t('Display source URL'),
131
    '#default_value' => variable_get('print_sourceurl_enabled', PRINT_SOURCEURL_ENABLED_DEFAULT),
jcnventura's avatar
jcnventura committed
132 133 134
    '#description' => t('When this option is selected, the URL for the original page will be displayed at the bottom of the printer-friendly version.'),
  );

135
  $form['settings']['print_sourceurl_settings']['print_sourceurl_date'] = array(
jcnventura's avatar
jcnventura committed
136 137
    '#type' => 'checkbox',
    '#title' => t('Add current time/date to the source URL'),
138
    '#default_value' => variable_get('print_sourceurl_date', PRINT_SOURCEURL_DATE_DEFAULT),
jcnventura's avatar
jcnventura committed
139 140 141
    '#description' => t('Display the current date and time in the Source URL line.'),
  );

142
  $form['settings']['print_sourceurl_settings']['print_sourceurl_forcenode'] = array(
jcnventura's avatar
jcnventura committed
143 144
    '#type' => 'checkbox',
    '#title' => t('Force use of node ID in source URL'),
145 146
    '#default_value' => variable_get('print_sourceurl_forcenode', PRINT_SOURCEURL_FORCENODE_DEFAULT),
    '#description' => t("Drupal will attempt to use the page's defined alias in case there is one. To force the use of the fixed URL, activate this option."),
jcnventura's avatar
jcnventura committed
147 148
  );

jcnventura's avatar
jcnventura committed
149
  $form['#attributes'] = array('enctype' => 'multipart/form-data');
150 151
  $form['#validate'][] = '_print_main_settings_validate';

jcnventura's avatar
jcnventura committed
152 153 154
  return system_settings_form($form);
}

155 156 157 158
/**
 * Validate print_main_settings form.
 */
function _print_main_settings_validate($form, &$form_state) {
159 160
  global $base_url;

161 162 163
  // Check for a new uploaded logo, and use that instead.
  if ($file = file_save_upload('print_logo_upload', array('file_validate_is_image' => array()))) {
    $parts = pathinfo($file->filename);
jcnventura's avatar
jcnventura committed
164
    $filename = 'print_logo.' . drupal_strtolower($parts['extension']);
165 166 167 168

    // The image was saved using file_save_upload() and was added to the
    // files table as a temporary file. We'll make a copy and let the garbage
    // collector delete the original upload.
jcnventura's avatar
jcnventura committed
169
    if (file_unmanaged_copy($file, $filename, FILE_EXISTS_REPLACE)) {
170 171 172 173
      $form_state['values']['print_logo_options'] = 2;
      $form_state['values']['print_logo_url'] = base_path() . $file->filepath;
    }
  }
174 175 176 177 178 179 180

  // Check that the stylesheet URL is a local URL, if it is an absolute URL, then it must start with the site's base URL
  if (preg_match('!^http://.*!', $form_state['values']['print_css'], $matches)) {
    if (!preg_match("!^$base_url/!", $matches[0])) {
      form_set_error('print_css', t("Stylesheet URL must be a relative path or start with the site's base URL"));
    }
  }
181 182
}

183 184 185 186 187
/**
 * Menu callback for the Printer-friendly pages HTML settings form.
 *
 * @ingroup forms
 */
jcnventura's avatar
jcnventura committed
188
function print_html_settings() {
189 190 191 192
  $form['settings'] = array(
    '#type' => 'fieldset',
    '#title' => t('Web page options'),
  );
jcnventura's avatar
jcnventura committed
193

194
  $form['settings']['print_html_link_pos'] = array(
195 196 197 198 199 200 201
    '#type' => 'checkboxes',
    '#title' => t('Printer-friendly page link'),
    '#default_value' => variable_get('print_html_link_pos', array(PRINT_HTML_LINK_POS_DEFAULT => PRINT_HTML_LINK_POS_DEFAULT)),
    '#options' => array('link' => t('Links area'), 'corner' => t('Content corner')),
    '#description' => t('Choose the location of the link(s) to the printer-friendly page. The Links area is usually below the node content, whereas the Content corner is placed in the upper-right corner of the node content. Unselect all options to disable the link. Even if the link is disabled, you can still view the print version of a node by going to !path/nid where nid is the numeric id of the node.', array('!path' => PRINT_PATH)),
  );

202 203 204 205
  $form['settings']['adv_link'] = array(
    '#type' => 'fieldset',
    '#title' => t('Advanced link options'),
    '#collapsible' => TRUE,
206
    '#collapsed' => FALSE,
207 208 209
  );

  $form['settings']['adv_link']['print_html_show_link'] = array(
jcnventura's avatar
jcnventura committed
210
    '#type' => 'radios',
211
    '#title' => t('Link style'),
212
    '#default_value' => variable_get('print_html_show_link', PRINT_HTML_SHOW_LINK_DEFAULT),
213 214
    '#options' => array(1 => t('Text only'), 2 => t('Icon only'), 3 => t('Icon and Text')),
    '#description' => t('Select the visual style of the link.'),
jcnventura's avatar
jcnventura committed
215 216
  );

217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
  $form['settings']['adv_link']['print_html_link_use_alias'] = array(
    '#type' => 'checkbox',
    '#title' => t('Use URL alias instead of node ID'),
    '#default_value' => variable_get('print_html_link_use_alias', PRINT_HTML_LINK_USE_ALIAS_DEFAULT),
    '#description' => t('Enabling this will create the link using the URL alias instead of the node ID.'),
  );

  $form['settings']['adv_link']['print_html_link_class'] = array(
    '#type' => 'textfield',
    '#title' => t('Link class'),
    '#default_value' => variable_get('print_html_link_class', PRINT_HTML_LINK_CLASS_DEFAULT),
    '#size' => 60,
    '#maxlength' => 250,
    '#description' => t('This can be used by themers to change the link style or by jQuery modules to open in a new window (e.g. greybox or thickbox). Multiple classes can be specified, separated by spaces.'),
  );

233
  $form['settings']['adv_link']['print_html_node_link_visibility'] = array(
234 235
    '#type' => 'radios',
    '#title' => t('Link visibility'),
236
    '#default_value' => variable_get('print_html_node_link_visibility', PRINT_HTML_NODE_LINK_VISIBILITY_DEFAULT),
237 238 239
    '#options' => array(t('Show on every page except the listed pages.'), t('Show on only the listed pages.')),
  );

240
  $form['settings']['adv_link']['print_html_node_link_pages'] = array(
241
    '#type' => 'textarea',
242
    '#default_value' => variable_get('print_html_node_link_pages', PRINT_HTML_NODE_LINK_PAGES_DEFAULT),
243 244 245 246
    '#rows' => 3,
    '#description' => t("Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are %blog for the blog page and %blog-wildcard for every personal blog. %front is the front page.", array('%blog' => 'blog', '%blog-wildcard' => 'blog/*', '%front' => '<front>')),
  );

247
  $access = user_access('use PHP for settings');
jcnventura's avatar
jcnventura committed
248 249 250 251 252 253 254

  if ($form['settings']['adv_link']['print_html_node_link_visibility']['#default_value'] == 2 && !$access) {
    $form['settings']['adv_link']['print_html_node_link_visibility'] = array('#type' => 'value', '#value' => 2);
    $form['settings']['adv_link']['print_html_node_link_pages'] = array('#type' => 'value', '#value' => $form['settings']['adv_link']['print_html_node_link_pages']['#default_value']);
  }
  elseif ($access) {
    $form['settings']['adv_link']['print_html_node_link_visibility']['#options'][] = t('Show if the following PHP code returns <code>TRUE</code> (PHP-mode, experts only).');
jcnventura's avatar
jcnventura committed
255
    $form['settings']['adv_link']['print_html_node_link_pages']['#description'] .= ' ' . t('If the PHP-mode is chosen, enter PHP code between %php. Note that executing incorrect PHP-code can break your Drupal site.', array('%php' => '<?php ?>'));
jcnventura's avatar
jcnventura committed
256 257
  }

258
  $form['settings']['adv_link']['print_html_sys_link_visibility'] = array(
259 260
    '#type' => 'radios',
    '#title' => t('Show link in system (non-content) pages'),
261
    '#default_value' => variable_get('print_html_sys_link_visibility', PRINT_HTML_SYS_LINK_VISIBILITY_DEFAULT),
262 263 264
    '#options' => array(t('Show on every page except the listed pages.'), t('Show on only the listed pages.')),
  );

265
  $form['settings']['adv_link']['print_html_sys_link_pages'] = array(
266
    '#type' => 'textarea',
267
    '#default_value' => variable_get('print_html_sys_link_pages', PRINT_HTML_SYS_LINK_PAGES_DEFAULT),
268
    '#rows' => 3,
jcnventura's avatar
jcnventura committed
269
    '#description' => t('Setting this option will add a printer-friendly version page link on pages created by Drupal or the enabled modules.') . '<br />' .
270
                      t("Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are %blog for the blog page and %blog-wildcard for every personal blog. %front is the front page.", array('%blog' => 'blog', '%blog-wildcard' => 'blog/*', '%front' => '<front>')),
jcnventura's avatar
jcnventura committed
271 272
  );

jcnventura's avatar
jcnventura committed
273 274 275 276 277 278
  if ($form['settings']['adv_link']['print_html_sys_link_visibility']['#default_value'] == 2 && !$access) {
    $form['settings']['adv_link']['print_html_sys_link_visibility'] = array('#type' => 'value', '#value' => 2);
    $form['settings']['adv_link']['print_html_sys_link_pages'] = array('#type' => 'value', '#value' => $form['settings']['adv_link']['print_html_sys_link_pages']['#default_value']);
  }
  elseif ($access) {
    $form['settings']['adv_link']['print_html_sys_link_visibility']['#options'][] = t('Show if the following PHP code returns <code>TRUE</code> (PHP-mode, experts only).');
jcnventura's avatar
jcnventura committed
279
    $form['settings']['adv_link']['print_html_sys_link_pages']['#description'] .= ' ' . t('If the PHP-mode is chosen, enter PHP code between %php. Note that executing incorrect PHP-code can break your Drupal site.', array('%php' => '<?php ?>'));
jcnventura's avatar
jcnventura committed
280 281
  }

282
  $form['settings']['adv_link']['print_html_book_link'] = array(
283 284
    '#type' => 'radios',
    '#title' => t('Link in book hierarchy nodes'),
285
    '#default_value' => variable_get('print_html_book_link', PRINT_HTML_BOOK_LINK_DEFAULT),
286
    '#options' => array(t('Book module link not modified'), t('Current page and sub-pages'), t('Current page only')),
jcnventura's avatar
jcnventura committed
287 288
  );

289
  $form['settings']['print_html_new_window'] = array(
290 291
    '#type' => 'checkbox',
    '#title' => t('Open the printer-friendly version in a new window'),
292
    '#default_value' => variable_get('print_html_new_window', PRINT_HTML_NEW_WINDOW_DEFAULT),
293 294 295
    '#description' => t('Setting this option will make the printer-friendly version open in a new window/tab.'),
  );

296
  $form['settings']['print_html_sendtoprinter'] = array(
jcnventura's avatar
jcnventura committed
297 298
    '#type' => 'checkbox',
    '#title' => t('Send to printer'),
299 300
    '#default_value' => variable_get('print_html_sendtoprinter', PRINT_HTML_SENDTOPRINTER_DEFAULT),
    '#description' => t("Automatically calls the browser's print function when the printer-friendly version is displayed."),
jcnventura's avatar
jcnventura committed
301 302
  );

303 304 305 306 307 308 309
  $form['settings']['print_html_windowclose'] = array(
    '#type' => 'checkbox',
    '#title' => t('Close window after sending to printer'),
    '#default_value' => variable_get('print_html_windowclose', PRINT_HTML_WINDOWCLOSE_DEFAULT),
    '#description' => t("When the above options are enabled, this option will close the window after its contents are printed."),
  );

310
  $form['settings']['print_robots_settings'] = array(
jcnventura's avatar
jcnventura committed
311 312
      '#type' => 'fieldset',
      '#title' => t('Robots META tags'),
313
      '#collapsible' => TRUE,
314
      '#collapsed' => TRUE,
jcnventura's avatar
jcnventura committed
315 316
  );

317
  $form['settings']['print_robots_settings']['print_robots_noindex'] = array(
jcnventura's avatar
jcnventura committed
318 319
    '#type' => 'checkbox',
    '#title' => t('Add noindex'),
320
    '#default_value' => variable_get('print_robots_noindex', PRINT_ROBOTS_NOINDEX_DEFAULT),
321
    '#description' => t('Instruct robots to not index printer-friendly pages. Recommended for good search engine karma.'),
jcnventura's avatar
jcnventura committed
322 323
  );

324
  $form['settings']['print_robots_settings']['print_robots_nofollow'] = array(
jcnventura's avatar
jcnventura committed
325 326
    '#type' => 'checkbox',
    '#title' => t('Add nofollow'),
327
    '#default_value' => variable_get('print_robots_nofollow', PRINT_ROBOTS_NOFOLLOW_DEFAULT),
328
    '#description' => t('Instruct robots to not follow outgoing links on printer-friendly pages.'),
jcnventura's avatar
jcnventura committed
329 330
  );

331
  $form['settings']['print_robots_settings']['print_robots_noarchive'] = array(
jcnventura's avatar
jcnventura committed
332 333
    '#type' => 'checkbox',
    '#title' => t('Add noarchive'),
334
    '#default_value' => variable_get('print_robots_noarchive', PRINT_ROBOTS_NOARCHIVE_DEFAULT),
335
    '#description' => t('Non-standard tag to instruct search engines to not show a "Cached" link for your printer-friendly pages. Recognized by Googlebot.'),
jcnventura's avatar
jcnventura committed
336 337 338 339
  );

  return system_settings_form($form);
}
340 341 342 343 344 345 346

/**
 * Menu callback for the Printer-friendly pages module text strings settings form.
 *
 * @ingroup forms
 */
function print_main_strings_settings() {
347 348
  drupal_set_message(t("Saving these strings will disable their translation via Drupal's language system. Use the reset button to return them to the original state."), 'warning');

349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387
  $form['print_main_text'] = array(
    '#type' => 'fieldset',
    '#title' => t('Text strings'),
  );

  $form['print_main_text']['print_text_published'] = array(
    '#type' => 'textfield',
    '#default_value' => variable_get('print_text_published', t('Published on %site_name')),
  );
  $form['print_main_text']['print_text_by'] = array(
    '#type' => 'textfield',
    '#default_value' => variable_get('print_text_by', t('By %author')),
  );
  $form['print_main_text']['print_text_created'] = array(
    '#type' => 'textfield',
    '#default_value' => variable_get('print_text_created', t('Created %date')),
  );
  $form['print_main_text']['print_text_source_url'] = array(
    '#type' => 'textfield',
    '#default_value' => variable_get('print_text_source_url', t('Source URL')),
  );
  $form['print_main_text']['print_text_retrieved'] = array(
    '#type' => 'textfield',
    '#default_value' => variable_get('print_text_retrieved', t('retrieved on %date')),
  );
  $form['print_main_text']['print_text_links'] = array(
    '#type' => 'textfield',
    '#default_value' => variable_get('print_text_links', t('Links')),
  );

  return system_settings_form($form);
}

/**
 * Menu callback for the Printer-friendly pages module text strings settings form.
 *
 * @ingroup forms
 */
function print_html_strings_settings() {
388 389
  drupal_set_message(t("Saving these strings will disable their translation via Drupal's language system. Use the reset button to return them to the original state."), 'warning');

390 391 392 393 394 395 396 397 398 399 400 401 402 403
  $form['print_html_text'] = array(
    '#type' => 'fieldset',
    '#title' => t('Text strings'),
  );

  $form['print_html_text']['print_html_link_text'] = array(
    '#type' => 'textfield',
    '#title' => t('Link text'),
    '#default_value' => variable_get('print_html_link_text', t('Printer-friendly version')),
    '#description' => t('Text used in the link to the printer-friendly version.'),
  );

  return system_settings_form($form);
}