Mercurial > defr > drupal > core
diff modules/update/update.settings.inc @ 1:c1f4ac30525a 6.0
Drupal 6.0
author | Franck Deroche <webmaster@defr.org> |
---|---|
date | Tue, 23 Dec 2008 14:28:28 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/update/update.settings.inc Tue Dec 23 14:28:28 2008 +0100 @@ -0,0 +1,108 @@ +<?php +// $Id: update.settings.inc,v 1.3 2007/10/20 21:57:50 goba Exp $ + +/** + * @file + * Code required only for the update status settings form. + */ + +/** + * Form builder for the update settings tab. + */ +function update_settings() { + $form = array(); + + $notify_emails = variable_get('update_notify_emails', array()); + $form['update_notify_emails'] = array( + '#type' => 'textarea', + '#title' => t('E-mail addresses to notify when updates are available'), + '#rows' => 4, + '#default_value' => implode("\n", $notify_emails), + '#description' => t('Whenever your site checks for available updates and finds new releases, it can notify a list of users via e-mail. Put each address on a separate line. If blank, no e-mails will be sent.'), + ); + + $form['update_check_frequency'] = array( + '#type' => 'radios', + '#title' => t('Check for updates'), + '#default_value' => variable_get('update_check_frequency', 1), + '#options' => array( + '1' => t('Daily'), + '7' => t('Weekly'), + ), + '#description' => t('Select how frequently you want to automatically check for new releases of your currently installed modules and themes.'), + ); + + $form['update_notification_threshold'] = array( + '#type' => 'radios', + '#title' => t('Notification threshold'), + '#default_value' => variable_get('update_notification_threshold', 'all'), + '#options' => array( + 'all' => t('All newer versions'), + 'security' => t('Only security updates'), + ), + '#description' => t('If there are updates available of Drupal core or any of your installed modules and themes, your site will print an error message on the <a href="@status_report">status report</a>, the <a href="@modules_page">modules page</a>, and the <a href="@themes_page">themes page</a>. You can choose to only see these error messages if a security update is available, or to be notified about any newer versions.', array('@status_report' => url('admin/reports/status'), '@modules_page' => url('admin/build/modules'), '@themes_page' => url('admin/build/themes'))) + ); + + $form = system_settings_form($form); + // Custom valiation callback for the email notification setting. + $form['#validate'][] = 'update_settings_validate'; + // We need to call our own submit callback first, not the one from + // system_settings_form(), so that we can process and save the emails. + unset($form['#submit']); + + return $form; +} + +/** + * Validation callback for the settings form. + * + * Validates the email addresses and ensures the field is formatted correctly. + */ +function update_settings_validate($form, &$form_state) { + if (!empty($form_state['values']['update_notify_emails'])) { + $valid = array(); + $invalid = array(); + foreach (explode("\n", trim($form_state['values']['update_notify_emails'])) as $email) { + $email = trim($email); + if (!empty($email)) { + if (valid_email_address($email)) { + $valid[] = $email; + } + else { + $invalid[] = $email; + } + } + } + if (empty($invalid)) { + $form_state['notify_emails'] = $valid; + } + elseif (count($invalid) == 1) { + form_set_error('update_notify_emails', t('%email is not a valid e-mail address.', array('%email' => reset($invalid)))); + } + else { + form_set_error('update_notify_emails', t('%emails are not valid e-mail addresses.', array('%emails' => implode(', ', $invalid)))); + } + } +} + +/** + * Submit handler for the settings tab. + */ +function update_settings_submit($form, $form_state) { + $op = $form_state['values']['op']; + + if ($op == t('Reset to defaults')) { + unset($form_state['notify_emails']); + } + else { + if (empty($form_state['notify_emails'])) { + variable_del('update_notify_emails'); + } + else { + variable_set('update_notify_emails', $form_state['notify_emails']); + } + unset($form_state['notify_emails']); + unset($form_state['values']['update_notify_emails']); + } + system_settings_form_submit($form, $form_state); +}