From ce094a1323d64743df35f8f87e40636be868de40 Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Sun, 31 Jul 2005 10:12:47 +0000 Subject: [PATCH] - Patch #27633 by Tobias: + made it possible to specify a subject when submitting a message on the contact form. + fixed some bugs/glitches. --- database/database.mysql | 7 +-- database/database.pgsql | 5 +- database/updates.inc | 17 +++++- modules/contact.module | 96 ++++++++++++++++++++-------------- modules/contact/contact.module | 96 ++++++++++++++++++++-------------- modules/system.module | 2 +- modules/system/system.module | 2 +- 7 files changed, 137 insertions(+), 88 deletions(-) diff --git a/database/database.mysql b/database/database.mysql index 66bbfb26e7bb..56a6cd87a7b0 100644 --- a/database/database.mysql +++ b/database/database.mysql @@ -201,10 +201,11 @@ CREATE TABLE comments ( -- CREATE TABLE contact ( - subject varchar(255) NOT NULL default '', + category varchar(255) NOT NULL default '', recipients longtext NOT NULL default '', - reply longtext NOT NULL default '' -); + reply longtext NOT NULL default '', + PRIMARY KEY (category) +) TYPE=MyISAM; -- -- Table structre for table 'node_comment_statistics' diff --git a/database/database.pgsql b/database/database.pgsql index 22e7f6cd66bc..c964db4b4c42 100644 --- a/database/database.pgsql +++ b/database/database.pgsql @@ -197,9 +197,10 @@ CREATE INDEX comments_nid_idx ON comments(nid); -- CREATE TABLE contact ( - subject varchar(255) NOT NULL default '', + category varchar(255) NOT NULL default '', recipients text NOT NULL default '', - reply text NOT NULL default '' + reply text NOT NULL default '', + PRIMARY KEY (category) ); -- diff --git a/database/updates.inc b/database/updates.inc index f6c13f4c9522..70e4038b1755 100644 --- a/database/updates.inc +++ b/database/updates.inc @@ -118,7 +118,8 @@ "2005-05-11" => "update_139", "2005-05-12" => "update_140", "2005-05-22" => "update_141", - "2005-07-29" => "update_142" + "2005-07-29" => "update_142", + "2005-07-30" => "update_143" ); function update_32() { @@ -2518,6 +2519,20 @@ function update_142() { return $ret; } +function update_143() { + $ret = array(); + + if ($GLOBALS['db_type'] == 'mysql') { + $ret[] = update_sql("ALTER TABLE {contact} CHANGE subject category VARCHAR(255) NOT NULL "); + } + elseif ($GLOBALS['db_type'] == 'pgsql') { + $ret[] = update_sql("ALTER TABLE {contact} RENAME COLUMN subject TO category"); + } + $ret[] = update_sql("ALTER TABLE {contact} ADD PRIMARY KEY (category)"); + + return $ret; +} + function update_sql($sql) { $edit = $_POST["edit"]; $result = db_query($sql); diff --git a/modules/contact.module b/modules/contact.module index a65d379b3179..9e1463c8342b 100644 --- a/modules/contact.module +++ b/modules/contact.module @@ -37,7 +37,7 @@ function contact_menu($may_cache) { $items[] = array('path' => 'admin/contact/list', 'title' => t('list'), 'callback' => 'contact_admin', 'access' => user_access('administer site configuration'), 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -1); - $items[] = array('path' => 'admin/contact/edit', 'title' => t('add subject'), + $items[] = array('path' => 'admin/contact/edit', 'title' => t('add category'), 'callback' => 'contact_admin_edit', 'access' => user_access('administer site configuration'), 'type' => MENU_LOCAL_TASK); $items[] = array('path' => 'admin/contact/delete', 'title' => t('delete contact'), @@ -58,8 +58,7 @@ function contact_menu($may_cache) { * Implementation of hook_settings(). */ function contact_settings() { - $output = form_textarea(t('Additional information'), 'contact_form_information', variable_get('contact_form_information', t('You can leave us a message using the contact form below.')), 60, 5, t('Information to show on the <a href="%form">contact page</a>. Can be anything from submission guidelines to your postal address or telephone number.', array('%form' => url('contact')))); - return $output; + return form_textarea(t('Additional information'), 'contact_form_information', variable_get('contact_form_information', t('You can leave us a message using the contact form below.')), 60, 5, t('Information to show on the <a href="%form">contact page</a>. Can be anything from submission guidelines to your postal address or telephone number.', array('%form' => url('contact')))); } /** @@ -161,57 +160,61 @@ function contact_mail_user() { } } -function contact_admin_edit($subject = NULL) { +function contact_admin_edit($category = NULL) { if (isset($_POST['edit'])) { $edit = $_POST['edit']; - if (empty($edit['subject'])) { - form_set_error('subject', t('You must enter a subject.')); + if (empty($edit['category'])) { + form_set_error('category', t('You must enter a category.')); } if (empty($edit['recipients'])) { form_set_error('recipients', t('You must enter one or more recipients.')); } if (!form_get_errors()) { - db_query("DELETE FROM {contact} WHERE subject = '%s'", $subject); - db_query("INSERT INTO {contact} (subject, recipients, reply) VALUES ('%s', '%s', '%s')", $edit['subject'], $edit['recipients'], $edit['reply']); + db_query("DELETE FROM {contact} WHERE category = '%s'", $category); + db_query("INSERT INTO {contact} (category, recipients, reply) VALUES ('%s', '%s', '%s')", $edit['category'], $edit['recipients'], $edit['reply']); drupal_goto('admin/contact'); } } + else { + $category = db_fetch_object(db_query("SELECT * FROM {contact} WHERE category = '%s'", $category)); + $edit['category'] = $category->category; + $edit['recipients'] = $category->recipients; + $edit['reply'] = $category->reply; + } - $subject = db_fetch_object(db_query("SELECT * FROM {contact} WHERE subject = '%s'", $subject)); - - $form = form_textfield(t('Subject'), 'subject', $subject->subject, 60, 255, t("Example: 'website feedback' or 'product information'."), NULL, TRUE); - $form .= form_textarea(t('Recipients'), 'recipients', $subject->recipients, 60, 5, t("Example: 'webmaster@yoursite.com' or 'sales@yoursite.com'. To specify multiple repecients, separate each e-mail address with a comma."), NULL, TRUE); - $form .= form_textarea(t('Auto-reply'), 'reply', $subject->reply, 60, 5, t("Optional auto-reply. Leave empty if you don't want to send the user an auto-reply message.")); + $form = form_textfield(t('Category'), 'category', $edit['category'], 60, 255, t("Example: 'website feedback' or 'product information'."), NULL, TRUE); + $form .= form_textarea(t('Recipients'), 'recipients', $edit['recipients'], 60, 5, t("Example: 'webmaster@yoursite.com' or 'sales@yoursite.com'. To specify multiple repecients, separate each e-mail address with a comma."), NULL, TRUE); + $form .= form_textarea(t('Auto-reply'), 'reply', $edit['reply'], 60, 5, t("Optional auto-reply. Leave empty if you don't want to send the user an auto-reply message.")); $form .= form_submit(t('Submit')); return form($form); } -function contact_admin_delete($subject) { +function contact_admin_delete($category) { if ($_POST['op'] != t('Delete')) { return theme('confirm', - t('Are you sure you want to delete %subject?', array('%subject' => theme('placeholder', $subject))), - 'admin/contact/delete/'. $subject, + t('Are you sure you want to delete %category?', array('%category' => theme('placeholder', $category))), + 'admin/contact/delete/'. $category, t('This action cannot be undone.'), t('Delete'), t('Cancel')); } else { - db_query("DELETE FROM {contact} WHERE subject = '%s'", $subject); + db_query("DELETE FROM {contact} WHERE category = '%s'", $category); drupal_goto('admin/contact'); } } function contact_admin() { - $result = db_query('SELECT subject, recipients FROM {contact} ORDER BY subject'); + $result = db_query('SELECT category, recipients FROM {contact} ORDER BY category'); $rows = array(); - while ($subject = db_fetch_object($result)) { - $rows[] = array($subject->subject, $subject->recipients, l(t('edit'), 'admin/contact/edit/'. urlencode($subject->subject)), l(t('delete'), 'admin/contact/delete/'. urlencode($subject->subject))); + while ($category = db_fetch_object($result)) { + $rows[] = array($category->category, $category->recipients, l(t('edit'), 'admin/contact/edit/'. urlencode($category->category)), l(t('delete'), 'admin/contact/delete/'. urlencode($category->category))); } - $header = array(t('Subject'), t('Recipients'), array('data' => t('Operations'), 'colspan' => 2)); + $header = array(t('Category'), t('Recipients'), array('data' => t('Operations'), 'colspan' => 2)); return theme('table', $header, $rows); } @@ -234,11 +237,22 @@ function contact_mail_page() { if (!$edit['mail'] || !valid_email_address($edit['mail'])) { form_set_error('mail', t('You must enter a valid e-mail address.')); } + if (!$edit['subject']) { + form_set_error('subject', t('You must enter a subject.')); + } if (!$edit['message']) { form_set_error('message', t('You must enter a message.')); } - if (!$edit['subject']) { - form_set_error('subject', t('You must select a valid subject.')); + if (!$edit['category']) { + // Look if there is only one category + $result = db_query('SELECT category FROM {contact}'); + if (db_num_rows($result) == 1) { + $category = db_fetch_object($result); + $edit['category'] = $category->category; + } + else { + form_set_error('category', t('You must select a valid category.')); + } } if (!form_get_errors()) { @@ -254,28 +268,28 @@ function contact_mail_page() { $message[$key] = wordwrap($value); } - // Format the subject: - $subject = '['. variable_get('site_subject', 'drupal') .'] '. $edit['subject']; + // Format the category: + $subject = '['. $edit['category'] .'] '. $edit['subject']; // Prepare the body: $body = implode("\n\n", $message); - // Load the subject information: - $contact = db_fetch_object(db_query("SELECT * FROM {contact} WHERE subject = '%s'", $edit['subject'])); + // Load the category information: + $contact = db_fetch_object(db_query("SELECT * FROM {contact} WHERE category = '%s'", $edit['category'])); // Send the e-mail to the recipients: - user_mail($contact->recipients, $contact->subject, $body, "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from"); + user_mail($contact->recipients, $subject, $body, "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from"); // Send an auto-reply if necessary: if ($contact->reply) { - user_mail($from, $contact->subject, wordwrap($contact->reply), "From: $contact->recipients\nReply-to: $contact->recipients\nX-Mailer: Drupal\nReturn-path: $contact->recipients\nErrors-to: $contact->recipients"); + user_mail($from, $subject, wordwrap($contact->reply), "From: $contact->recipients\nReply-to: $contact->recipients\nX-Mailer: Drupal\nReturn-path: $contact->recipients\nErrors-to: $contact->recipients"); } // Log the operation: flood_register_event('contact'); - watchdog('mail', t('%name-from sent an e-mail regarding %subject.', array('%name-from' => theme('placeholder', $edit['name'] ." <$from>"), '%subject' => theme('placeholder', $contact->subject)))); + watchdog('mail', t('%name-from sent an e-mail regarding %category.', array('%name-from' => theme('placeholder', $edit['name'] ." <$from>"), '%category' => theme('placeholder', $contact->category)))); - // Set a status message: + // Set a status message:subject drupal_set_message(t('Your message has been sent.')); // Jump to contact page: @@ -287,17 +301,20 @@ function contact_mail_page() { $edit['mail'] = $user->mail; } - $result = db_query('SELECT subject FROM contact ORDER BY subject'); - $subjects[] = '--'; - while ($subject = db_fetch_object($result)) { - $subjects[$subject->subject] = $subject->subject; + $result = db_query('SELECT category FROM {contact} ORDER BY category'); + $categories[] = '--'; + while ($category = db_fetch_object($result)) { + $categories[$category->category] = $category->category; } - if ($subjects) { + if (count($categories) > 1) { $output = variable_get('contact_form_information', t('You can leave us a message using the contact form below.')); - $output .= form_textfield(t('Name'), 'name', $edit['name'], 60, 255, NULL, NULL, TRUE); - $output .= form_textfield(t('E-mail'), 'mail', $edit['mail'], 60, 255, NULL, NULL, TRUE); - $output .= form_select(t('Subject'), 'subject', $edit['subject'], $subjects, NULL, NULL, NULL, TRUE); + $output .= form_textfield(t('Your name'), 'name', $edit['name'], 60, 255, NULL, NULL, TRUE); + $output .= form_textfield(t('Your e-mail address'), 'mail', $edit['mail'], 60, 255, NULL, NULL, TRUE); + $output .= form_textfield(t('Subject'), 'subject', $edit['subject'], 60, 255, NULL, NULL, TRUE); + if (count($categories) > 2) { + $output .= form_select(t('Category'), 'category', $edit['category'], $categories, NULL, NULL, NULL, TRUE); + } $output .= form_textarea(t('Message'), 'message', $edit['message'], 60, 5, NULL, NULL, TRUE); $output .= form_submit(t('Send e-mail')); $output = form($output); @@ -309,5 +326,4 @@ function contact_mail_page() { return $output; } - ?> diff --git a/modules/contact/contact.module b/modules/contact/contact.module index a65d379b3179..9e1463c8342b 100644 --- a/modules/contact/contact.module +++ b/modules/contact/contact.module @@ -37,7 +37,7 @@ function contact_menu($may_cache) { $items[] = array('path' => 'admin/contact/list', 'title' => t('list'), 'callback' => 'contact_admin', 'access' => user_access('administer site configuration'), 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -1); - $items[] = array('path' => 'admin/contact/edit', 'title' => t('add subject'), + $items[] = array('path' => 'admin/contact/edit', 'title' => t('add category'), 'callback' => 'contact_admin_edit', 'access' => user_access('administer site configuration'), 'type' => MENU_LOCAL_TASK); $items[] = array('path' => 'admin/contact/delete', 'title' => t('delete contact'), @@ -58,8 +58,7 @@ function contact_menu($may_cache) { * Implementation of hook_settings(). */ function contact_settings() { - $output = form_textarea(t('Additional information'), 'contact_form_information', variable_get('contact_form_information', t('You can leave us a message using the contact form below.')), 60, 5, t('Information to show on the <a href="%form">contact page</a>. Can be anything from submission guidelines to your postal address or telephone number.', array('%form' => url('contact')))); - return $output; + return form_textarea(t('Additional information'), 'contact_form_information', variable_get('contact_form_information', t('You can leave us a message using the contact form below.')), 60, 5, t('Information to show on the <a href="%form">contact page</a>. Can be anything from submission guidelines to your postal address or telephone number.', array('%form' => url('contact')))); } /** @@ -161,57 +160,61 @@ function contact_mail_user() { } } -function contact_admin_edit($subject = NULL) { +function contact_admin_edit($category = NULL) { if (isset($_POST['edit'])) { $edit = $_POST['edit']; - if (empty($edit['subject'])) { - form_set_error('subject', t('You must enter a subject.')); + if (empty($edit['category'])) { + form_set_error('category', t('You must enter a category.')); } if (empty($edit['recipients'])) { form_set_error('recipients', t('You must enter one or more recipients.')); } if (!form_get_errors()) { - db_query("DELETE FROM {contact} WHERE subject = '%s'", $subject); - db_query("INSERT INTO {contact} (subject, recipients, reply) VALUES ('%s', '%s', '%s')", $edit['subject'], $edit['recipients'], $edit['reply']); + db_query("DELETE FROM {contact} WHERE category = '%s'", $category); + db_query("INSERT INTO {contact} (category, recipients, reply) VALUES ('%s', '%s', '%s')", $edit['category'], $edit['recipients'], $edit['reply']); drupal_goto('admin/contact'); } } + else { + $category = db_fetch_object(db_query("SELECT * FROM {contact} WHERE category = '%s'", $category)); + $edit['category'] = $category->category; + $edit['recipients'] = $category->recipients; + $edit['reply'] = $category->reply; + } - $subject = db_fetch_object(db_query("SELECT * FROM {contact} WHERE subject = '%s'", $subject)); - - $form = form_textfield(t('Subject'), 'subject', $subject->subject, 60, 255, t("Example: 'website feedback' or 'product information'."), NULL, TRUE); - $form .= form_textarea(t('Recipients'), 'recipients', $subject->recipients, 60, 5, t("Example: 'webmaster@yoursite.com' or 'sales@yoursite.com'. To specify multiple repecients, separate each e-mail address with a comma."), NULL, TRUE); - $form .= form_textarea(t('Auto-reply'), 'reply', $subject->reply, 60, 5, t("Optional auto-reply. Leave empty if you don't want to send the user an auto-reply message.")); + $form = form_textfield(t('Category'), 'category', $edit['category'], 60, 255, t("Example: 'website feedback' or 'product information'."), NULL, TRUE); + $form .= form_textarea(t('Recipients'), 'recipients', $edit['recipients'], 60, 5, t("Example: 'webmaster@yoursite.com' or 'sales@yoursite.com'. To specify multiple repecients, separate each e-mail address with a comma."), NULL, TRUE); + $form .= form_textarea(t('Auto-reply'), 'reply', $edit['reply'], 60, 5, t("Optional auto-reply. Leave empty if you don't want to send the user an auto-reply message.")); $form .= form_submit(t('Submit')); return form($form); } -function contact_admin_delete($subject) { +function contact_admin_delete($category) { if ($_POST['op'] != t('Delete')) { return theme('confirm', - t('Are you sure you want to delete %subject?', array('%subject' => theme('placeholder', $subject))), - 'admin/contact/delete/'. $subject, + t('Are you sure you want to delete %category?', array('%category' => theme('placeholder', $category))), + 'admin/contact/delete/'. $category, t('This action cannot be undone.'), t('Delete'), t('Cancel')); } else { - db_query("DELETE FROM {contact} WHERE subject = '%s'", $subject); + db_query("DELETE FROM {contact} WHERE category = '%s'", $category); drupal_goto('admin/contact'); } } function contact_admin() { - $result = db_query('SELECT subject, recipients FROM {contact} ORDER BY subject'); + $result = db_query('SELECT category, recipients FROM {contact} ORDER BY category'); $rows = array(); - while ($subject = db_fetch_object($result)) { - $rows[] = array($subject->subject, $subject->recipients, l(t('edit'), 'admin/contact/edit/'. urlencode($subject->subject)), l(t('delete'), 'admin/contact/delete/'. urlencode($subject->subject))); + while ($category = db_fetch_object($result)) { + $rows[] = array($category->category, $category->recipients, l(t('edit'), 'admin/contact/edit/'. urlencode($category->category)), l(t('delete'), 'admin/contact/delete/'. urlencode($category->category))); } - $header = array(t('Subject'), t('Recipients'), array('data' => t('Operations'), 'colspan' => 2)); + $header = array(t('Category'), t('Recipients'), array('data' => t('Operations'), 'colspan' => 2)); return theme('table', $header, $rows); } @@ -234,11 +237,22 @@ function contact_mail_page() { if (!$edit['mail'] || !valid_email_address($edit['mail'])) { form_set_error('mail', t('You must enter a valid e-mail address.')); } + if (!$edit['subject']) { + form_set_error('subject', t('You must enter a subject.')); + } if (!$edit['message']) { form_set_error('message', t('You must enter a message.')); } - if (!$edit['subject']) { - form_set_error('subject', t('You must select a valid subject.')); + if (!$edit['category']) { + // Look if there is only one category + $result = db_query('SELECT category FROM {contact}'); + if (db_num_rows($result) == 1) { + $category = db_fetch_object($result); + $edit['category'] = $category->category; + } + else { + form_set_error('category', t('You must select a valid category.')); + } } if (!form_get_errors()) { @@ -254,28 +268,28 @@ function contact_mail_page() { $message[$key] = wordwrap($value); } - // Format the subject: - $subject = '['. variable_get('site_subject', 'drupal') .'] '. $edit['subject']; + // Format the category: + $subject = '['. $edit['category'] .'] '. $edit['subject']; // Prepare the body: $body = implode("\n\n", $message); - // Load the subject information: - $contact = db_fetch_object(db_query("SELECT * FROM {contact} WHERE subject = '%s'", $edit['subject'])); + // Load the category information: + $contact = db_fetch_object(db_query("SELECT * FROM {contact} WHERE category = '%s'", $edit['category'])); // Send the e-mail to the recipients: - user_mail($contact->recipients, $contact->subject, $body, "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from"); + user_mail($contact->recipients, $subject, $body, "From: $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to: $from"); // Send an auto-reply if necessary: if ($contact->reply) { - user_mail($from, $contact->subject, wordwrap($contact->reply), "From: $contact->recipients\nReply-to: $contact->recipients\nX-Mailer: Drupal\nReturn-path: $contact->recipients\nErrors-to: $contact->recipients"); + user_mail($from, $subject, wordwrap($contact->reply), "From: $contact->recipients\nReply-to: $contact->recipients\nX-Mailer: Drupal\nReturn-path: $contact->recipients\nErrors-to: $contact->recipients"); } // Log the operation: flood_register_event('contact'); - watchdog('mail', t('%name-from sent an e-mail regarding %subject.', array('%name-from' => theme('placeholder', $edit['name'] ." <$from>"), '%subject' => theme('placeholder', $contact->subject)))); + watchdog('mail', t('%name-from sent an e-mail regarding %category.', array('%name-from' => theme('placeholder', $edit['name'] ." <$from>"), '%category' => theme('placeholder', $contact->category)))); - // Set a status message: + // Set a status message:subject drupal_set_message(t('Your message has been sent.')); // Jump to contact page: @@ -287,17 +301,20 @@ function contact_mail_page() { $edit['mail'] = $user->mail; } - $result = db_query('SELECT subject FROM contact ORDER BY subject'); - $subjects[] = '--'; - while ($subject = db_fetch_object($result)) { - $subjects[$subject->subject] = $subject->subject; + $result = db_query('SELECT category FROM {contact} ORDER BY category'); + $categories[] = '--'; + while ($category = db_fetch_object($result)) { + $categories[$category->category] = $category->category; } - if ($subjects) { + if (count($categories) > 1) { $output = variable_get('contact_form_information', t('You can leave us a message using the contact form below.')); - $output .= form_textfield(t('Name'), 'name', $edit['name'], 60, 255, NULL, NULL, TRUE); - $output .= form_textfield(t('E-mail'), 'mail', $edit['mail'], 60, 255, NULL, NULL, TRUE); - $output .= form_select(t('Subject'), 'subject', $edit['subject'], $subjects, NULL, NULL, NULL, TRUE); + $output .= form_textfield(t('Your name'), 'name', $edit['name'], 60, 255, NULL, NULL, TRUE); + $output .= form_textfield(t('Your e-mail address'), 'mail', $edit['mail'], 60, 255, NULL, NULL, TRUE); + $output .= form_textfield(t('Subject'), 'subject', $edit['subject'], 60, 255, NULL, NULL, TRUE); + if (count($categories) > 2) { + $output .= form_select(t('Category'), 'category', $edit['category'], $categories, NULL, NULL, NULL, TRUE); + } $output .= form_textarea(t('Message'), 'message', $edit['message'], 60, 5, NULL, NULL, TRUE); $output .= form_submit(t('Send e-mail')); $output = form($output); @@ -309,5 +326,4 @@ function contact_mail_page() { return $output; } - ?> diff --git a/modules/system.module b/modules/system.module index 814baf6afb92..214fd98fa4d0 100644 --- a/modules/system.module +++ b/modules/system.module @@ -733,7 +733,7 @@ function system_theme_settings($key = '') { 'toggle_favicon' => t('Shortcut icon') ); - // Some features are not always available + // Some features are not always available $disabled = array(); if (!variable_get('user_pictures', 0)) { $disabled['toggle_node_user_picture'] = true; diff --git a/modules/system/system.module b/modules/system/system.module index 814baf6afb92..214fd98fa4d0 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -733,7 +733,7 @@ function system_theme_settings($key = '') { 'toggle_favicon' => t('Shortcut icon') ); - // Some features are not always available + // Some features are not always available $disabled = array(); if (!variable_get('user_pictures', 0)) { $disabled['toggle_node_user_picture'] = true; -- GitLab