Allow users (including anonymous) to email individuals via Contact module
Let's say you have a few users that you want to be emailable through your contact form (and you don't want to use webform module). That's great, just set up a category for each one. But if you just link to the contact page, your visitors will have to manually select the person they want to email after they hit it. There's a quick way around that.
Drupal 5
Create a module (or use an existing one if you have one for glue code like this) that contains this function:
// change mymodule to the name of your module, of course
function mymodule_form_alter ($form_id, &$form) {
// changes the default value in the contact form if we have a ?c=x in the URL
if ($form_id == 'contact_mail_page') {
if ((int)$_GET['c'] > 0) {
$form['cid']['#default_value'] = (int)$_GET['c'];
}
}
}Now you can use links in this form:
<a href="contact?c=2">Email the second person in the contact form</a>
<a href="contact?c=4">Email the fourth person in the contact form</a>Until personal contact forms can be used by anonymous users, this solution might stave off the temptation to patch core.
Drupal 6
The code needs to be changed in order to work for Drupal 6. Replace the word hook with the name of your module.
function hook_form_alter(&$form, &$form_state, $form_id) {
// changes the default value in the contact form if we have a ?c=x in the URL
if ($form_id == 'contact_mail_page') {
if ((int)$_GET['c'] > 0) {
$form['cid']['#default_value'] = (int)$_GET['c'];
}
}
}
This one worked for me
The above described method didn't worked for me (maybe my mistake somewhere), so I ended up editing the contact modules code. I did the following:
- edit file contact.pages.inc
- locate function contact_mail_page
- at line 59 in that file, you should have: if (count($categories) > 1) {...
followed by description and an if for setting default category if none specified.
- I added the following at line 60 (inside the above mentioned if and before the default category for none specified command):
//If we have a default category defined in the URLif ((int)$_GET['c'] > 0) {
$default_category = (int)$_GET['c'];
}
- access is like in the original article
This will preselect the desired value. If nothing is specified as default value it will continue as before, and if default value is specified it should apply only to URLs not containing "?c=x"
Don't do it this way!
I just tested the Drupal 6 code against Drupal 6.12, and it works just fine. Patching core like this, especially when there's an easily workable alternate solution, is a very bad idea.