From bfe853e24d262464810f1d5872280995fadccd18 Mon Sep 17 00:00:00 2001
From: Seth Meranda <smeranda2@unl.edu>
Date: Mon, 28 Sep 2009 15:27:52 +0000
Subject: [PATCH] Added mass mailout plugin for testing.

---
 .../actions/mass_mailouts/progressWindow.php  |  72 +++++++++
 .../actions/mass_mailouts/send.php            |  93 +++++++++++
 plugins/mass_mailouts/images/progressbar.gif  | Bin 0 -> 120 bytes
 .../mass_mailouts/images/progressbg_black.gif | Bin 0 -> 1626 bytes
 .../mass_mailouts/images/progressbg_green.gif | Bin 0 -> 1308 bytes
 .../images/progressbg_orange.gif              | Bin 0 -> 1308 bytes
 .../mass_mailouts/images/progressbg_red.gif   | Bin 0 -> 1308 bytes
 .../images/progressbg_yellow.gif              | Bin 0 -> 1308 bytes
 plugins/mass_mailouts/index.php               |  28 ++++
 .../mass_mailouts/js/jquery.progressbar.js    | 144 ++++++++++++++++++
 plugins/mass_mailouts/languages/en.php        |  37 +++++
 plugins/mass_mailouts/languages/nl.php        |  36 +++++
 plugins/mass_mailouts/manifest.xml            |  10 ++
 plugins/mass_mailouts/progress.php            |  20 +++
 plugins/mass_mailouts/start.php               |  61 ++++++++
 plugins/mass_mailouts/version.txt             |  36 +++++
 .../views/default/input/recipienttype.php     |  25 +++
 .../views/default/mass_mailouts/css.php       |   8 +
 .../views/default/mass_mailouts/form.php      |  66 ++++++++
 19 files changed, 636 insertions(+)
 create mode 100644 plugins/mass_mailouts/actions/mass_mailouts/progressWindow.php
 create mode 100644 plugins/mass_mailouts/actions/mass_mailouts/send.php
 create mode 100644 plugins/mass_mailouts/images/progressbar.gif
 create mode 100644 plugins/mass_mailouts/images/progressbg_black.gif
 create mode 100644 plugins/mass_mailouts/images/progressbg_green.gif
 create mode 100644 plugins/mass_mailouts/images/progressbg_orange.gif
 create mode 100644 plugins/mass_mailouts/images/progressbg_red.gif
 create mode 100644 plugins/mass_mailouts/images/progressbg_yellow.gif
 create mode 100644 plugins/mass_mailouts/index.php
 create mode 100644 plugins/mass_mailouts/js/jquery.progressbar.js
 create mode 100644 plugins/mass_mailouts/languages/en.php
 create mode 100644 plugins/mass_mailouts/languages/nl.php
 create mode 100644 plugins/mass_mailouts/manifest.xml
 create mode 100644 plugins/mass_mailouts/progress.php
 create mode 100644 plugins/mass_mailouts/start.php
 create mode 100644 plugins/mass_mailouts/version.txt
 create mode 100644 plugins/mass_mailouts/views/default/input/recipienttype.php
 create mode 100644 plugins/mass_mailouts/views/default/mass_mailouts/css.php
 create mode 100644 plugins/mass_mailouts/views/default/mass_mailouts/form.php

diff --git a/plugins/mass_mailouts/actions/mass_mailouts/progressWindow.php b/plugins/mass_mailouts/actions/mass_mailouts/progressWindow.php
new file mode 100644
index 00000000..b523ddba
--- /dev/null
+++ b/plugins/mass_mailouts/actions/mass_mailouts/progressWindow.php
@@ -0,0 +1,72 @@
+<?php 
+global $CONFIG;
+global $SESSION;
+action_gatekeeper();
+admin_gatekeeper();
+
+$email_subject = urldecode(get_input("email_subject"));
+$email_text = urldecode(get_input("email_text"));
+$recipients = urldecode(get_input("recipients"));
+
+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" => "recipients", "value" => $recipients));
+	
+	$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;
+}
+
+?>
+<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'>
+	$(document).ready(function(){
+		$('#massmailForm').submit(function(){
+			$.post(this.action, $('#' + this.id).serialize(), function(data){
+				// do nothing
+			});
+
+			setTimeout("checkProgress()", 1000);
+			
+			return false;
+		});
+
+		$('#massmailForm').submit();
+	});
+
+	function checkProgress(){
+		$.post("<?php echo $CONFIG->wwwroot; ?>pg/mass_mailouts/progress", { is_action: "yes" }, function(data){
+			if(data){
+				var progress = data.split("|"); 
+				$('#progress').progressBar(progress[0], { 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(progress[1]);
+				
+				if(parseInt(progress[0]) >= 100){
+					setTimeout("window.close()", 10000);
+				}else {
+					setTimeout("checkProgress()", 1000);
+				}
+			}
+		});
+		
+	}
+</script>
+<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;
+		ob_flush(); //this is needed to ensure that headers are already sent to avoid the progress page redirecting
+		?>
+	</div>
+	</center>
+</div>
\ No newline at end of file
diff --git a/plugins/mass_mailouts/actions/mass_mailouts/send.php b/plugins/mass_mailouts/actions/mass_mailouts/send.php
new file mode 100644
index 00000000..1b49d990
--- /dev/null
+++ b/plugins/mass_mailouts/actions/mass_mailouts/send.php
@@ -0,0 +1,93 @@
+<?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");
+$recipients = get_input("recipients");
+$type = substr($recipients, 0, 1);
+$id = substr($recipients, 1); 
+
+if (!empty($subject) && !empty($text)) {
+	switch($type) {
+		case "t": //all
+			$count = get_entities("user", "", 0, "", 0, 0, true);
+			$users = get_entities("user", "", 0, "", $count);
+			break;
+		case "c": //friends
+			$users = get_entities_from_relationship('friend', get_loggedin_userid(), $inverse_relationship, 'user', $subtype, $owner_guid, "", 10, 0);
+			$count = count($users);
+			break;
+		case "g": //groups
+			$users = get_group_members($id,200, 0, 0 , false);
+			$count = count($users);
+			break;
+		case "l": //list of friends
+			$users = get_members_of_access_collection($id, false);
+			$count = count($users);
+			break;
+		default:
+			$users = array();
+			register_error(elgg_echo("mass_mailouts:failure"));
+			break;
+	}
+	
+	$failure = 0;
+	$succes = 0;
+	
+	$curUser = get_loggedin_user();
+	remove_metadata($curUser->guid, "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, "email");
+		
+		if($result["email"] === false){
+			$failure++;
+		} else {
+			$succes++;
+		}
+		
+		$curUser->mass_mailouts_progress = ((($succes + $failure) / $count) * 100) . "|" . 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"));
+}
+
+forward($_SERVER["HTTP_REFERER"]);
+?>
\ No newline at end of file
diff --git a/plugins/mass_mailouts/images/progressbar.gif b/plugins/mass_mailouts/images/progressbar.gif
new file mode 100644
index 0000000000000000000000000000000000000000..abe588c15c4eda53bcecc0ab00434c925cb1b45f
GIT binary patch
literal 120
zcmV-;0EhoaNk%w1VS4}!0FeLyVr61;d3%F}ga7~kA^8LW2LJ;AEC2ui0DAxo0006>
zT!5*|?GK}zlnMie-n{z{hT=$;rU?ky$+qqbpGZvC_U+C1&iA733kq?-q4CHnBA3kE
astJWEqtqebP|XTcn2Prc4vQz30suSWax&ro

literal 0
HcmV?d00001

diff --git a/plugins/mass_mailouts/images/progressbg_black.gif b/plugins/mass_mailouts/images/progressbg_black.gif
new file mode 100644
index 0000000000000000000000000000000000000000..74fd1f9b3e052e2ca18058526c39f6eaef580cba
GIT binary patch
literal 1626
zcmZ?wbhEHb{J_A&(9XcX%*^cP=jZS5KWEOIsZ*!+_xJbq_I7u7Po6xvt*x!5rlz8z
zqNJpxtgNh|p`od%simc*s;a84uI|&PPaPc{A3uIfN=iydNQjM%jgODd%*;$nOG{5r
zPf1CMh=_=aihB3%-TU|Nqobqm-@kwF-n}bVu3Wx+`ND+@=g*&K7zLvtFwh~O19AW;
zFR*j`V_@Wv@z}87U^9oXR?LYF3lFz5DtXQE*tqCuw*)hXz=S}h<9!PDO?xyhJz`*D
z4O(VWut2qOI!B0{$ASb#W;WiUS0x`FFt*GWkh>7GVDmxWIW~>o{;X7R3Y^O$!xGE2
zW!c5m?n{|?xfGc$uC^@nda-j$I@9_@X`hJG+t%LRUhw$TT<`7c?(VMOl(=zv(^Ez+
z)_`?6KN~d8Ei#|{Pv!T4mx&vAmrRO{u~_?biJiK1T}`Ob;|2cRNy~11T^2Z}B6xM&
z*<Ge_`|CB&_-xq3ki)sW_;Jsx$=Lzyy9E2$x^91YH#c}Yllz=$>CcuP@U=g>N5ZM(
z98XO4{d0SF-`>Bu_McUQ?(C+o7Z$Cay|*u7P0;2Y7oUIeF+2F_aKB{FS6)TOnlC~c
zqEl)=t$cd7kwZ;GJb=$cqcL72V8Vg?Igw^z`NDPucLOi6M%>SzP<W%Eo%vTtOvG_l
z)6je=r=v65)4rC(=Y?x#Jnj_^xiGg`=*tg>maB8WhqTXBHCGO?JoqBI#G|eBVX^Ka
zj+=FR|BB4-cvr|8TafA5@OXN{y0n9=5-AfJS*3CoJY$n7xX{QhU-N)*PT{#q$JyCM
z8ywk-E?KJ2Enj!?*}TG2kr@lcpX^-5T5v8iV{YfGnd<XP|7oT#>JrM*oLi{Ib!fRl
z3&X1wOQvP5TDho8>eb5StGrgN{<r2>l-8QXmriN1DRn$(WUcyk>e=jGJ1cdzed|0k
z=eHi}Y+O{ul)Yl9e2Rj`yc)LK&o@*&JGo+hU)6@3*^}Pw)Lbs-arz*~i$&f}yI!rc
zZrc53nK#p(kDI*L@A`VrI)BgaYuW4fGu*D$-~WHn>g+9-|DDp@R5;6e#jLAgvvf8d
z?aF?;_0p!7uV<HXy<U5aKRO_Dae-CO^4Thre;?c~Jtd)uQ}xInqcaA(eTvWOJ)cv2
z*5>%0&F4){+iX5-{rS(P3m*4tN-o%)USoX0Uz*qCoZ;!28)r=_D=;|B%iXp0TKlh^
zMTe@p4wNoDlGU@EHO;z8<51l6xjDx()1$x5&pW;Ijne}4FTGCp8`$4%f6(wh*5aXt
zL|xOvE@i!n$1U!4KORkBKeyw_MDxBw&U4D&{d~T_+2xXlWMRmq7fbw0etE23elO60
G!5RRh`|ElD

literal 0
HcmV?d00001

diff --git a/plugins/mass_mailouts/images/progressbg_green.gif b/plugins/mass_mailouts/images/progressbg_green.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f3f3bf681141982dc72429b21b4c8af7dbfd2b70
GIT binary patch
literal 1308
zcmZ?wbhEHb{J_A&(9Xb+l$vz#b;JHwRXbng?Rb&B?RnasS0x*s#jbelz3h?O(udAV
z9y+ak61L%K)Yq?HH$P8Y{Uo6GmT=cio{6`mr`}bWa!0ZCI#bJahEJb9wclWS_Uzf+
zyLWHhy2UUGMnhmIgn$mnk)XW5&hd|dkweB~!-9j&9Ku>LCpIiR+%BN(HOFIP(jf*W
zwhS4E28YIeHYceEFFrCfv2cm4h}qfT*gV}pdWOr%qNS&2=%+7Rb5kh&++^$Qdq+5@
zr2Ege3b%?lwPoey<pGPm=6Y>ib#-+FZ^@S*8xJ(IGrLXtbE9F|#f27UKe<Q;uML>5
ze|J*~xABYU9Yq^o-95d1ef*l(y>+$)4F@6)^1Qisbmol}Ub}dutlM;c>fAZiotzZ*
zYy0Ns=NHVbt9AIH+I(O!zd^woA*M@L*Tg;!Ia}5EX2zD}{nu=zw_Ut&pqYDq)d3S`
zHUT*fwcK6ba%Y~ceBSf!N9D&8=L&<LXVzMufB4|=KW6(rnWonVXNhjE;Vb_9>-4Me
zP3E%uP5-?5zPkJV`T6-R96~G>jI5#}84p;*Vir7T;&w}T(9B_^v9Ot6Ok!aRZ&*fR
zlZ2K>Vyk%455*RlvKI<$8p~EZ>eAWv;!(H3F^$JPCf76^*(4(j9yO{aX*9Npw!BcD
z;N<mVaht1Ag-VC5mS@Ujzpw=dr-X!MKAjqow({w;n6j5orzfN>crZz&%;MSPv^WQ~
z{>*hd6K7|Xy-1r7pts`*Tg9`L&*#;Ad-;5R1Dn>11ubG#YLk*?Sw3g!Jms0P*jb5d
y`I5e%sLV#0lvOX6%_)2Ja`}Qbtye3SOv_s3x?<U?SF6@+d-ZBHGaD-lgEasotT<f&

literal 0
HcmV?d00001

diff --git a/plugins/mass_mailouts/images/progressbg_orange.gif b/plugins/mass_mailouts/images/progressbg_orange.gif
new file mode 100644
index 0000000000000000000000000000000000000000..808cac7cfbcdaea93fa42d1c5de30ee9a0b060a5
GIT binary patch
literal 1308
zcmZ?wbhEHb{J_A&(9Xb+nw<1{ZNsaTRWBCiy;zX_d`{Y{WhKw1$3E`%e$?Uiu+{lt
ztJ9N7VNa(-ef|3N`OL&8eF3-9g>NSD+|H4{TcmQQK=FDE)AcBZPoF;Bh+}*9?AhJB
zcW>Rg#V`s+LtrR`fDXu!puE7&@sEL#L&jsnf`iQ*!dfvWHY_~cE}-l+$75sCAqFP4
z3>k+8hsJ(3C#eT7J~A}1aEYym+1cROJl#NghReyKrKe};r!QM`Qz-r1Wb5pEM>waX
z`_H!uw~9EmW##4N0gJundTm{Gb#(-9$(J7+4>YqgyG{CYqhZ;_g%)Q&xkv}E4VbTg
zcT)<t@r&pkMH^q;J-vN>{F>Okb+!c!2O<vgyt#LD=8Y9zyLhFn+jM^F+&R^qoD}wJ
z`{w887tF4!b@-v$d|)xZLBSd!rb}1X#6Au=Th;hx#+Ky$*KDP?UA%ChnR|ZK0TX66
z0XYt}++E*tXP&Km-t+E9<;N4}3WJ|#)>@x`_~7tAX8S&wrq>5&iEggpEB^fJ^sDeq
z=Cb=u|GfIXy8Hh5`S~pzLM#@HtfC?r4_L%v7CdO;c1w8B%weRlu$f;>Vqpt!SVm%#
zgqBBQt9a56#TJ>e7Yb||%T_$<(%JUnQMbV{jmJGE*EAg2BqIzSHL50QG`5MhyilIt
z<n?25o2yZUN{6kMXUb&1umuOFgoI^2of?t0^69jgvX@V%C!{TSFiEA%;@RZ1I0v=<
z%yl~xXJ?eXNShF#x8n(0#j};q=hb|B`Fwr@o7Rg3En-z_lagjxK4<AX<(abBS&3`;
xlD?p*%to1%RWFy#DSP#D`GPjBS1XoG%Ub2SV%e%!tJZ9L^=dUU8!HQgH2}4nHJtze

literal 0
HcmV?d00001

diff --git a/plugins/mass_mailouts/images/progressbg_red.gif b/plugins/mass_mailouts/images/progressbg_red.gif
new file mode 100644
index 0000000000000000000000000000000000000000..54dfa135f0e82934190141f2c991817dd616a2e3
GIT binary patch
literal 1308
zcmZ?wbhEHb{J_A&(9Xb+nw0dqso_;k)r-Qs7kSywGt*v`mpn^|eeCD`$kXkioAX0g
zrzeqNPh+FLe*OA9CGkmcz%6m%n*uzy<)!axsN7Liyw1*aot5F!r%yMy*`7UncK7bx
zTeog8jDpb+7z!bv19BuNFR*j`V_@Wv@z}87U^9oXR?LYF3lFyoD0|KE*qC&Pfr%|c
z#-YKXv7gOJ>cNYT3{5OtVk=^HHaIp<H;|s;a<XXY=^6Uz%huc!N<TN*I{V%c&ME2s
z^R2?IB2H~td3kxjVz0SgTUT9O9l=}j<;TVY&Fsu>lm6UjSaxxt#o13T(!py3=Ih_x
zl)`QNB6>&B##eVwZ(kq3CU$R~Z9&6<h=V+D?j4<ZV};i)UMcG~ou4{)PIV_Ih5g#T
z`T6+;v+HUdeyBDdSj=xwuttdK($zJwk3-H@HNKg#C3*ifTj^~VFC1v*o?msqgqcl1
zjzcYX*SFl6XDgrgy!%o4@x-~p;OCjO*5@BSIQ);<zE7s<^}$)9n``)rKmR)YDtwc<
z?0(ZfufDJDzJGpxehY^Xiv=UAs7S^G7O|KG51P2$5*{>j7-=kQ<`<J#*uoo@k=P`m
z<&oGbp7cYpMW*b90-MIN6_2`fw!L`NZE#HEagWJ04M#S~2!ltBs!1A+ZK5qNlqWcO
z{aD=QYE+@pVXNhtGTAR|!NDmZVVO^-Mx?ELIxVK`<<sd2X$u}qQYo`|HaRWML9IV?
z-Oj|>8D%fhCIsm1c*0ikY~}NLHQ!!7pWncy^<qJbSe4qOq*<2FSvpU7rYv?=;#$6>
wFDNRrQ6^>8%Vl%QUcFqtpiS%5iY3#sR=KWNw(8ZYHQQdjTFuPH%EDj`0N~Rv?EnA(

literal 0
HcmV?d00001

diff --git a/plugins/mass_mailouts/images/progressbg_yellow.gif b/plugins/mass_mailouts/images/progressbg_yellow.gif
new file mode 100644
index 0000000000000000000000000000000000000000..fdb0dfc981cbbfbca4e80f4ff5ccfac247b3be91
GIT binary patch
literal 1308
zcmZ?wbhEHb{J_A&(9Xb+nws?bX~U~0RWBaqy?B`Y{6X5Q$0g71#Xi36{phCK!yC>I
zZ#X@<6ZZ6O)Yq?HpFc=^awp){dEuMqcy3>izI$2a&Lzd`r<tywX882!(~UE1&z?QI
zd-v|GTelcS!Dt8!g%HpIITDl?*g5_&FmlLvY*=uxnL}7B=ER1DhuZ~|z2<mqOghBC
z#FioB(BRP6&*mic;KfIVCKfKS6)`&-9Gj;bNY8LNS+w-@4E^+FYi<gqpPOu*eeVe8
zlyv|3R^e6=r?#xTygXpB*IciytFEq&;4S&`W8;Blc4oIpe{M7^ySUKe>?arL;I#qs
z_3v&<;WmB|y`yO3tGlPSua937ySL7^py5EoL7q4Fj?TQX!fO|=ly#fVPn|obx|5T_
zer@0U{QQF1b+ryZRGSYh<~Jx<BgAy+>YCWcA!n-^-^|#Oy#Jc5^tOu^4m5MmuR37D
z%qAemp_aSrTkg!WmCt+L{iytS;#^_y^UPZ7^A8^!{>N<JC)4!$;4IP2HGIXNf1Q36
zzR6s6zv-V>-&c3vKR-Xeg+qwNf{|5JB;x^#Sj>V4P26q?51KiQG!{1Vi%BeO;SI}3
zY?9FONNg2P`k~k&Q}#lEO=H=LM_oGGUOehHIHvKq$K;xZBb#J|!J|giB#p*4(Uup=
z6P&z$EN*i(s!-{$)$&Z4>=(A+;FOTC%%@W$(pEm57E|`}>GXuO1rH{vlvzBRoEGPx
z)}Og<XX5OPvKMI+0`zt~VXJty^7*`)Z!e$EZ(!4Uv7kk)N^MfoEX(ICou@og7CS3(
zEnm_X6qVU1ld|gNvN>h1UM^qIruAyYl4)71Tvsex^=j3cZLeOfW@ck$VXy`OH^w~^

literal 0
HcmV?d00001

diff --git a/plugins/mass_mailouts/index.php b/plugins/mass_mailouts/index.php
new file mode 100644
index 00000000..2850b4fe
--- /dev/null
+++ b/plugins/mass_mailouts/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));
+
+?>
diff --git a/plugins/mass_mailouts/js/jquery.progressbar.js b/plugins/mass_mailouts/js/jquery.progressbar.js
new file mode 100644
index 00000000..912af4ac
--- /dev/null
+++ b/plugins/mass_mailouts/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);
\ No newline at end of file
diff --git a/plugins/mass_mailouts/languages/en.php b/plugins/mass_mailouts/languages/en.php
new file mode 100644
index 00000000..72c3bc57
--- /dev/null
+++ b/plugins/mass_mailouts/languages/en.php
@@ -0,0 +1,37 @@
+<?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 Mailouts',
+		'mass_mailouts:email_text' => 'E-mail Message:',
+		'mass_mailouts:subject' => 'E-mail Subject:',
+		'mass_mailouts:recipienttype' => 'Recipients:',
+		'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);
+?>
\ No newline at end of file
diff --git a/plugins/mass_mailouts/languages/nl.php b/plugins/mass_mailouts/languages/nl.php
new file mode 100644
index 00000000..26bc633a
--- /dev/null
+++ b/plugins/mass_mailouts/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);
+?>
\ No newline at end of file
diff --git a/plugins/mass_mailouts/manifest.xml b/plugins/mass_mailouts/manifest.xml
new file mode 100644
index 00000000..d4f15879
--- /dev/null
+++ b/plugins/mass_mailouts/manifest.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest>
+	<field key="author" value="ColdTrick IT Solutions" />
+	<field key="version" value="1.4" />
+	<field key="description" value="Improved Mass_mail from Brucepro improved again by Adam. Send Email to different user groups" />
+	<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="2009072201" />
+</plugin_manifest>
diff --git a/plugins/mass_mailouts/progress.php b/plugins/mass_mailouts/progress.php
new file mode 100644
index 00000000..dbaf8859
--- /dev/null
+++ b/plugins/mass_mailouts/progress.php
@@ -0,0 +1,20 @@
+<?php 
+
+global $CONFIG;
+
+admin_gatekeeper();
+
+$user = get_user(get_loggedin_userid());
+
+if(!empty($user)){
+	$progress = $user->mass_mailouts_progress;
+	if(!empty($progress)){
+		echo $progress;
+	} else {
+		echo 0;
+	}
+} else {
+	echo 0;
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/mass_mailouts/start.php b/plugins/mass_mailouts/start.php
new file mode 100644
index 00000000..9c9d5306
--- /dev/null
+++ b/plugins/mass_mailouts/start.php
@@ -0,0 +1,61 @@
+<?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;
+		switch ($page[0]) {
+			case "progress":
+				include($CONFIG->pluginspath . "mass_mailouts/progress.php");
+				break;
+			default:
+				include($CONFIG->pluginspath . "mass_mailouts/index.php");
+				break;
+		}
+	}
+	
+	// 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/progressWindow", false, $CONFIG->pluginspath . "mass_mailouts/actions/mass_mailouts/progressWindow.php", true);
+	register_action("mass_mailouts/progress", false, $CONFIG->pluginspath . "mass_mailouts/actions/mass_mailouts/progress.php", true);
+?>
\ No newline at end of file
diff --git a/plugins/mass_mailouts/version.txt b/plugins/mass_mailouts/version.txt
new file mode 100644
index 00000000..62189105
--- /dev/null
+++ b/plugins/mass_mailouts/version.txt
@@ -0,0 +1,36 @@
+Plugin: Mass Mailouts
+Author: ColdTrick IT Solutions and others
+Copyrights: 2009 ColdTrick, Alan, Adam
+
+====================================================================
+Version History:
+1.4:
+- Sending to different sub-groups
+- Works on slowers servers
+- Works with TinyMCE (formatting is lost)
+
+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
+- Add admin option to choose with mail methode
+
+====================================================================
+Known Issue:
+- Slow with many users
diff --git a/plugins/mass_mailouts/views/default/input/recipienttype.php b/plugins/mass_mailouts/views/default/input/recipienttype.php
new file mode 100644
index 00000000..98e09bc6
--- /dev/null
+++ b/plugins/mass_mailouts/views/default/input/recipienttype.php
@@ -0,0 +1,25 @@
+<?php
+	$groupquery = "SELECT guid,name from {$CONFIG->dbprefix}groups_entity";
+	$groupdata = get_data($groupquery);
+	$userid = get_loggedin_userid();
+	$listquery = "select id,name from {$CONFIG->dbprefix}access_collections where owner_guid = $userid";
+	$listdata = get_data($listquery);
+?>
+<select name="recipients" size="auto">
+<?php 
+	foreach($groupdata as $groupitem) {
+		?>
+<option value = "<?php echo "g".($groupitem->guid); ?>" > <?php  echo ($groupitem->name);?> </option>
+<?php
+	}
+?>
+<?php 
+	foreach($listdata as $listitem) {
+		?>
+<option value = "<?php echo "l".($listitem->id); ?>" >  <?php echo($listitem->name);?> </option>
+<?php 
+	}
+?>
+<option value="c002">Friends</option>
+<option value="t001">Everyone</option>
+</select>
\ No newline at end of file
diff --git a/plugins/mass_mailouts/views/default/mass_mailouts/css.php b/plugins/mass_mailouts/views/default/mass_mailouts/css.php
new file mode 100644
index 00000000..e590abc8
--- /dev/null
+++ b/plugins/mass_mailouts/views/default/mass_mailouts/css.php
@@ -0,0 +1,8 @@
+<?php
+	global $CONFIG;
+	
+?>
+.footnote {
+	color: grey;
+	font-size: 80%;
+}
\ No newline at end of file
diff --git a/plugins/mass_mailouts/views/default/mass_mailouts/form.php b/plugins/mass_mailouts/views/default/mass_mailouts/form.php
new file mode 100644
index 00000000..480a8e93
--- /dev/null
+++ b/plugins/mass_mailouts/views/default/mass_mailouts/form.php
@@ -0,0 +1,66 @@
+<?php 
+	$form = "";
+
+	$form .= "<p>" . elgg_echo('mass_mailouts:subject');
+	$form .= elgg_view('input/text',array(
+		'internalname' => 'email_subject',
+		'value' => "" 
+	)) . "</p>";
+	$form .= "<p>" . elgg_echo('mass_mailouts:email_text');
+	$form .= elgg_view('input/longtext',array(
+		'internalname' => 'email_text',
+		'value' => ""
+	))  . "</p>";
+
+	$form .= "<p>" . elgg_echo('mass_mailouts:recipienttype');
+	$form .= elgg_view('input/recipienttype', array('internalname' => 'access_id','value' => "")) . "</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'] . "action/mass_mailouts/progressWindow"
+	));
+
+?>
+<script type="text/javascript">
+
+	$(document).ready(function(){
+		$('#massmailForm').submit(function(){
+			<?php
+			if (is_plugin_enabled("tinymce")) {
+				echo "tinyMCE.triggerSave();"; 
+			} 
+			?>
+			var url = this.action + "?" + $('#' + this.id).serialize();
+			var sWidth = screen.width;
+			var sHeight = screen.height;
+			var height = 100;
+			var width = 300;
+			
+			var options = "height=" + height + ",width=" + width + ",menubar=no,toolbar=no,status=no,left=" + ((sWidth / 2) - ( width / 2)) + ",top=" + ((sHeight / 2) - (height / 2)) + ",location=no,resizable=no";
+			
+			window.open(url, "<?php echo elgg_echo("mass_mailouts:progress:window_title"); ?>", options);
+
+			// Reset the form to basic
+			$('#massmailForm').each(function(){
+				this.reset();
+			});
+
+			return false;
+		});
+	});
+</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>
-- 
GitLab