From 72dcd77228065f99347791482cba26fee71489d3 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Thu, 19 Apr 2012 06:28:23 -0400
Subject: [PATCH] Implemented: FS#2085 - Add a function to send emails to customers

---
 interface/web/client/lib/module.conf.php            |   10 +++
 interface/web/client/lib/lang/en_client_message.lng |   13 ++++
 interface/web/client/client_message.php             |  110 ++++++++++++++++++++++++++++++++++++
 interface/web/client/lib/lang/en.lng                |    2 
 interface/web/client/templates/client_message.htm   |   31 ++++++++++
 5 files changed, 166 insertions(+), 0 deletions(-)

diff --git a/interface/web/client/client_message.php b/interface/web/client/client_message.php
new file mode 100644
index 0000000..f555c99
--- /dev/null
+++ b/interface/web/client/client_message.php
@@ -0,0 +1,110 @@
+<?php
+/*
+Copyright (c) 2012, Till Brehm, ISPConfig UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+require_once('../../lib/config.inc.php');
+require_once('../../lib/app.inc.php');
+
+//* Check permissions for module
+$app->auth->check_module_permissions('client');
+
+//* This function is not available in demo mode
+if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
+
+$app->uses('tpl');
+
+$app->tpl->newTemplate('form.tpl.htm');
+$app->tpl->setInclude('content_tpl', 'templates/client_message.htm');
+
+//* load language file 
+$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_client_message.lng';
+include($lng_file);
+$app->tpl->setVar($wb);
+
+$msg = '';
+$error = '';
+
+//* Save data
+if(isset($_POST) && count($_POST) > 1) {
+	
+	//* Check values
+	if(!preg_match("/^\w+[\w\.\-\+]*\w{0,}@\w+[\w.-]*\w+\.[a-zA-Z0-9\-]{2,30}$/i", $_POST['sender'])) $error .= $wb['sender_invalid_error'].'<br />';
+	if(empty($_POST['subject'])) $error .= $wb['subject_invalid_error'].'<br />';
+	if(empty($_POST['message'])) $error .= $wb['message_invalid_error'].'<br />';
+	
+	//* Send message
+	if($error == '') {
+		//* Select all clients and resellers
+		if($_SESSION["s"]["user"]["typ"] == 'admin'){
+			$sql = "SELECT * FROM client WHERE email != ''";
+		} else {
+			$client_id = intval($_SESSION['s']['user']['client_id']);
+			if($client_id == 0) die('Invalid Client ID.');
+			$sql = "SELECT * FROM client WHERE email != '' AND parent_client_id = '$client_id'";
+		}
+		
+		//* Get clients
+		$clients = $app->db->queryAllRecords($sql);
+		if(is_array($clients)) {
+			$msg = $wb['email_sent_to_txt'].' ';
+			foreach($clients as $client) {
+				
+				//* Parse cleint details into message
+				$message = $_POST['message'];
+				foreach($client as $key => $val) {
+					$message = str_replace('{'.$key.'}', $val, $message);
+				}
+				
+				//* Send the email
+				$app->functions->mail($client['email'], $_POST['subject'], $message, $_POST['sender']);
+				$msg .= $client['email'].', ';
+			}
+			$msg = substr($msg,0,-2);
+		}
+		
+	} else {
+		$app->tpl->setVar('sender',$_POST['sender']);
+		$app->tpl->setVar('subject',$_POST['subject']);
+		$app->tpl->setVar('message',$_POST['message']);
+	}
+}
+
+if($_SESSION["s"]["user"]["typ"] == 'admin'){
+	$app->tpl->setVar('form_legend_txt',$wb['form_legend_admin_txt']);
+} else {
+	$app->tpl->setVar('form_legend_txt',$wb['form_legend_client_txt']);
+}
+
+$app->tpl->setVar('okmsg',$msg);
+$app->tpl->setVar('error',$error);
+
+$app->tpl_defaults();
+$app->tpl->pparse();
+
+
+?>
diff --git a/interface/web/client/lib/lang/en.lng b/interface/web/client/lib/lang/en.lng
index 4b10b2b..03e36b2 100644
--- a/interface/web/client/lib/lang/en.lng
+++ b/interface/web/client/lib/lang/en.lng
@@ -12,4 +12,6 @@
 $wb["error_has_clients"] = 'This reseller has clients. Delete the clients of the reseller first.';
 $wb['add_additional_template_txt'] = 'Add additional template';
 $wb['delete_additional_template_txt'] = 'Delete additional template';
+$wb['Messaging'] = 'Messaging';
+$wb['Send Email'] = 'Send Email';
 ?>
\ No newline at end of file
diff --git a/interface/web/client/lib/lang/en_client_message.lng b/interface/web/client/lib/lang/en_client_message.lng
new file mode 100644
index 0000000..4f4ef37
--- /dev/null
+++ b/interface/web/client/lib/lang/en_client_message.lng
@@ -0,0 +1,13 @@
+<?php
+$wb["btn_send_txt"] = 'Send email';
+$wb["btn_cancel_txt"] = 'Cancel';
+$wb["sender_txt"] = 'Sender email address';
+$wb["subject_txt"] = 'Subject';
+$wb["message_txt"] = 'Message';
+$wb["form_legend_client_txt"] = 'Send email message to all clients.';
+$wb["form_legend_admin_txt"] = 'Send email message to all clients and resellers.';
+$wb["sender_invalid_error"] = 'Sender email invalid.';
+$wb["subject_invalid_error"] = 'Subject is empty.';
+$wb["message_invalid_error"] = 'Message is empty.';
+$wb["email_sent_to_txt"] = 'Email sent to:';
+?>
diff --git a/interface/web/client/lib/module.conf.php b/interface/web/client/lib/module.conf.php
index f37461d..3e36a26 100644
--- a/interface/web/client/lib/module.conf.php
+++ b/interface/web/client/lib/module.conf.php
@@ -52,9 +52,19 @@
 $module["nav"][] = array(	'title'	=> 'Resellers',
 							'open' 	=> 1,
 							'items'	=> $items);
+
+unset($items);
 }
 
+$items[] = array( 'title' 	=> "Send email",
+				  'target' 	=> 'content',
+				  'link'	=> 'client/client_message.php',
+				  'html_id' => 'reseller_add');
 
+$module["nav"][] = array(	'title'	=> 'Messaging',
+							'open' 	=> 1,
+							'items'	=> $items);
 
+unset($items);
 
 ?>
\ No newline at end of file
diff --git a/interface/web/client/templates/client_message.htm b/interface/web/client/templates/client_message.htm
new file mode 100644
index 0000000..cc2183e
--- /dev/null
+++ b/interface/web/client/templates/client_message.htm
@@ -0,0 +1,31 @@
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="form_desc_txt"></p>
+
+<div class="panel panel_client">
+  <div class="pnl_formsarea">
+    <fieldset class="inlineLabels"><legend>{tmpl_var name='form_legend_txt'}</legend>
+      <tmpl_if name="okmsg">
+	<div id="OKMsg"><p><tmpl_var name="okmsg"></p></div>
+  </tmpl_if>
+  <tmpl_if name="error">
+	<div id="errorMsg"><h3>ERROR</h3><ol><tmpl_var name="error"></ol></div>
+  </tmpl_if>
+	  <div class="ctrlHolder">
+      	<label for="sender">{tmpl_var name='sender_txt'}</label>
+        <input name="sender" id="sender" value="{tmpl_var name='sender'}" style="width:500px" size="30" maxlength="255" type="text" class="textInput" />
+	  </div>
+	  <div class="ctrlHolder">
+      	<label for="subject">{tmpl_var name='subject_txt'}</label>
+        <input name="subject" id="subject" value="{tmpl_var name='subject'}" style="width:500px" size="30" maxlength="255" type="text" class="textInput" />
+	  </div>
+      <div class="ctrlHolder">
+      	<label for="message">{tmpl_var name='message_txt'}</label>
+        <textarea name="message" id="message" rows='' cols='' style="width:500px">{tmpl_var name='message'}</textarea>
+      </div>
+    </fieldset>
+    <div class="buttonHolder buttons">
+      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_send_txt'}" onClick="submitForm('pageForm','client/client_message.php');"><span>{tmpl_var name='btn_send_txt'}</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+    </div>
+  </div>
+</div>

--
Gitblit v1.9.1