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(" ", "", $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(" ", "", $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