diff -u old/email/email.module modules/email/email.module --- old/email/email.module 2008-08-12 09:12:02.000000000 +0100 +++ modules/email/email.module 2008-08-28 11:32:13.000000000 +0100 @@ -178,6 +178,7 @@ function email_widget_settings($op, $widget) { switch ($op) { case 'form': + // Size of the widget $size = (isset($widget['size']) && is_numeric($widget['size'])) ? $widget['size'] : 60; $form['size'] = array( '#type' => 'textfield', @@ -186,10 +187,36 @@ '#element_validate' => array('_email_widget_settings_size_validate'), '#required' => TRUE, ); + + // Default values to use for subject/body + // Try to limit the list of fields to those in the current content type. + if (arg(0) == 'admin' && arg(1) == 'content' && arg(2) == 'node-type') { + $content_type = content_types(arg(3)); + $fields = array_keys($content_type['fields']); + } else { + $fields = array_keys(content_fields()); + } + $fields = array_merge(array('--', 'title', 'body'), $fields); + $fields = array_combine($fields, $fields); + + $form['default_subject'] = array( + '#type' => 'select', + '#title' => t('Field for default subject'), + '#description' => t('If set, the contact form will use the content of this field as default subject'), + '#options' => $fields, + '#default_value' => empty($widget['default_subject']) ? '--' : $widget['default_subject'], + ); + $form['default_body'] = array( + '#type' => 'select', + '#title' => t('Field for default body'), + '#description' => t('If set, the contact form will use the content of this field as default body'), + '#options' => $fields, + '#default_value' => empty($widget['default_body']) ? '--' : $widget['default_body'], + ); return $form; case 'save': - return array('size'); + return array('size', 'default_subject', 'default_body'); } } @@ -286,24 +313,55 @@ drupal_not_found(); return; } - + + // Get defaults + $default_subject = _email_get_default_value('default_subject', $field_name, $types['fields'], $node); + $default_body = _email_get_default_value('default_body', $field_name, $types['fields'], $node); if (!flood_is_allowed('email', variable_get('email_hourly_threshold', 3))) { $output = t("You cannot send more than %number messages per hour. Please try again later.", array('%number' => variable_get('email_hourly_threshold', 3))); } else { - $output = drupal_get_form('email_mail_page_form', $node, $field_name, $email); + $output = drupal_get_form('email_mail_page_form', $node, $field_name, $email, $default_subject, $default_body); } return $output; } /** + * Return the default subject or default body where applicable + */ +function _email_get_default_value($default_type, $field_name, $fields, &$node) { + if (empty($fields[$field_name]['widget'][$default_type])) { + return ''; + } + + $field_for_default = $fields[$field_name]['widget'][$default_type]; + if ($field_for_default == '--' || !isset($node->$field_for_default)) { + return ''; + } + + if ($field_for_default == 'title') { + return check_plain($node->title); + } + + if (empty($node->content)) { + $node = node_build_content($node); + } + if (isset($node->content[$field_for_default])) { + $value = drupal_render($node->content[$field_for_default]); + // Until we can send HTML emails, this is necessary ! + $value = str_replace(' ', ' ', strip_tags($value)); + return html_entity_decode($value); + } +} + + +/** * Contact form */ -function email_mail_page_form($form_state, $node, $field_name, $email) { +function email_mail_page_form($form_state, $node, $field_name, $email, $default_subject, $default_body) { global $user; - $form['node'] = array( '#type' => 'value', '#value' => $node, @@ -334,11 +392,13 @@ '#type' => 'textfield', '#title' => t('Subject'), '#maxlength' => 255, + '#default_value' => $default_subject, '#required' => TRUE, ); $form['message'] = array( '#type' => 'textarea', '#title' => t('Message'), + '#default_value' => $default_body, '#required' => TRUE, ); $form['submit'] = array(