2012-02-08 09:22:11 +01:00
< ? php
/**
* Name : blackout
2019-03-12 09:36:19 +01:00
* Description : Blackout your ~ friendica node during a given period
2012-02-08 09:22:11 +01:00
* License : MIT
2019-03-12 09:36:19 +01:00
* Version : 1.1
* Author : Tobias Diekershoff < https :// social . diekershoff . de /~ tobias >
2012-02-08 09:22:11 +01:00
*
* About
* =====
*
2018-01-20 14:57:41 +01:00
* This addon will allow you to enter a date / time period during which
2012-02-08 09:22:11 +01: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 14:57:41 +01:00
* not effected from this addon .
2012-02-08 09:22:11 +01: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 14:15:33 +01:00
*
2012-02-08 09:22:11 +01:00
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software .
2018-01-15 14:15:33 +01:00
*
2012-02-08 09:22:11 +01: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 .
*/
2022-06-23 07:16:22 +02:00
use Friendica\App ;
2018-12-26 08:28:16 +01:00
use Friendica\Core\Hook ;
2018-10-30 00:40:18 +01:00
use Friendica\Core\Logger ;
2018-10-31 15:55:15 +01:00
use Friendica\Core\Renderer ;
2018-10-13 20:05:05 +02:00
use Friendica\Core\System ;
2020-01-18 22:07:06 +01:00
use Friendica\DI ;
2012-02-08 09:22:11 +01:00
function blackout_install () {
2019-03-12 09:36:19 +01:00
Hook :: register ( 'page_header' , 'addon/blackout/blackout.php' , 'blackout_redirect' );
2012-02-08 09:22:11 +01:00
}
2023-01-14 03:16:09 +01:00
function blackout_redirect ( $b )
2022-06-23 07:16:22 +02:00
{
2019-03-12 09:36:19 +01:00
// if we have a logged in user, don't throw her out
2022-10-20 23:51:49 +02:00
if ( DI :: userSession () -> getLocalUserId ()) {
2012-05-11 12:39:29 +02:00
return true ;
2019-03-12 09:36:19 +01:00
}
2012-05-11 12:39:29 +02:00
2019-03-12 09:36:19 +01:00
// else...
2020-01-19 21:21:12 +01:00
$mystart = DI :: config () -> get ( 'blackout' , 'begindate' );
$myend = DI :: config () -> get ( 'blackout' , 'enddate' );
$myurl = DI :: config () -> get ( 'blackout' , 'url' );
2019-03-12 09:36:19 +01:00
$now = time ();
$date1 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $mystart );
$date2 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $myend );
2022-06-23 07:16:22 +02:00
if ( $date1 && $date2 ) {
2019-03-12 09:36:19 +01:00
$date1 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $mystart ) -> format ( 'U' );
$date2 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $myend ) -> format ( 'U' );
} else {
2022-06-23 07:16:22 +02:00
$date1 = 0 ;
$date2 = 0 ;
2019-03-12 09:36:19 +01:00
}
2022-06-23 07:16:22 +02:00
2019-03-12 09:36:19 +01:00
if (( $date1 <= $now ) && ( $now <= $date2 )) {
2021-10-21 08:04:27 +02:00
Logger :: notice ( 'redirecting user to blackout page' );
2019-03-12 09:36:19 +01:00
System :: externalRedirect ( $myurl );
}
2012-02-08 09:22:11 +01:00
}
2023-01-14 03:16:09 +01:00
function blackout_addon_admin ( string & $o )
2022-06-30 13:32:13 +02:00
{
2020-01-19 21:21:12 +01:00
$mystart = DI :: config () -> get ( 'blackout' , 'begindate' );
2022-06-23 06:04:05 +02:00
if ( ! is_string ( $mystart )) { $mystart = 'YYYY-MM-DD hh:mm' ; }
2020-01-19 21:21:12 +01:00
$myend = DI :: config () -> get ( 'blackout' , 'enddate' );
2022-06-23 06:04:05 +02:00
if ( ! is_string ( $myend )) { $myend = 'YYYY-MM-DD hh:mm' ; }
2020-01-19 21:21:12 +01:00
$myurl = DI :: config () -> get ( 'blackout' , 'url' );
2022-06-23 06:04:05 +02:00
if ( ! is_string ( $myurl )) { $myurl = 'https://www.example.com' ; }
$t = Renderer :: getMarkupTemplate ( 'admin.tpl' , 'addon/blackout/' );
2012-02-08 09:22:11 +01:00
2019-03-12 09:36:19 +01:00
$date1 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $mystart );
$date2 = DateTime :: createFromFormat ( 'Y-m-d G:i' , $myend );
// a note for the admin
2022-06-23 06:04:05 +02:00
$adminnote = '' ;
2019-03-12 09:36:19 +01:00
if ( $date2 < $date1 ) {
2020-12-23 01:19:54 +01:00
$adminnote = DI :: l10n () -> t ( " The end-date is prior to the start-date of the blackout, you should fix this. " );
2019-03-12 09:36:19 +01:00
} else {
2020-12-23 07:33:35 +01: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 09:36:19 +01:00
}
$o = Renderer :: replaceMacros ( $t , [
2020-01-18 20:52:33 +01:00
'$submit' => DI :: l10n () -> t ( 'Save Settings' ),
2022-06-23 06:04:05 +02: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' ],
'$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 09:36:19 +01:00
'$adminnote' => $adminnote ,
2020-12-23 01:19:54 +01: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 09:36:19 +01:00
]);
2012-02-08 09:22:11 +01:00
}
2022-06-30 13:32:13 +02:00
2023-01-14 03:16:09 +01:00
function blackout_addon_admin_post ()
2022-06-30 13:32:13 +02:00
{
DI :: config () -> set ( 'blackout' , 'begindate' , trim ( $_POST [ 'startdate' ]));
DI :: config () -> set ( 'blackout' , 'enddate' , trim ( $_POST [ 'enddate' ]));
DI :: config () -> set ( 'blackout' , 'url' , trim ( $_POST [ 'rurl' ]));
2012-02-08 09:22:11 +01:00
}