Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Uploaded for archiving purposes

  • Loading branch information...
commit 1b47152001ec57fdadcdceb77a8600cb355174e3 0 parents
@rickterheide rickterheide authored
51 actions/mass_mailouts/progress.php
@@ -0,0 +1,51 @@
+<?php
+/**
+* Mass Mail outs.
+*
+* Get the progress of sending all the mails
+*
+* @package mass_mailouts
+* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+* @author ColdTrick IT Solutions
+* @copyright ColdTrick 2009
+* @link http://www.coldtrick.com/
+*/
+
+ admin_gatekeeper();
+
+ $user = get_loggedin_user();
+
+ $progress = $user->mass_mailouts_progress;
+
+ $result = array();
+
+ if(!empty($progress)){
+ $ts = time();
+ $token = generate_action_token($ts);
+
+ list($progress, $text) = explode("|", $progress);
+
+ if($progress == 100){
+ remove_metadata($user->guid, "mass_mailouts_progress");
+ }
+
+ $result["result"] = true;
+ $result["progress"] = $progress;
+ $result["text"] = $text;
+ } else {
+ $result["result"] = false;
+ }
+
+ // Need new security tokens
+ $result["ts"] = $ts;
+ $result["token"] = $token;
+
+ // Sent correct headers
+ header("Content-Type: application/json; charset=UTF-8");
+ header("Cache-Control: no-cache");
+ header("Pragma: no-cache");
+
+ echo json_encode($result);
+
+ exit();
+?>
73 actions/mass_mailouts/send.php
@@ -0,0 +1,73 @@
+<?php
+ /**
+ * Mass Mail outs.
+ *
+ * @package mass_mailouts
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author ColdTrick IT Solutions
+ * @copyright ColdTrick 2009
+ * @link http://www.coldtrick.com/
+ */
+
+ global $CONFIG;
+
+ action_gatekeeper();
+ admin_gatekeeper();
+
+ $subject = get_input('email_subject');
+ $text = get_input("email_text", "", false);
+ $methods_override = get_input("methods_override", ""); // override default notify
+
+ if (!empty($subject) && !empty($text)) {
+ $count = get_entities("user", "", 0, null, null, null, true);
+ $users = get_entities("user", "", 0, null, $count);
+
+ $failure = 0;
+ $succes = 0;
+
+ $curUser = get_loggedin_user();
+ unset($curUser->mass_mailouts_progress);
+
+ foreach($users as $user){
+ set_time_limit(5);
+
+ $newSubject = str_ireplace("[displayname]", $user->name, $subject);
+ $newSubject = str_ireplace("[profile]", "<a href='" . $user->getUrl() . "'>" . $user->getUrl() . "</a>", $newSubject);
+ $newSubject = str_ireplace("[username]", $user->username, $newSubject);
+ $newSubject = str_ireplace("[email]", $user->email, $newSubject);
+ $newSubject = str_ireplace("&nbsp;", "", $newSubject);
+
+ $newText = str_ireplace("[displayname]", $user->name, $text);
+ $newText = str_ireplace("[profile]", "<a href='" . $user->getUrl() . "'>" . $user->getUrl() . "</a>", $newText);
+ $newText = str_ireplace("[username]", $user->username, $newText);
+ $newText = str_ireplace("[email]", $user->email, $newText);
+ $newText = str_ireplace("&nbsp;", "", $newText);
+
+ $result = notify_user($user->guid, $user->site_guid, $newSubject, $newText, null, $methods_override);
+
+ if($result["email"] === false){
+ $failure++;
+ } else {
+ $succes++;
+ }
+
+ $percentage = round((($succes + $failure) / $count) * 100);
+
+ $curUser->mass_mailouts_progress = $percentage . "|" . sprintf(elgg_echo("mass_mailouts:progress:text"), ($succes + $failure), $count);
+ }
+
+ if($failure == 0){
+ system_message(sprintf(elgg_echo("mass_mailouts:success"), $succes));
+ } else {
+ if($failure == $count){
+ register_error(elgg_echo("mass_mailouts:failure"));
+ } else {
+ register_error(sprintf(elgg_echo("mass_mailouts:some_errors"), $failure, $count));
+ }
+ }
+ } else {
+ register_error(elgg_echo("mass_mailouts:invalid_input"));
+ }
+
+ exit();
+?>
BIN  images/Thumbs.db
Binary file not shown
BIN  images/progressbar.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  images/progressbg_black.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  images/progressbg_green.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  images/progressbg_orange.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  images/progressbg_red.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  images/progressbg_yellow.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
28 index.php
@@ -0,0 +1,28 @@
+<?php
+/**
+* Mass Mail outs.
+*
+* @package mass_mailouts
+* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+* @author ColdTrick IT Solutions
+* @copyright ColdTrick 2009
+* @link http://www.coldtrick.com/
+*/
+
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+admin_gatekeeper();
+set_context('admin');
+
+// Set admin user for user block
+set_page_owner($_SESSION['guid']);
+
+$title = elgg_view_title(elgg_echo('mass_mailouts'));
+$form = elgg_view('mass_mailouts/form');
+
+$page_data = $title . $form;
+
+// Display main admin menu
+page_draw(elgg_echo('mass_mailouts'), elgg_view_layout("two_column_left_sidebar", '', $page_data));
+
+?>
144 js/jquery.progressbar.js
@@ -0,0 +1,144 @@
+/*
+ * jQuery Progress Bar plugin
+ * Version 1.1.0 (06/20/2008)
+ * @requires jQuery v1.2.1 or later
+ *
+ * Copyright (c) 2008 Gary Teo
+ * http://t.wits.sg
+
+USAGE:
+ $(".someclass").progressBar();
+ $("#progressbar").progressBar();
+ $("#progressbar").progressBar(45); // percentage
+ $("#progressbar").progressBar({showText: false }); // percentage with config
+ $("#progressbar").progressBar(45, {showText: false }); // percentage with config
+*/
+(function($) {
+ $.extend({
+ progressBar: new function() {
+
+ this.defaults = {
+ increment : 2,
+ speed : 15,
+ showText : true, // show text with percentage in next to the progressbar? - default : true
+ width : 120, // Width of the progressbar - don't forget to adjust your image too!!!
+ boxImage : 'images/progressbar.gif', // boxImage : image around the progress bar
+ barImage : {
+ 0: 'images/progressbg_red.gif',
+ 30: 'images/progressbg_orange.gif',
+ 70: 'images/progressbg_green.gif'
+ }, // Image to use in the progressbar. Can be a single image too: 'images/progressbg_green.gif'
+ height : 12 // Height of the progressbar - don't forget to adjust your image too!!!
+ };
+
+ /* public methods */
+ this.construct = function(arg1, arg2) {
+ var argpercentage = null;
+ var argconfig = null;
+
+ if (arg1 != null) {
+ if (!isNaN(arg1)) {
+ argpercentage = arg1;
+ if (arg2 != null) {
+ argconfig = arg2; }
+ } else {
+ argconfig = arg1;
+ }
+ }
+
+ return this.each(function(child) {
+ var pb = this;
+ if (argpercentage != null && this.bar != null && this.config != null) {
+ this.config.tpercentage = argpercentage;
+ if (argconfig != null)
+ pb.config = $.extend(this.config, argconfig);
+ } else {
+ var $this = $(this);
+ var config = $.extend({}, $.progressBar.defaults, argconfig);
+ var percentage = argpercentage;
+ if (argpercentage == null)
+ var percentage = $this.html().replace("%",""); // parsed percentage
+
+
+ $this.html("");
+ var bar = document.createElement('img');
+ var text = document.createElement('span');
+ bar.id = this.id + "_percentImage";
+ text.id = this.id + "_percentText";
+ bar.title = percentage + "%";
+ bar.alt = percentage + "%";
+ bar.src = config.boxImage;
+ bar.width = config.width;
+ var $bar = $(bar);
+ var $text = $(text);
+
+ this.bar = $bar;
+ this.ntext = $text;
+ this.config = config;
+ this.config.cpercentage = 0;
+ this.config.tpercentage = percentage;
+
+ $bar.css("width", config.width + "px");
+ $bar.css("height", config.height + "px");
+ $bar.css("background-image", "url(" + getBarImage(this.config.cpercentage, config) + ")");
+ $bar.css("padding", "0");
+ $bar.css("margin", "0");
+ $this.append($bar);
+ $this.append($text);
+ }
+
+ function getBarImage (percentage, config) {
+ var image = config.barImage;
+ if (typeof(config.barImage) == 'object') {
+ for (var i in config.barImage) {
+ if (percentage >= parseInt(i)) {
+ image = config.barImage[i];
+ } else { break; }
+ }
+ }
+ return image;
+ }
+
+ var t = setInterval(function() {
+ var config = pb.config;
+ var cpercentage = parseInt(config.cpercentage);
+ var tpercentage = parseInt(config.tpercentage);
+ var increment = parseInt(config.increment);
+ var bar = pb.bar;
+ var text = pb.ntext;
+ var pixels = config.width / 100; // Define how many pixels go into 1%
+
+ bar.css("background-image", "url(" + getBarImage(cpercentage, config) + ")");
+ bar.css("background-position", (((config.width * -1)) + (cpercentage * pixels)) + 'px 50%');
+
+ if (config.showText)
+ text.html(" " + Math.round(cpercentage) + "%");
+
+ if (cpercentage > tpercentage) {
+ if (cpercentage - increment < tpercentage) {
+ pb.config.cpercentage = 0 + tpercentage
+ } else {
+ pb.config.cpercentage -= increment;
+ }
+ }
+ else if (pb.config.cpercentage < pb.config.tpercentage) {
+ if (cpercentage + increment > tpercentage) {
+ pb.config.cpercentage = tpercentage
+ } else {
+ pb.config.cpercentage += increment;
+ }
+ }
+ else {
+ clearInterval(t);
+ }
+ }, pb.config.speed);
+ });
+ };
+ }
+ });
+
+ $.fn.extend({
+ progressBar: $.progressBar.construct
+ });
+
+})(jQuery);
42 languages/en.php
@@ -0,0 +1,42 @@
+<?php
+ /**
+ * Mass Mail outs.
+ *
+ * @package mass_mailouts
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author ColdTrick IT Solutions
+ * @copyright ColdTrick 2009
+ * @link http://www.coldtrick.com/
+ */
+
+ $english = array(
+ /**
+ * Menu items and titles
+ */
+ 'mass_mailouts' => 'Mass Mailing',
+ 'mass_mailouts:email_text' => 'E-mail Message:',
+ 'mass_mailouts:subject' => 'E-mail Subject:',
+ 'mass_mailouts:methods_override' => 'Select the method used for sending this message',
+ 'mass_mailouts:methods_override:site' => 'Send to site',
+ 'mass_mailouts:methods_override:email' => 'Send to mail',
+ 'mass_mailouts:methods_override:user_preference' => 'User defined method',
+
+ 'mass_mailouts:send' => 'Send E-mail',
+
+ 'mass_mailouts:footnote' => "You can use the following tags to personalize the emails (can be used is Subject and in Text):",
+ 'mass_mailouts:footnote:displayname' => "for the user's full name (display name)",
+ 'mass_mailouts:footnote:profile' => "for the link to the user's Profile page",
+ 'mass_mailouts:footnote:username' => "for the user's username",
+ 'mass_mailouts:footnote:email' => "for the user's e-mail address",
+
+ 'mass_mailouts:invalid_input' => "Incorrect input provided, you need a Subject and some Text",
+ 'mass_mailouts:success' => 'E-mail has been sent succesfully to %s users',
+ 'mass_mailouts:some_errors' => 'E-mail failed to be send to some of the users (failure: %s / succes: %s)',
+ 'mass_mailouts:failure' => 'E-mail failed to be send',
+
+ 'mass_mailouts:progress:text' => "Send %s of %s",
+ 'mass_mailouts:progress:window_title' => "Mass Mailouts progress",
+ );
+
+ add_translation("en", $english);
+?>
36 languages/nl.php
@@ -0,0 +1,36 @@
+<?php
+ /**
+ * Mass Mail outs.
+ *
+ * @package mass_mailouts
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author ColdTrick IT Solutions
+ * @copyright ColdTrick 2009
+ * @link http://www.coldtrick.com/
+ */
+
+ $dutch = array(
+ /**
+ * Menu items and titles
+ */
+ 'mass_mailouts' => 'Mass Mailouts',
+ 'mass_mailouts:email_text' => 'E-mail Bericht:',
+ 'mass_mailouts:subject' => 'E-mail Onderwerp:',
+ 'mass_mailouts:send' => 'Verstuur E-mail',
+ 'mass_mailouts:footnote' => "Je kunt de volgende tags gebruiken om de e-mails te personalizeren (kan worden gebruikt in Onderwerp en Tekst):",
+ 'mass_mailouts:footnote:displayname' => "voor de volledige naam van de gebruiker (weergave naam)",
+ 'mass_mailouts:footnote:profile' => "voor de link naar het profiel van de gebruiker",
+ 'mass_mailouts:footnote:username' => "voor de gebruikernaam",
+ 'mass_mailouts:footnote:email' => "voor het e-mailadres van de gebruiker",
+
+ 'mass_mailouts:invalid_input' => "Onjuiste invoer, je moet een Onderwerp en Text opgeven",
+ 'mass_mailouts:success' => 'E-mail is succesvol verstuurd aan %s gebruikers',
+ 'mass_mailouts:some_errors' => 'E-mail is niet aan alle gebruikers verstuurd (fouten: %s / succes: %s)',
+ 'mass_mailouts:failure' => 'E-mail is niet verstuurd',
+
+ 'mass_mailouts:progress:text' => "%s van %s verzonden",
+ 'mass_mailouts:progress:window_title' => "Mass Mailouts voortgang",
+ );
+
+ add_translation("nl", $dutch);
+?>
52 manifest.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest>
+ <field key="author" value="ColdTrick IT Solutions" />
+ <field key="version" value="1.6.1" />
+ <field key="description" value="Send personalized messages to (all) site users" />
+ <field key="website" value="http://www.coldtrick.com/" />
+ <field key="copyright" value="(C) ColdTrick 2009" />
+ <field key="licence" value="GNU Public License version 2" />
+ <field key="elgg_version" value="2009030702" />
+</plugin_manifest>
+<!--
+
+====================
+Version History:
+====================
+1.6.1:
+ - changed: progress window data based on json
+ - fixed: Elgg 1.7 security requirements
+
+1.6:
+ - added: support to override delivery method (email, site, userpreference)
+
+1.5:
+ - changed: progress window
+ - changed: no longer using GET but POST instead, can give longer texts
+
+1.3:
+ - Sending now from a new window
+ - Sending progress indicator
+ - Small translation changes
+
+1.1.1:
+ - Fixed test setup in send.php (thanks Johno)
+
+1.1:
+ - Fixed text error in translation file ([profile] instead of [profilepage])
+ - Cleaned up the text to be send some further
+
+1.0:
+ - First version based on original work from Brucepro
+ - Redid some coding for cleanup
+ - Now using Elgg mailfunction, not is own
+
+====================================================================
+TO DO:
+- Send mail using cron
+
+====================================================================
+Known Issue:
+- Slow with many users (for mail)
+
+-->
93 progressWindow.php
@@ -0,0 +1,93 @@
+<?php
+ global $CONFIG;
+
+ action_gatekeeper();
+ admin_gatekeeper();
+
+ $email_subject = get_input("email_subject");
+ $email_text = get_input("email_text", "", false);
+ $methods_override = get_input("methods_override", "");
+
+ $ts = time();
+ $token = generate_action_token($ts);
+
+ if(!empty($email_subject) && !empty($email_text)){
+ $formBody = elgg_view("input/hidden", array("internalname" => "email_subject", "value" => $email_subject));
+ $formBody .= elgg_view("input/hidden", array("internalname" => "email_text", "value" => $email_text));
+ $formBody .= elgg_view("input/hidden", array("internalname" => "methods_override", "value" => $methods_override));
+
+ $form = elgg_view("input/form", array("internalid" => "massmailForm", "action" => $CONFIG->wwwroot . "action/mass_mailouts/send", "body" => $formBody));
+ } else {
+ $close = "<script type='text/javascript'>window.close();</script>";
+ echo $close;
+ }
+
+?>
+<html>
+ <head>
+ <title><?php echo elgg_echo("mass_mailouts:progress:window_title"); ?></title>
+ <script type="text/javascript" src="<?php echo $CONFIG->wwwroot; ?>vendors/jquery/jquery-1.3.2.min.js"></script>
+ <script type="text/javascript" src="<?php echo $CONFIG->wwwroot; ?>mod/mass_mailouts/js/jquery.progressbar.js"></script>
+ <script type='text/javascript'>
+ var orgTitle = "<?php echo elgg_echo("mass_mailouts:progress:window_title"); ?>";
+ var ts = <?php echo $ts; ?>;
+ var token = "<?php echo $token; ?>";
+
+ $(document).ready(function(){
+ checkProgress();
+
+ $('#massmailForm').submit(function(){
+ $.post(this.action, $('#' + this.id).serialize(), function(data){
+ // don't do anything
+ });
+
+ return false;
+ });
+
+ $('#massmailForm').submit();
+ });
+
+ function checkProgress(){
+ $.getJSON("<?php echo $CONFIG->wwwroot; ?>action/mass_mailouts/progress?__elgg_ts=" + ts + "&__elgg_token=" + token, function(data){
+ if(data.result){
+ $('#progress').progressBar(data.progress, { showText: false,
+ boxImage: '<?php echo $CONFIG->wwwroot; ?>/mod/mass_mailouts/images/progressbar.gif',
+ barImage: '<?php echo $CONFIG->wwwroot; ?>/mod/mass_mailouts/images/progressbg_green.gif'
+ });
+ $('#progressText').html(data.text);
+
+ document.title = orgTitle + " (" + data.progress + "%)";
+
+ if(parseInt(data.progress) >= 100){
+ setTimeout("window.close()", 10000);
+ }else {
+ setTimeout("checkProgress()", 1000);
+ }
+ } else {
+ setTimeout("checkProgress()", 1000);
+ }
+
+ ts = data.ts;
+ token = data.token;
+ });
+
+ }
+ </script>
+ </head>
+ <body>
+ <div id='all'>
+ <center>
+ <div id='sending'>
+ <img src="<?php echo $CONFIG->wwwroot; ?>_graphics/ajax_loader.gif" alt="sending" title="sending" />
+ <br />
+ <br />
+ </div>
+ <div id="progress"></div>
+ <div id="progressText"></div>
+ <div id="form" style="display:none;">
+ <?php echo $form; ?>
+ </div>
+ </center>
+ </div>
+ </body>
+</html>
58 start.php
@@ -0,0 +1,58 @@
+<?php
+ /**
+ * Mass Mail outs.
+ *
+ * @package mass_mailouts
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author ColdTrick IT Solutions
+ * @copyright ColdTrick 2009
+ * @link http://www.coldtrick.com/
+ */
+ global $CONFIG;
+
+ /**
+ * Initialise and set up the menus.
+ *
+ */
+ function mass_mailouts_init(){
+ // Extend CSS
+ extend_view("css", "mass_mailouts/css");
+
+ // Register a page handler, so we can have nice URLs
+ register_page_handler('mass_mailouts','mass_mailouts_page_handler');
+ }
+
+ /**
+ * Adding to the admin menu
+ *
+ */
+ function mass_mailouts_pagesetup(){
+ if (get_context() == 'admin' && isadminloggedin()) {
+ global $CONFIG;
+ add_submenu_item(elgg_echo('mass_mailouts'), $CONFIG->wwwroot . 'pg/mass_mailouts/');
+ }
+ }
+
+ /**
+ * page handler
+ *
+ * @param array $page Array of page elements, forwarded by the page handling mechanism
+ */
+ function mass_mailouts_page_handler($page) {
+ global $CONFIG;
+
+ if($page[0] == "progressWindow"){
+ include($CONFIG->pluginspath . "mass_mailouts/progressWindow.php");
+ } else {
+ include($CONFIG->pluginspath . "mass_mailouts/index.php");
+ }
+ }
+
+ // Initialise log browser
+ register_elgg_event_handler('init','system','mass_mailouts_init');
+ register_elgg_event_handler('pagesetup','system','mass_mailouts_pagesetup');
+
+ // Register Action
+ register_action("mass_mailouts/send", false, $CONFIG->pluginspath . "mass_mailouts/actions/mass_mailouts/send.php", true);
+ register_action("mass_mailouts/progress", false, $CONFIG->pluginspath . "mass_mailouts/actions/mass_mailouts/progress.php", true);
+?>
8 views/default/mass_mailouts/css.php
@@ -0,0 +1,8 @@
+<?php
+ global $CONFIG;
+
+?>
+.footnote {
+ color: grey;
+ font-size: 80%;
+}
64 views/default/mass_mailouts/form.php
@@ -0,0 +1,64 @@
+<?php
+
+ $methods_override = array("email" => elgg_echo("mass_mailouts:methods_override:email"), "" => elgg_echo("mass_mailouts:methods_override:user_preference"));
+ if(is_plugin_enabled("messages")){
+ $methods_override["site"] = elgg_echo("mass_mailouts:methods_override:site");
+ }
+
+ ksort($methods_override);
+
+
+ $form = "";
+
+ $form .= "<p>";
+ $form .= elgg_echo('mass_mailouts:subject');
+ $form .= elgg_view('input/text',array('internalname' => 'email_subject'));
+ $form .= "</p>";
+
+ $form .= "<p>";
+ $form .= elgg_echo('mass_mailouts:email_text');
+ $form .= elgg_view('input/longtext',array('internalname' => 'email_text'));
+ $form .= "</p>";
+
+ $form .= "<p>";
+ $form .= elgg_echo("mass_mailouts:methods_override");
+ $form .= elgg_view("input/pulldown", array("internalname" => "methods_override", "options_values" => $methods_override));
+ $form .= "</p>";
+
+ $form .= elgg_view('input/submit',array('value' => elgg_echo('mass_mailouts:send')));
+
+ $wrappedform2 = elgg_view('input/form',array(
+ 'body' => $form,
+ 'internalid' => "massmailForm",
+ 'action' => $vars['url'] . "pg/mass_mailouts/progressWindow"
+ ));
+
+?>
+<script type="text/javascript">
+
+ $(document).ready(function(){
+ $('#massmailForm').attr("target", "_blank");
+
+ $('#massmailForm').submit(function(){
+ setTimeout("clearForm()", 500);
+
+ return true;
+ });
+ });
+
+ function clearForm(){
+ $('#massmailForm').each(function(){
+ this.reset();
+ });
+ }
+</script>
+<div id="mass_mailouts_email_area" class="contentWrapper">
+ <?php echo $wrappedform2; ?>
+ <p class="footnote">
+ <?php echo elgg_echo("mass_mailouts:footnote"); ?><br />
+ <b>[displayname]</b>: <?php echo elgg_echo("mass_mailouts:footnote:displayname"); ?><br />
+ <b>[profile]</b>: <?php echo elgg_echo("mass_mailouts:footnote:profile"); ?><br />
+ <b>[username]</b>: <?php echo elgg_echo("mass_mailouts:footnote:username"); ?><br />
+ <b>[email]</b>: <?php echo elgg_echo("mass_mailouts:footnote:email"); ?><br />
+ </p>
+</div>
Please sign in to comment.
Something went wrong with that request. Please try again.