2012-02-08 03:22:11 -05:00
< ? php
/**
* Name : blackout
2019-03-12 04:36:19 -04:00
* Description : Blackout your ~ friendica node during a given period
2012-02-08 03:22:11 -05:00
* License : MIT
2019-03-12 04:36:19 -04:00
* Version : 1.1
* Author : Tobias Diekershoff < https :// social . diekershoff . de /~ tobias >
2012-02-08 03:22:11 -05:00
*
* About
* =====
*
2018-01-20 08:57:41 -05:00
* This addon will allow you to enter a date / time period during which
2012-02-08 03:22:11 -05:00
* all your ~ friendica visitors from the web will be redirected to a page
* you can configure in the admin panel as well .
*
* Calls to the API and the communication with other ~ friendica nodes is
2018-01-20 08:57:41 -05:00
* not effected from this addon .
2012-02-08 03:22:11 -05:00
*
* If you enter a period the current date would be affected none of the
* currently logged in users will be effected as well . But if they log
* out they can ' t login again . That way you dear admin can double check
* the entered time periode and fix typos without having to hack the
* database directly .
*
* License
* =======
*
* Permission is hereby granted , free of charge , to any person obtaining a copy
* of this software and associated documentation files ( the " Software " ), to deal
* in the Software without restriction , including without limitation the rights
* to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
* copies of the Software , and to permit persons to whom the Software is
* furnished to do so , subject to the following conditions :
2018-01-15 08:15:33 -05:00
*
2012-02-08 03:22:11 -05:00
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software .
2018-01-15 08:15:33 -05:00
*
2012-02-08 03:22:11 -05:00
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
* LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE .
*/
2018-12-26 02:28:16 -05:00
use Friendica\Core\Hook ;
2018-10-29 19:40:18 -04:00
use Friendica\Core\Logger ;
2018-10-31 10:55:15 -04:00
use Friendica\Core\Renderer ;
2018-10-13 14:05:05 -04:00
use Friendica\Core\System ;
2020-01-18 16:07:06 -05:00
use Friendica\DI ;
2012-02-08 03:22:11 -05:00
function blackout_install () {
2019-03-12 04:36:19 -04:00
Hook :: register ( 'page_header' , 'addon/blackout/blackout.php' , 'blackout_redirect' );
2012-02-08 03:22:11 -05:00
}
function blackout_redirect ( $a , $b ) {
2019-03-12 04:36:19 -04:00
// if we have a logged in user, don't throw her out
if ( local_user ()) {
2012-05-11 06:39:29 -04:00
return true ;
2019-03-12 04:36:19 -04:00
}
2012-05-11 06:39:29 -04:00
2019-03-12 04:36:19 -04:00
// else...
2020-01-19 15:21:12 -05:00
$mystart = DI :: config () -> get ( 'blackout' , 'begindate' );
$myend = DI :: config () -> get ( 'blackout' , 'enddate' );
$myurl = DI :: config () -> get ( 'blackout' , 'url' );
2019-03-12 04:36:19 -04:00
$now = time ();
$date1 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $mystart );
$date2 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $myend );
if ( $date1 && $date2 ) {
$date1 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $mystart ) -> format ( 'U' );
$date2 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $myend ) -> format ( 'U' );
} else {
$date1 = 0 ;
$date2 = 0 ;
}
if (( $date1 <= $now ) && ( $now <= $date2 )) {
2021-10-21 02:04:27 -04:00
Logger :: notice ( 'redirecting user to blackout page' );
2019-03-12 04:36:19 -04:00
System :: externalRedirect ( $myurl );
}
2012-02-08 03:22:11 -05:00
}
2018-01-20 08:57:41 -05:00
function blackout_addon_admin ( & $a , & $o ) {
2020-01-19 15:21:12 -05:00
$mystart = DI :: config () -> get ( 'blackout' , 'begindate' );
2019-03-12 04:36:19 -04:00
if ( ! is_string ( $mystart )) { $mystart = " YYYY-MM-DD hh:mm " ; }
2020-01-19 15:21:12 -05:00
$myend = DI :: config () -> get ( 'blackout' , 'enddate' );
2019-03-12 04:36:19 -04:00
if ( ! is_string ( $myend )) { $myend = " YYYY-MM-DD hh:mm " ; }
2020-01-19 15:21:12 -05:00
$myurl = DI :: config () -> get ( 'blackout' , 'url' );
2019-03-12 04:36:19 -04:00
if ( ! is_string ( $myurl )) { $myurl = " https://www.example.com " ; }
$t = Renderer :: getMarkupTemplate ( " admin.tpl " , " addon/blackout/ " );
2012-02-08 03:22:11 -05:00
2019-03-12 04:36:19 -04:00
$date1 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $mystart );
$date2 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $myend );
// a note for the admin
$adminnote = " " ;
if ( $date2 < $date1 ) {
2020-12-22 19:19:54 -05:00
$adminnote = DI :: l10n () -> t ( " The end-date is prior to the start-date of the blackout, you should fix this. " );
2019-03-12 04:36:19 -04:00
} else {
2020-12-23 01:33:35 -05:00
$adminnote = DI :: l10n () -> t ( " Please double check the current settings for the blackout. It will begin on <strong>%s</strong> and end on <strong>%s</strong>. " , $mystart , $myend );
2019-03-12 04:36:19 -04:00
}
$o = Renderer :: replaceMacros ( $t , [
2020-01-18 14:52:33 -05:00
'$submit' => DI :: l10n () -> t ( 'Save Settings' ),
2020-12-22 19:19:54 -05:00
'$rurl' => [ " rurl " , DI :: l10n () -> t ( " Redirect URL " ), $myurl , DI :: l10n () -> t ( " All your visitors from the web will be redirected to this URL. " ), " " , " " , " url " ],
2020-01-18 14:52:33 -05:00
'$startdate' => [ " startdate " , DI :: l10n () -> t ( " Begin of the Blackout " ), $mystart , DI :: l10n () -> t ( " Format is <tt>YYYY-MM-DD hh:mm</tt>; <em>YYYY</em> year, <em>MM</em> month, <em>DD</em> day, <em>hh</em> hour and <em>mm</em> minute. " )],
'$enddate' => [ " enddate " , DI :: l10n () -> t ( " End of the Blackout " ), $myend , " " ],
2019-03-12 04:36:19 -04:00
'$adminnote' => $adminnote ,
2020-12-22 19:19:54 -05:00
'$aboutredirect' => DI :: l10n () -> t ( " <strong>Note</strong>: The redirect will be active from the moment you press the submit button. Users currently logged in will <strong>not</strong> be thrown out but can't login again after logging out while the blackout is still in place. " ),
2019-03-12 04:36:19 -04:00
]);
2012-02-08 03:22:11 -05:00
}
2018-01-20 08:57:41 -05:00
function blackout_addon_admin_post ( & $a ) {
2019-03-12 04:36:19 -04:00
$begindate = trim ( $_POST [ 'startdate' ]);
$enddate = trim ( $_POST [ 'enddate' ]);
$url = trim ( $_POST [ 'rurl' ]);
2020-01-19 15:21:52 -05:00
DI :: config () -> set ( 'blackout' , 'begindate' , $begindate );
DI :: config () -> set ( 'blackout' , 'enddate' , $enddate );
DI :: config () -> set ( 'blackout' , 'url' , $url );
2012-02-08 03:22:11 -05:00
}