From 2031a7240cae35dbfbc3e1aa749ae9157250b033 Mon Sep 17 00:00:00 2001 From: Keith Fernie Date: Fri, 18 May 2012 09:12:02 +0100 Subject: [PATCH] new file: public_server.tgz add public_server plugin new file: public_server/README.md add public_server plugin new file: public_server/public_server.php add public_server plugin modified: testdrive.tgz puts content in notification emails modified: testdrive/testdrive.php puts content in notification emails --- public_server.tgz | Bin 0 -> 2158 bytes public_server/README.md | 29 +++++++ public_server/public_server.php | 140 ++++++++++++++++++++++++++++++++ testdrive.tgz | Bin 1879 -> 1882 bytes testdrive/testdrive.php | 3 + 5 files changed, 172 insertions(+) create mode 100755 public_server.tgz create mode 100644 public_server/README.md create mode 100644 public_server/public_server.php mode change 100644 => 100755 testdrive.tgz diff --git a/public_server.tgz b/public_server.tgz new file mode 100755 index 0000000000000000000000000000000000000000..c9a67fe35ef2c182f781b00ff0ee0d637f0314cc GIT binary patch literal 2158 zcmV-!2$A<6iwFQT0=7>81ML}UbK5r7U(H|fR->3wD(mo-t`obX#&+x3I?cpNIvK~K zLL?-iCJB}V?PzxV-}gO$q)1)16SuqF8l#Z}@ZsGTz%Utj!s*96y5>=9?GG7k94~fv z^)HUuU;V$+L5Q7pr`_IOYj?JGIy-By`^T_T9!acN1h5uKsaC<=_53e7!jk<a zV-d~|Jc>2GPP0w(ZlcCA+J}E}LUh8TKyY|9Rw~?YwT6b~6>Iu@rzun`jO0*wymdv; zhq%9G(a7kRMd*tFjqG`~I{e$R)+0U=vBKrClvg!7pEAdhNucZo*jl949kD@xWjb@H z>M!TWIgt#$f`s0VXdxXl*m)q87*6cQm*US5Ea2ReqY-yenP0&^;t-nu+vV0ug0j7m z;7_*L9KlDn*&O~ywb~r^$F|!Nv(2iqR%MOqz?iU_2p0~ZI(SJFmrY`vjkxMNG8l?c ztxOH|z(0o~;smH=(p&nWjMe=%YDm3P3~T=Yy}fR&qerVG3N#ZDBKo~ndH?pP+dGB? z5ny&wkTTylc;Y^ac>wma7*%4HaQe)Jn=!|~Mk<_o!WRlUl?Kvq2be8uE>m0ypA)0V znX1|Ed#{l{^Bu?=_{N5&;S7ImFtXMOg9y|$^J)d5OUp{(HbBvT zPmp~S$l*0x1df-uyp=kRHo8`Hs+O30+)*s|PyH{dYsuHK1aan!aRFEi)hIH{>qX2p7Da4QqvdrQHEhGdA%R}#$z{VlP?M1B zCvSf4ot}K`pMN~>9iOES;|aRI-_K!YV^oV{r@$TyMhP1sB#n$#zM2!1{QzsSfts>} zDD`pyjQdP@Wo%|CgNbDlIXpv$FzAzA*B1dsZN!v}?0Ol}6Ty{%tg_8R3c3M{c@kk> zE(3;RsieISkX*YZd=x2eg;?=ru=#Df`CB+LdZ=rQt*@iUB_V~(G!R!=AH#7~1TKxi zddhefNx6CJni=%}^;-)+4~_$3qO;7)=i_7Z>*Ax5Cbk(jUmW4DWuTa&@(5oL4J15? zhAG^a*Sx3~G7qYx8c1CM?nu5VRF-(NU533Gm6GM|R%%$*n7qLa#sXoeG2tx+5hU$V|dv`!lDfm(ryjg2{^e*u@ur8flasfXDm56dNc1P8lkt6Ff1S-n2gXI2~x(jK$6 zfz2pvn0AzQk##@UsslP~u!#BSJ=(;Bi)?;*VLGl$I5;S`T!8cumbOo!5mB)RTY#@36_UwC4b;?15EUb3vn2sQinBazdmCBl(`e2 z-k!y9BRnrNAJ$t2Lw=*`K03V7D}RE-;-f=|JmBwP4oRv3@RF{m*MU?{G+kqU4p_-q1K zoQE(eq8UsmIx##)S`!NQvzV|u95@&7$eX{kW!@NGRTr(%wTkF4l|M_Wz^%&7Ln^F%$@NZQd_{93mwSgvpJl>=?EiaP%{^6wrO$JN-bJwA+K;kH>J{Jv#;X13JD`kB1m#IKLkEgBG3s}qwb%AQ|cKanVaE>XT$hdsS5>M$QtKYSlRynWbK*|3; z_)Y&lCGbw)1%Ns7-HatNkJEq(FPIx;U6qG;-iGXUfS6cKE4v|BLC2#aKcygv;PmjR z(*HPuQf5IU9I}NH`LSh^&m$ zNXG_mm}QeDPa5E0Z#d$qgp62@$@80*Mm8Hb$hA55=rfLqI^7PTRWTbN3syG(eF+LT zEDA^ux+6tN^i3i)z1ZzV^0UBv#l6Y2FGUzSZE2hZy3%oy2%FZE9L{4D00dS@1?C>j k1xHd=B+RHt>=>WAou~0Mp2pL78vi5XKRSO`vH&Om05@GA1poj5 literal 0 HcmV?d00001 diff --git a/public_server/README.md b/public_server/README.md new file mode 100644 index 00000000..44b29f8e --- /dev/null +++ b/public_server/README.md @@ -0,0 +1,29 @@ +Public Server +============= + + +Public Server is a Friendica plugin which implements automatic account & post expiration so that a site may be used as a public +test bed with reduced data retention. + +This is a modified version of the testdrive plugin, DO NOT ACTIVATE AT THE SAME TIME AS THE TESTDRIVE PLUGIN. + +//When an account is created on the site, it is given a hard expiration date of +$a->config['public_server']['expiredays'] = 30; +//Set the default days for posts to expire here +$a->config['public_server']['expireposts'] = 30; +//Remove users who have never logged in after nologin days +$a->config['public_server']['nologin'] = 30; +//Remove users who last logged in over flagusers days ago +$a->config['public_server']['flagusers'] = 146; +//For users who last logged in over flagposts days ago set post expiry days to flagpostsexpire +$a->config['public_server']['flagposts'] = 90; +$a->config['public_server']['flagpostsexpire'] = 146; + +Set these in your .htconfig.php file. By default nothing is defined in case the plugin is activated accidentally. +They can be ommitted or set to 0 to disable each option. +The default values are those used by friendica.eu, change these as desired. + +The expiration date is updated when the user logs in. + +An email warning will be sent out approximately five days before the expiration occurs. Five days later the account is removed completely. + diff --git a/public_server/public_server.php b/public_server/public_server.php new file mode 100644 index 00000000..9d469829 --- /dev/null +++ b/public_server/public_server.php @@ -0,0 +1,140 @@ + + */ + + + + +function public_server_install() { + + register_hook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); + register_hook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); + register_hook('enotify','addon/public_server/public_server.php', 'public_server_enotify'); + register_hook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); +} + + +function public_server_uninstall() { + + unregister_hook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); + unregister_hook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); + unregister_hook('enotify','addon/public_server/public_server.php', 'public_server_enotify'); + unregister_hook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); +} + +function public_server_register_account($a,$b) { + + $uid = $b; + + $days = get_config('public_server','expiredays'); + $days_posts = get_config('public_server','expireposts'); + if(! $days) + return; + + $r = q("UPDATE user set account_expires_on = '%s', expire = %d where uid = %d limit 1", + dbesc(datetime_convert('UTC','UTC','now +' . $days . ' days')), + intval($days_posts), + intval($uid) + ); + +}; + + +function public_server_cron($a,$b) { + require_once('include/enotify.php'); + $r = q("select * from user where account_expires_on < UTC_TIMESTAMP() + INTERVAL 5 DAY and account_expires_on > '0000-00-00 00:00:00' and + expire_notification_sent = '0000-00-00 00:00:00' "); + + if(count($r)) { + foreach($r as $rr) { + notification(array( + 'uid' => $rr['uid'], + 'type' => NOTIFY_SYSTEM, + 'system_type' => 'public_server_expire', + 'language' => $rr['language'], + 'to_name' => $rr['username'], + 'to_email' => $rr['email'], + 'source_name' => t('Administrator'), + 'source_link' => $a->get_baseurl(), + 'source_photo' => $a->get_baseurl() . '/images/person-80.jpg', + )); + + q("update user set expire_notification_sent = '%s' where uid = %d limit 1", + dbesc(datetime_convert()), + intval($rr['uid']) + ); + } + } + + $r = q("select * from user where account_expired = 1 and account_expires_on < UTC_TIMESTAMP() - INTERVAL 5 DAY and account_expires_on > '0000-00-00 00:00:00'"); + if(count($r)) { + require_once('include/Contact.php'); + foreach($r as $rr) + user_remove($rr['uid']); + + } + $nologin = get_config('public_server','nologin'); + if($nologin) { + $r = q("select uid from user where account_expired = 0 and login_date = '0000-00-00 00:00:00' and register_date < UTC_TIMESTAMP() - INTERVAL %d DAY and account_expires_on = '0000-00-00 00:00:00'",intval($nologin)); + if(count($r)) { + foreach($r as $rr) + q("update user set account_expires_on = '%s' where uid = %d limit 1", + dbesc(datetime_convert('UTC','UTC','now +' . '6 days')), + intval($rr['uid']) + ); + } + } + + + $flagusers = get_config('public_server','flagusers'); + if($flagusers) { + $r = q("select uid from user where account_expired = 0 and login_date < UTC_TIMESTAMP() - INTERVAL %d DAY and account_expires_on = '0000-00-00 00:00:00' and `page-flags` = 0",intval($flagusers)); + if(count($r)) { + foreach($r as $rr) + q("update user set account_expires_on = '%s' where uid = %d limit 1", + dbesc(datetime_convert('UTC','UTC','now +' . '6 days')), + intval($rr['uid']) + ); + } + } + + $flagposts = get_config('public_server','flagposts'); + $flagpostsexpire = get_config('public_server','flagpostsexpire'); + if ($flagposts && $flagpostsexpire) { + $r = q("select uid from user where account_expired = 0 and login_date < UTC_TIMESTAMP() - INTERVAL %d DAY and account_expires_on = '0000-00-00 00:00:00' and expire = 0 and 'page-flags' = 0",intval(flagposts)); + if(count($r)) { + foreach($r as $rr) + q("update user set expire = %d where uid = %d limit 1", + intval($flagpostsexpire), + intval($rr['uid']) + ); + } + } + + +} + +function public_server_enotify(&$a, &$b) { + if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM + && x($b['params'], 'system_type') && $b['params']['system_type'] === 'public_server_expire') { + $b['itemlink'] = $a->get_baseurl(); + $b['epreamble'] = $b['preamble'] = sprintf( t('Your account on %s will expire in a few days.'), get_config('system','sitename')); + $b['subject'] = t('Your Friendica account is about to expire.'); + $b['body'] = sprintf( t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days"), $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]"); + } +} + +function public_server_login($a,$b) { + $days = get_config('public_server','expiredays'); + if(! $days) + return; + $r = q("UPDATE user set account_expires_on = '%s' where uid = %d and account_expires_on > '0000-00-00 00:00:00' limit 1", + dbesc(datetime_convert('UTC','UTC','now +' . $days . ' days')), + local_user() + ); +} diff --git a/testdrive.tgz b/testdrive.tgz old mode 100644 new mode 100755 index 7d314ea28fedfdfdd21653a06b8e1cd1e00457bd..3369481c589e4399200e2afd0e3ae89dd24dd4f4 GIT binary patch literal 1882 zcmV-g2c`HQiwFQ({k2a31MOJ*Z`(!^&adWQF%_IhN^L#jM-EP$LaiM%K%Eq|+9Gfa zVMVT_O-L@gT-p&1`QPuGT~eZCCAr|z7I&wCVTs(?dF?#Dm6f@TjJlECdw&}BK#z}( z+$U)L(|zyv!Ex~T==cD9{r++9_#Peoc_uBX$gMC$_l(x|Q+%IW|1TxGIRC}BPBzQF zst!Kj69kgP-vvEDxH#WV#vvLRry-)G7Q*3@Cmze$rjt^H1qp9h7VX>&ps>Ybzu5l)r4Q7Jv0 zS(}}7yGiw?6Y8X!89h<4>?UA-hTYwOX;P#i%U`-UQYjK3j$3W|XAtZdIaRrpW;E0K zU8}ixEKO|gQPcU_{Yc#~!&3I0?d>ObRD?#SUntgX*&s@$+N#OCx%VZ)s!fm=eApbK zB3%tqk^Ti?x})Sj3Dg~7Un5i-BDL;GYgg>;j(ya23l-5R?T(-DLnP)oo~F`{LY+?3 zw6#S?V|TAT}DK)LW6T(yBzVSvS(yR`b{453tDpPxUQ*+oX;+ z2A@sxMz&dkO6`q^TkI+9bYX(=8zaR>vy2X0`lEoQFf^2{rb@%Oh-9}6xI2k<-QQfs zGPLLk6QdLFws&lU<4*~ukA^QU&M$|9i=UCh-_nbh!}DK$8~j8^bT)WRB8_0Z-!pPL z(W=q=vHzXH%ZFX**wb&z%sfmM})l zTl{*biFh^X^ck~WxrggLzhLK?bSp1k4PQKeJ-U2-IXu587xOt%Eg3C%>Y3_XX_kz! zNT-FEf{Urrvv|8urbj9Izvo(-gW$T?H8zdW0&UQ}}7Yd;xBqHUaUix|~#}1D&aGkT2a6nGcpr9hx zp%O6xOC}KIn*yvEp!%U!Pbe$KF~BPe$X%dr&;bR`lZ2%blSayPCY3seOPO7z6OF25 zqgivJo%i^fI4v9=bR~zPi_9CQZ__%6mIgfr;9DZs@WhU{bxSGt{OhU8rN41tT(Q)-nibtRc4=OxaxxUx>2Ui2cW0F z^UkxSB`tyPFXw}^i}OwreRUn5x&QZ%50=0G93CFv{(sOrezd*+{}nXE`JcJF{%J+H z1P-gLaEt8V?ctInt$>#k5)Xi?x9L7P% zntvAJ10M@qK0;?Zt_^UBBhaDY(kfoc3M1qB%CAa+@ZejPb%7 literal 1879 zcmV-d2dMZTiwFSfcZE*?1MOICZ`(!^_E+;)%n42?rH~xwIn``S174u3l(aX|K4{cfe^N*w%75^UUkc*vi7jM%~KR&R<4t(D89^ zr`tO`?sgA%+P$Oh(P77(&uORAIX>)kj}MLyaNap+x4S#k`|BXBs4T27L_4X7Cd%BZ z>+wJA9(8u8{ne3d zp#Ssu4-o%zj(>2rpdbhai>x43kf7H_$t+fppgbujDxC#YhYW>U2e45i(C6cTrktF&KY7g4bG$V)Kdo7nnX&Ca4 z8O3re%EVHptH?Y9W5;uq!K?tfB2h?Z+}zFV{K%?XXE$7-VmKRGXY8V2FqOsy2%>eK zYh%ky*%>2~pDY5#4xF2}bYxkmY~qdcN}6=Bf`wC{5lNH22MjZ3DHb7{ham9bkKpc! zq_H+sNK{TFp)g+PW-}@VBhZP4W*6|0NJJJn?5R*Ni9OJy!3q^W%1a}YnUn7n19%`P zQK@2glL<1&l*Jv@S}SQTQFuu-p@LjZF0| z%!xD?69a=Sgnsl$wCexMzc|Ogs*XSC|GndGZ_)p|z0Lvpf3J7Y-S+>-pqGC~w1c4a z>{&q1=&eZQ2`w{$kIrQg8I^NtpU{=yEPZevv_u@EVycyjDzEgz)eG(hxKnoeyH`e& zHUBJ4;k0&|ZT{Xb?Npl+x>O$}T`s~!FQ?Y#C#}{pfKAj=3zg1ox|M?Y72a+IOp792 znK(o-b4#r^=(ix)HFBa*&Sp5(`eQv@ew{-M_bGI?w!Tm|%&?OE;PuAo0~L|c*`E~a zUV*63n=QgEaL=YPdjzWV5$qy7wltX&V<6+#dhMql&ijK4zHs=Wvx{^cdNIWiAkQd# zQiK?b_(t|np2YsDqE2leV&f6&sLlh4RjFiHx6;^p_|xE9Ao4#mOcURP)bwERJ0uUX z!4hy!-ioBomI9}96Tolu6gzU|9hmfM38VlT$$F@=C@Evvl9{$@Jab`aRP8NfA|s1} z8ylT^v%O&(41Y<0J{-Kcyto?lFMmMBeM4{F4laKDx&Ke<(Ru$J-;_Y_-x)fc=mQLR z=q_fsjxT}d?nCYNiTi|9bC?jDd8|#t*|N)5wTPxT;8|kN7=OH5m0TCbh*_PFcSHCq zq_bDddhNd4?E43HmP_~K?e~K>uip)?-dznYF6R&Ztv+1xRMOO&63!Vh$xKQy0TGsOb;_OSI@PA1LwNq3Y!~Z?o0DW3!VZKX(Sioz=JgE$EnIt9cZ80gpK>0iON2D zPM(6fDn=MIOM?b+pD~|mtHX_qoQ*AvP7_(QFuWEzd;X%`{E$z)9~v%NySqrAGIwM5 zvRr;I@_$e?Uo4x(9QdLpmZ5DpFsA|G_vZkgKb_VLqvOWAe=FUeucv!$-cr`mc5@AW zt1(WcdSJ&@v#t{-LDSzD|q?!6*mM`%VmSK>SGpqwxOOD@R;~*3<{~sTwco_ zAc@7 z_TOjkGpFF5ShlH)$LnS#vM6{D&sLjHlYWsj)w$#?mt^)q&t&YE!^-f+wcxfbK3`ij zu`R~D!ApZ>h>Ln<>zy3AVUMRmw?xALIWcaREp((r!b?vIQNAevO&`?{wb@zRRi; zDt1}7`byr$3+Wfb%E)UpM|f%93eY_;%^GrNt)}L801BpdjVwN^@m-ItbosA|noqFW z&2