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