Index: petition.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/petition_node/petition.install,v
retrieving revision 1.1.2.7
diff -u -p -r1.1.2.7 petition.install
--- petition.install	23 May 2009 10:19:18 -0000	1.1.2.7
+++ petition.install	3 Dec 2010 13:41:58 -0000
@@ -49,6 +49,12 @@ function petition_schema() {
         'not null' => TRUE,
         'default' => '0',
       ),
+      'confirmreq' => array(
+        'description' => t('Wether the email confirmation is required or not'),
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => '1',
+      ),
       'poptfields' => array(
         'description' => t('Optional fields for the petition'),
         'type' => 'text',
@@ -443,6 +449,16 @@ function petition_update_6005() {
   return $ret;
 }
 
+function petition_update_6006() {
+  $ret = array();
+  db_add_field($ret, 'petition', 'confirmreq',  array(
+    'description' => t('Wether the email confirmation is required or not'),
+    'type' => 'int',
+    'not null' => TRUE,
+    'default' => '1',
+  ));
+  return $ret;
+}
 
 function update_signature_count() {
   $result = db_query("SELECT * FROM {petition}");
Index: petition.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/petition_node/petition.module,v
retrieving revision 1.1.2.17
diff -u -p -r1.1.2.17 petition.module
--- petition.module	25 Oct 2009 12:39:25 -0000	1.1.2.17
+++ petition.module	3 Dec 2010 13:41:59 -0000
@@ -626,6 +626,14 @@ function petition_form(&$node, &$param) 
     '#default_value' => $node->update_frequency, 
     '#weight' => 2			
   );
+
+  $default_confirmation_required = (isset($node->confirmation_required)) ? $node->confirmation_required : 1 ;
+  $form['petition']['petition_node_settings'] ['confirmation_required'] = array(
+    '#type'           => 'checkbox',
+    '#title'          => t('E-mail confirmation required'),
+    '#default_value'  => $default_confirmation_required,
+    '#weight'         => 3,
+  );
 		
   if (isset($node->email_subject)) {
    $defaultsubject = $node->email_subject;
@@ -639,7 +647,7 @@ function petition_form(&$node, &$param) 
    '#title' => t("Customized subject of the mail sent to the petitioner"), 
    '#description' => t("Customized email subject to the petitioner."). getdefault("description_confirmation_mail"), 
    '#default_value' => $defaultsubject, 
-   '#weight' => 3			
+   '#weight' => 4			
   );
   If (isset($node->email_body)) {
     $defaultbody = $node->email_body;
@@ -653,7 +661,7 @@ function petition_form(&$node, &$param) 
     '#title' => t("Customized body of the email sent to the signer"), 
     '#description' => t("Customized email body to the petitioner."). getdefault("description_confirmation_mail"),
     '#default_value' => $defaultbody, 
-    '#weight' => 4			
+    '#weight' => 5			
   );
   $optionfields=variable_get('petition_signature_fields_form', array('name', 'firstname', 'title', 'address','zip', 'town', 'country', 'canbe_informed'));
   $options_signaturefields=array();
@@ -674,7 +682,7 @@ function petition_form(&$node, &$param) 
    '#description' => 'Choose what fields to be included in the petition .', 
    '#options' => $options_signaturefields, 
    '#default_value' => $defaultoptionalfields, 
-   '#weight' => 5			
+   '#weight' => 6			
   );
  
  if (is_array($node->required_fields) and !empty($node->required_fields)) {
@@ -689,7 +697,7 @@ function petition_form(&$node, &$param) 
  '#description' => 'Choose what fields to be required in the petition .', 
  '#options' => $options_signaturefields, 
  '#default_value' => $defaultrequiredfields, 
- '#weight' => 6			
+ '#weight' => 7			
  );
 	
  $optiondisplay=variable_get('petition_report_fields_fields', array('name', 'firstname', 'zip', 'town', 'country'));
@@ -711,7 +719,7 @@ function petition_form(&$node, &$param) 
  '#description' => 'Choose what fields you want to display on the signature result page .', 
  '#options' => $options_displayfields, 
  '#default_value' => $defaultdisplayfields, 
- '#weight' => 7		
+ '#weight' => 8		
  );
  
  $optiondisplay = array();
@@ -729,7 +737,7 @@ function petition_form(&$node, &$param) 
  '#title' => t('Display mode'), 
  '#options' => $optiondisplay,
  '#default_value' => $display_mode,
- '#weight' => 8
+ '#weight' => 9
  );
  
  $form['petition']['activation_settings'] = array(
@@ -875,6 +883,7 @@ function petition_load(&$node) {
     $node->list_allowed_countries = unserialize($petition['pcountry']);
     $node->maintainer_email = $petition['pemail'];
     $node->update_frequency = $petition['pfreq'];
+    $node->confirmation_required = $petition['confirmreq'];
     $node->optional_fields =  unserialize($petition['poptfields']);
     $node->required_fields =  unserialize($petition['reqfields']);
     $node->email_subject = $petition['emailsubject'];
@@ -940,11 +949,11 @@ function petition_insert($node) {
   if (!empty($node->limit_date) && strtotime($node->limit_date) > 0) {
    $node->limit_date = strtotime($node->limit_date);
   }
-   db_query("INSERT INTO {petition} (nid, pccheck, pcrest, pcountry, pemail, pfreq, poptfields, reqfields, emailsubject, emailbody,
+   db_query("INSERT INTO {petition} (nid, pccheck, pcrest, pcountry, pemail, pfreq, confirmreq, poptfields, reqfields, emailsubject, emailbody,
                                      presfields, display_mode, activation, inactivation_message, signatures, limit_date, signature_goal, campaign_settings, auto_inactivation)
-                            VALUES (%d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', %d, %d, %d, %d, %d)", 
+                            VALUES (%d, %d, %d, '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', %d, %d, %d, %d, %d)", 
                             $node->nid, $node->country_check, $node->country_restriction_enabled, serialize($node->list_allowed_countries), 
-                            $node->maintainer_email, $node->update_frequency, serialize($node->optional_fields), 
+                            $node->maintainer_email, $node->update_frequency, $node->confirmation_required, serialize($node->optional_fields), 
                             serialize($node->required_fields), $node->email_subject, $node->email_body, serialize($node->display_fields), $node->display_mode, $node->activation, $node->inactivation_message, $node->signatures,
                             $node->limit_date, $node->signature_goal, $node->campaign_settings, $node->auto_inactivation);
   if($node->manual_signatures != '') {
@@ -1542,6 +1551,10 @@ function petition_signature_form($form_s
   '#type' => 'hidden', 
   '#value' => $node->language, 
   );
+  $form['signature_details']['confirmation_required'] = array(
+    '#type' => 'hidden', 
+    '#value' => $node->confirmation_required, 
+  );
 
  $form['signature']['submitbutton'] = array(
   '#type' => 'submit', 
@@ -1627,7 +1640,7 @@ function petition_signature_form_submit(
  $signature->email = $form_state['values']['email'];
  $signature->remote_address = $form_state['values']['remote_address'];
  $signature->date = $form_state['values']['date'];
- $signature->confirmed = 0;
+ $signature->confirmed = ($form_state['values']['confirmation_required']) ? 0 : 1 ;
  $signature->language = $form_state['values']['language'];
  $signature->canbe_informed = $form_state['values']['canbe_informed'];
 	
@@ -1649,27 +1662,42 @@ function petition_signature_form_submit(
    VALUES (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s',  %d, '%s','%s', %d, %d, '%s')",
    $signature->cid, $signature->nid, $signature->name, $signature->firstname, $signature->title, $signature->address, $signature->zip, $signature->town, $signature->country, 
    $signature->tel, $signature->email, $signature->canbe_informed, $signature->language, $signature->remote_address, $signature->date, $signature->confirmed, $signature->hash);
-  
-  // IF the form was submitted from a translation, retrieve the nid of the translated version to send the email in the correct languge
-    if (empty($signature->language)) {
-      $nid = $signature->nid;
-    }
-    else {
-   $nid = db_result(db_query("SELECT nid FROM {petition_translation} WHERE tnid = %d AND language = '%s'",$signature->nid, $signature->language));
-   }
-  // SEND AN EMAiL WITH A LINK WHICH, WHEN CLICKED ON, WILL CALL 'petition_confirmation_page', AND REPLACE THE "NOT OK STATEMENT" with a "OK STATEMENT"
-  $node = node_load($nid);
-  $params['to'] = $signature->email;
-  $link = url('petition/signature/confirmation/'. $signature->nid .'/'. $signature->cid .'/'. $signature->date .'/'. $signature->hash, array('absolute' => TRUE));
-  $subject = empty($signature->language) ? $node->email_subject : $node->tsubjects[$signature->language];
-  $subject = t($subject, array('@petitiontitle' => $node->title, '@firstname' => $signature->firstname, '@name' => $signature->name, '@link' => $link, '@site' => variable_get('site_name', 'localhost')));
-  $params['subject'] = filter_xss($subject);
-  $body = empty($signature->language) ? $node->email_body : $node->tbodies[$signature->language];
-  $body = t($body, array('@petitiontitle' => $node->title, '@firstname' => $signature->firstname, '@name' => $signature->name, '@link' => $link, '@site' => variable_get('site_name', 'localhost')));
-  $params['body'] = filter_xss($body);
-  drupal_mail('petition', 'signature-confirm', $params['to'], language_default(), $params, variable_get('site_mail', NULL));
-  drupal_set_message(t("Thank you for signing the petition. An email has been sent to you. Please click on the enclosed link within 3 days in order to confirm your signature"));
- }
+
+  if ($form_state['values']['confirmation_required']) {
+    // IF the form was submitted from a translation, retrieve the nid of the translated version to send the email in the correct languge
+      if (empty($signature->language)) {
+        $nid = $signature->nid;
+      }
+      else {
+     $nid = db_result(db_query("SELECT nid FROM {petition_translation} WHERE tnid = %d AND language = '%s'",$signature->nid, $signature->language));
+     }
+    // SEND AN EMAiL WITH A LINK WHICH, WHEN CLICKED ON, WILL CALL 'petition_confirmation_page', AND REPLACE THE "NOT OK STATEMENT" with a "OK STATEMENT"
+    $node = node_load($nid);
+    $params['to'] = $signature->email;
+    $link = url('petition/signature/confirmation/'. $signature->nid .'/'. $signature->cid .'/'. $signature->date .'/'. $signature->hash, array('absolute' => TRUE));
+    $subject = empty($signature->language) ? $node->email_subject : $node->tsubjects[$signature->language];
+    $subject = t($subject, array('@petitiontitle' => $node->title, '@firstname' => $signature->firstname, '@name' => $signature->name, '@link' => $link, '@site' => variable_get('site_name', 'localhost')));
+    $params['subject'] = filter_xss($subject);
+    $body = empty($signature->language) ? $node->email_body : $node->tbodies[$signature->language];
+    $body = t($body, array('@petitiontitle' => $node->title, '@firstname' => $signature->firstname, '@name' => $signature->name, '@link' => $link, '@site' => variable_get('site_name', 'localhost')));
+    $params['body'] = filter_xss($body);
+    drupal_mail('petition', 'signature-confirm', $params['to'], language_default(), $params, variable_get('site_mail', NULL));
+    drupal_set_message(t("Thank you for signing the petition. An email has been sent to you. Please click on the enclosed link within 3 days in order to confirm your signature"));
+  }
+  else {
+    //counts the number of confirmed signature for the petition
+    $signature_count = db_result(db_query("SELECT COUNT(cid) FROM {petition_signatures} WHERE nid = %d AND confirmed = 1", $signature->nid));
+    db_query("UPDATE {petition} SET signatures = %d WHERE nid = %d" , $signature_count, $signature->nid);
+
+    //Get the position of the new signature in the petition and insert it
+    $position = db_result(db_query("SELECT MAX(position) FROM {petition_signatures} WHERE nid = %d", $signature->nid));
+    $position += 1;
+    db_query("UPDATE {petition_signatures} SET position = %d WHERE nid = %d AND cid = %d AND date = %d AND hash ='%s'", $position, $signature->nid, $signature->cid, $signature->date, $signature->hash);
+
+    drupal_set_message(t("Thank you for signing the petition."));
+  }
+
+  }
 
 }
 
