From acb08f517d22a6acd9525ced7ea3fcc2e80d29f0 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Mon, 15 Sep 2008 02:53:18 -0400
Subject: [PATCH] - Added 'sendmail_delay' option to restrict messages sending interval (#1484491)

---
 CHANGELOG                               |    4 ++++
 program/localization/en_US/messages.inc |    1 +
 config/main.inc.php.dist                |    3 +++
 program/localization/pl_PL/messages.inc |    1 +
 program/steps/mail/sendmail.inc         |   39 ++++++++++++++++++++++++---------------
 program/localization/en_GB/messages.inc |    1 +
 6 files changed, 34 insertions(+), 15 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index a82605e..6d3a3cf 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,10 @@
 CHANGELOG RoundCube Webmail
 ---------------------------
 
+2008/09/15 (alec)
+----------
+- Added 'sendmail_delay' option to restrict messages sending interval (#1484491)
+
 2008/09/12 (alec)
 ----------
 - Added vertical splitter for folders list resizing
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index fcf7e8f..ffa2d06 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -107,6 +107,9 @@
 // Log sent messages
 $rcmail_config['smtp_log'] = TRUE;
 
+// how many seconds must pass between emails sent by a user
+$rcmail_config['sendmail_delay'] = 0;
+
 // these cols are shown in the message list
 // available cols are: subject, from, to, cc, replyto, date, size, encoding, flag
 $rcmail_config['list_cols'] = array('subject', 'from', 'date', 'size', 'flag');
diff --git a/program/localization/en_GB/messages.inc b/program/localization/en_GB/messages.inc
index 255aac3..7ca8d28 100644
--- a/program/localization/en_GB/messages.inc
+++ b/program/localization/en_GB/messages.inc
@@ -40,6 +40,7 @@
 $messages['nocontactsfound'] = 'No contacts found';
 $messages['contactnotfound'] = 'The requested contact was not found';
 $messages['sendingfailed'] = 'Failed to send message';
+$messages['senttooquickly'] = 'You have to wait $sec sec. to sent the message';
 $messages['errorsavingsent'] = 'An error occured while saving sent message';
 $messages['errorsaving'] = 'An error occured while saving';
 $messages['errormoving'] = 'Could not move the message';
diff --git a/program/localization/en_US/messages.inc b/program/localization/en_US/messages.inc
index c4de6dd..9373be8 100644
--- a/program/localization/en_US/messages.inc
+++ b/program/localization/en_US/messages.inc
@@ -40,6 +40,7 @@
 $messages['nocontactsfound'] = 'No contacts found';
 $messages['contactnotfound'] = 'The requested contact was not found';
 $messages['sendingfailed'] = 'Failed to send message';
+$messages['senttooquickly'] = 'You have to wait $sec sec. to sent the message';
 $messages['errorsavingsent'] = 'An error occured while saving sent message';
 $messages['errorsaving'] = 'An error occured while saving';
 $messages['errormoving'] = 'Could not move the message';
diff --git a/program/localization/pl_PL/messages.inc b/program/localization/pl_PL/messages.inc
index 986a859..5b7f60f 100644
--- a/program/localization/pl_PL/messages.inc
+++ b/program/localization/pl_PL/messages.inc
@@ -45,6 +45,7 @@
 $messages['nocontactsfound'] = 'Nie znaleziono kontaktu!';
 $messages['contactnotfound'] = 'Szukany kontakt nie został odnaleziony';
 $messages['sendingfailed'] = 'Nie udało się wysłać wiadomości!';
+$messages['senttooquickly'] = 'Musisz poczekać $sec sek. aby móc wysłać tą wiadomość!';
 $messages['errorsavingsent'] = 'Wystąpił błąd podczas zapisu wysłanej wiadomości!';
 $messages['errorsaving'] = 'Wystąpił błąd podczas zapisu!';
 $messages['errormoving'] = 'Nie można przenieść wybranej wiadomości!';
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index 9efb0d7..543895d 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -25,6 +25,9 @@
 $OUTPUT->reset();
 $OUTPUT->framed = TRUE;
 
+$savedraft = !empty($_POST['_draft']) ? TRUE : FALSE;
+
+/****** checks ********/
 
 if (!isset($_SESSION['compose']['id'])) {
   raise_error(array('code' => 500, 'file' => __FILE__, 'message' => "Invalid compose ID"), true, false);
@@ -33,9 +36,22 @@
   $OUTPUT->send('iframe');
 }
 
+if (!$savedraft && empty($_POST['_to']) && empty($_POST['_cc']) && empty($_POST['_bcc']) && empty($_POST['_subject']) && $_POST['_message']) {
+  $OUTPUT->show_message('sendingfailed', 'error');
+  $OUTPUT->send('iframe');
+}
+
+if(!$savedraft && !empty($CONFIG['sendmail_delay'])) {
+  $wait_sec = time() - intval($CONFIG['sendmail_delay']) - intval($_SESSION['last_message_time']);
+  if($wait_sec < 0)
+    {
+    $OUTPUT->show_message('senttooquickly', 'error', array('sec' => $wait_sec * -1));
+    $OUTPUT->send('iframe');
+    }
+}
+
 
 /****** message sending functions ********/
-
 
 // get identity record
 function rcmail_get_identity($id)
@@ -116,23 +132,13 @@
   $mime_message->setHTMLBody($body);
 }
 
+
+/****** compose message ********/
+
 if (strlen($_POST['_draft_saveid']) > 3)
   $olddraftmessageid = get_input_value('_draft_saveid', RCUBE_INPUT_POST);
 
 $message_id = sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), $RCMAIL->config->mail_domain($_SESSION['imap_host']));
-$savedraft = !empty($_POST['_draft']) ? TRUE : FALSE;
-
-
-/****** check submission and compose message ********/
-
-
-if (!$savedraft && empty($_POST['_to']) && empty($_POST['_cc']) && empty($_POST['_bcc']) && empty($_POST['_subject']) && $_POST['_message'])
-  {
-  $OUTPUT->show_message("sendingfailed", 'error');
-  $OUTPUT->send('iframe');
-  return;
-  }
-
 
 // set default charset
 $input_charset = $OUTPUT->get_charset();
@@ -346,8 +352,11 @@
     {
     $OUTPUT->show_message("sendingfailed", 'error'); 
     $OUTPUT->send('iframe');
-    return;
     }
+
+  // save message sent time
+  if (!empty($CONFIG['sendmail_delay']))
+    $_SESSION['last_message_time'] = time();
   
   // set replied/forwarded flag
   if ($_SESSION['compose']['reply_uid'])

--
Gitblit v1.9.1