2011-06-02 00:48:29 +02:00
< ? php
2014-09-28 14:14:04 +02:00
2018-09-25 17:33:31 +02:00
use Carbon\Carbon ;
2017-01-21 13:58:53 +01:00
use Engelsystem\Database\DB ;
2020-11-15 18:47:30 +01:00
use Engelsystem\Models\OAuth ;
2018-10-14 18:24:42 +02:00
use Engelsystem\Models\User\Contact ;
use Engelsystem\Models\User\PersonalData ;
use Engelsystem\Models\User\Settings ;
use Engelsystem\Models\User\State ;
2018-10-09 21:47:31 +02:00
use Engelsystem\Models\User\User ;
2017-01-21 13:58:53 +01:00
2017-01-03 03:22:48 +01:00
/**
* @ return string
*/
2017-01-02 03:57:23 +01:00
function register_title ()
{
2018-08-29 21:55:32 +02:00
return __ ( 'Register' );
2013-11-25 21:56:56 +01:00
}
2017-01-03 03:22:48 +01:00
/**
* Engel registrieren
*
* @ return string
*/
2017-01-02 03:57:23 +01:00
function guest_register ()
{
2018-10-31 12:48:22 +01:00
$authUser = auth () -> user ();
2017-01-21 23:07:20 +01:00
$tshirt_sizes = config ( 'tshirt_sizes' );
$enable_tshirt_size = config ( 'enable_tshirt_size' );
2019-08-24 10:56:59 +02:00
$enable_user_name = config ( 'enable_user_name' );
2019-04-23 12:42:01 +02:00
$enable_dect = config ( 'enable_dect' );
2019-04-23 12:23:35 +02:00
$enable_planned_arrival = config ( 'enable_planned_arrival' );
2017-01-21 23:07:20 +01:00
$min_password_length = config ( 'min_password_length' );
2020-11-14 01:36:37 +01:00
$enable_pronoun = config ( 'enable_pronoun' );
2018-09-25 17:33:31 +02:00
$config = config ();
2017-07-18 21:38:53 +02:00
$request = request ();
2017-08-30 19:57:01 +02:00
$session = session ();
2017-01-02 15:43:36 +01:00
2017-01-03 14:12:17 +01:00
$msg = '' ;
$nick = '' ;
2017-01-21 13:58:53 +01:00
$lastName = '' ;
$preName = '' ;
2017-01-03 14:12:17 +01:00
$dect = '' ;
$mobile = '' ;
2020-11-14 01:51:03 +01:00
$email = '' ;
2020-11-14 01:36:37 +01:00
$pronoun = '' ;
2017-01-02 03:57:23 +01:00
$email_shiftinfo = false ;
$email_by_human_allowed = false ;
2020-12-28 16:04:05 +01:00
$email_news = false ;
2017-01-02 03:57:23 +01:00
$tshirt_size = '' ;
2017-01-03 14:12:17 +01:00
$password_hash = '' ;
2017-01-02 03:57:23 +01:00
$selected_angel_types = [];
$planned_arrival_date = null ;
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$angel_types_source = AngelTypes ();
$angel_types = [];
foreach ( $angel_types_source as $angel_type ) {
2020-10-17 23:50:28 +02:00
$angel_types [ $angel_type [ 'id' ]] = $angel_type [ 'name' ]
. ( $angel_type [ 'restricted' ] ? ' (' . __ ( 'Requires introduction' ) . ')' : '' );
2017-01-02 15:43:36 +01:00
if ( ! $angel_type [ 'restricted' ]) {
2017-01-02 03:57:23 +01:00
$selected_angel_types [] = $angel_type [ 'id' ];
}
2016-09-29 10:53:17 +02:00
}
2017-01-02 15:43:36 +01:00
2018-11-12 14:41:23 +01:00
if ( ! auth () -> can ( 'register' ) || ( ! $authUser && ! config ( 'registration_enabled' ))) {
2018-08-29 21:55:32 +02:00
error ( __ ( 'Registration is disabled.' ));
2017-09-20 12:18:08 +02:00
return page_with_title ( register_title (), [
msg (),
]);
}
2018-11-20 16:02:03 +01:00
if ( $request -> hasPostData ( 'submit' )) {
2017-01-02 03:57:23 +01:00
$valid = true ;
2017-01-02 15:43:36 +01:00
2020-11-14 01:51:03 +01:00
if ( $request -> has ( 'username' )) {
$nickValidation = User_validate_Nick ( $request -> input ( 'username' ));
2019-04-28 14:34:04 +02:00
$nick = $nickValidation -> getValue ();
2019-05-31 04:03:19 +02:00
if ( ! $nickValidation -> isValid ()) {
2019-04-28 14:34:04 +02:00
$valid = false ;
2020-12-02 14:43:11 +01:00
$msg .= error ( sprintf ( __ ( 'Please enter a valid nick.' ) . ' ' . __ ( 'Use up to 24 letters, numbers, connecting punctuations or spaces for your nickname.' ),
2019-05-31 04:03:19 +02:00
$nick ), true );
2019-04-28 14:34:04 +02:00
}
2018-10-14 18:24:42 +02:00
if ( User :: whereName ( $nick ) -> count () > 0 ) {
2017-01-02 03:57:23 +01:00
$valid = false ;
2018-08-29 21:55:32 +02:00
$msg .= error ( sprintf ( __ ( 'Your nick "%s" already exists.' ), $nick ), true );
2017-01-02 03:57:23 +01:00
}
} else {
$valid = false ;
2019-04-28 14:34:04 +02:00
$msg .= error ( __ ( 'Please enter a nickname.' ), true );
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2020-11-14 01:51:03 +01:00
if ( $request -> has ( 'email' ) && strlen ( strip_request_item ( 'email' )) > 0 ) {
$email = strip_request_item ( 'email' );
if ( ! check_email ( $email )) {
2017-01-02 03:57:23 +01:00
$valid = false ;
2018-08-29 21:55:32 +02:00
$msg .= error ( __ ( 'E-mail address is not correct.' ), true );
2017-01-02 03:57:23 +01:00
}
2020-11-14 01:51:03 +01:00
if ( User :: whereEmail ( $email ) -> first ()) {
2018-11-18 12:13:00 +01:00
$valid = false ;
$msg .= error ( __ ( 'E-mail address is already used by another user.' ), true );
}
2017-01-02 03:57:23 +01:00
} else {
$valid = false ;
2018-08-29 21:55:32 +02:00
$msg .= error ( __ ( 'Please enter your e-mail.' ), true );
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-07-18 21:38:53 +02:00
if ( $request -> has ( 'email_shiftinfo' )) {
2017-01-02 03:57:23 +01:00
$email_shiftinfo = true ;
}
2017-01-02 15:43:36 +01:00
2017-07-18 21:38:53 +02:00
if ( $request -> has ( 'email_by_human_allowed' )) {
2017-01-02 03:57:23 +01:00
$email_by_human_allowed = true ;
}
2017-01-02 15:43:36 +01:00
2020-12-28 16:04:05 +01:00
if ( $request -> has ( 'email_news' )) {
$email_news = true ;
}
2017-01-02 03:57:23 +01:00
if ( $enable_tshirt_size ) {
2017-07-18 21:38:53 +02:00
if ( $request -> has ( 'tshirt_size' ) && isset ( $tshirt_sizes [ $request -> input ( 'tshirt_size' )])) {
$tshirt_size = $request -> input ( 'tshirt_size' );
2017-01-02 03:57:23 +01:00
} else {
$valid = false ;
2018-08-29 21:55:32 +02:00
$msg .= error ( __ ( 'Please select your shirt size.' ), true );
2017-01-02 03:57:23 +01:00
}
}
2017-01-02 15:43:36 +01:00
2017-08-29 16:21:25 +02:00
if ( $request -> has ( 'password' ) && strlen ( $request -> postData ( 'password' )) >= $min_password_length ) {
if ( $request -> postData ( 'password' ) != $request -> postData ( 'password2' )) {
2017-01-02 03:57:23 +01:00
$valid = false ;
2018-08-29 21:55:32 +02:00
$msg .= error ( __ ( 'Your passwords don\'t match.' ), true );
2017-01-02 03:57:23 +01:00
}
} else {
$valid = false ;
2017-01-02 15:43:36 +01:00
$msg .= error ( sprintf (
2018-08-29 21:55:32 +02:00
__ ( 'Your password is too short (please use at least %s characters).' ),
2017-01-02 15:43:36 +01:00
$min_password_length
), true );
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2019-04-23 12:23:35 +02:00
if ( $request -> has ( 'planned_arrival_date' ) && $enable_planned_arrival ) {
2017-07-18 21:38:53 +02:00
$tmp = parse_date ( 'Y-m-d H:i' , $request -> input ( 'planned_arrival_date' ) . ' 00:00' );
2017-01-02 03:57:23 +01:00
$result = User_validate_planned_arrival_date ( $tmp );
$planned_arrival_date = $result -> getValue ();
2017-01-02 15:43:36 +01:00
if ( ! $result -> isValid ()) {
2017-01-02 03:57:23 +01:00
$valid = false ;
2018-08-29 21:55:32 +02:00
error ( __ ( 'Please enter your planned date of arrival. It should be after the buildup start date and before teardown end date.' ));
2017-01-02 03:57:23 +01:00
}
2019-04-24 11:01:37 +02:00
} elseif ( $enable_planned_arrival ) {
2017-11-19 11:58:19 +01:00
$valid = false ;
2018-08-29 21:55:32 +02:00
error ( __ ( 'Please enter your planned date of arrival. It should be after the buildup start date and before teardown end date.' ));
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$selected_angel_types = [];
foreach ( array_keys ( $angel_types ) as $angel_type_id ) {
2017-07-18 21:38:53 +02:00
if ( $request -> has ( 'angel_types_' . $angel_type_id )) {
2017-01-02 03:57:23 +01:00
$selected_angel_types [] = $angel_type_id ;
}
}
2017-01-02 15:43:36 +01:00
// Trivia
2019-08-24 10:56:59 +02:00
if ( $enable_user_name && $request -> has ( 'lastname' )) {
2017-01-21 13:58:53 +01:00
$lastName = strip_request_item ( 'lastname' );
2017-01-02 15:43:36 +01:00
}
2019-08-24 10:56:59 +02:00
if ( $enable_user_name && $request -> has ( 'prename' )) {
2017-01-21 13:58:53 +01:00
$preName = strip_request_item ( 'prename' );
2017-01-02 03:57:23 +01:00
}
2020-11-14 01:36:37 +01:00
if ( $enable_pronoun && $request -> has ( 'pronoun' )) {
$pronoun = strip_request_item ( 'pronoun' );
}
2019-04-23 12:42:01 +02:00
if ( $enable_dect && $request -> has ( 'dect' )) {
2018-12-22 00:12:46 +01:00
if ( strlen ( strip_request_item ( 'dect' )) <= 40 ) {
2017-11-21 19:00:42 +01:00
$dect = strip_request_item ( 'dect' );
} else {
$valid = false ;
2018-12-22 00:12:46 +01:00
error ( __ ( 'For dect numbers are only 40 digits allowed.' ));
2017-11-21 19:00:42 +01:00
}
2017-01-02 03:57:23 +01:00
}
2017-07-18 21:38:53 +02:00
if ( $request -> has ( 'mobile' )) {
2017-01-02 03:57:23 +01:00
$mobile = strip_request_item ( 'mobile' );
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
if ( $valid ) {
2018-10-14 18:24:42 +02:00
$user = new User ([
'name' => $nick ,
'password' => $password_hash ,
2020-11-14 01:51:03 +01:00
'email' => $email ,
2018-10-14 18:24:42 +02:00
'api_key' => '' ,
'last_login_at' => null ,
]);
$user -> save ();
$contact = new Contact ([
'dect' => $dect ,
'mobile' => $mobile ,
]);
$contact -> user ()
-> associate ( $user )
-> save ();
$personalData = new PersonalData ([
'first_name' => $preName ,
'last_name' => $lastName ,
2020-11-14 01:36:37 +01:00
'pronoun' => $pronoun ,
2018-10-14 18:24:42 +02:00
'shirt_size' => $tshirt_size ,
2019-04-25 17:30:51 +02:00
'planned_arrival_date' => $enable_planned_arrival ? Carbon :: createFromTimestamp ( $planned_arrival_date ) : null ,
2018-10-14 18:24:42 +02:00
]);
$personalData -> user ()
-> associate ( $user )
-> save ();
$settings = new Settings ([
'language' => $session -> get ( 'locale' ),
'theme' => config ( 'theme' ),
'email_human' => $email_by_human_allowed ,
'email_shiftinfo' => $email_shiftinfo ,
2020-12-28 16:04:05 +01:00
'email_news' => $email_news ,
2018-10-14 18:24:42 +02:00
]);
$settings -> user ()
-> associate ( $user )
-> save ();
2019-03-06 19:28:07 +01:00
$state = new State ([]);
if ( config ( 'autoarrive' )) {
$state -> arrived = true ;
$state -> arrival_date = new Carbon ();
}
$state -> user ()
2018-10-14 18:24:42 +02:00
-> associate ( $user )
-> save ();
2017-01-02 15:43:36 +01:00
2020-11-15 18:47:30 +01:00
if ( $session -> has ( 'oauth2_connect_provider' ) && $session -> has ( 'oauth2_user_id' )) {
$oauth = new OAuth ([
2020-12-26 18:24:20 +01:00
'provider' => $session -> get ( 'oauth2_connect_provider' ),
'identifier' => $session -> get ( 'oauth2_user_id' ),
'access_token' => $session -> get ( 'oauth2_access_token' ),
'refresh_token' => $session -> get ( 'oauth2_refresh_token' ),
'expires_at' => $session -> get ( 'oauth2_expires_at' ),
2020-11-15 18:47:30 +01:00
]);
$oauth -> user ()
-> associate ( $user )
-> save ();
$session -> remove ( 'oauth2_connect_provider' );
$session -> remove ( 'oauth2_user_id' );
2020-12-26 18:24:20 +01:00
$session -> remove ( 'oauth2_access_token' );
$session -> remove ( 'oauth2_refresh_token' );
$session -> remove ( 'oauth2_expires_at' );
2020-11-15 18:47:30 +01:00
}
2017-01-02 15:43:36 +01:00
// Assign user-group and set password
2018-10-14 18:24:42 +02:00
DB :: insert ( 'INSERT INTO `UserGroups` (`uid`, `group_id`) VALUES (?, -20)' , [ $user -> id ]);
2018-11-27 12:01:36 +01:00
auth () -> setPassword ( $user , $request -> postData ( 'password' ));
2017-01-02 15:43:36 +01:00
// Assign angel-types
$user_angel_types_info = [];
2017-01-02 03:57:23 +01:00
foreach ( $selected_angel_types as $selected_angel_type_id ) {
2017-01-21 13:58:53 +01:00
DB :: insert (
2017-11-19 12:03:29 +01:00
'INSERT INTO `UserAngelTypes` (`user_id`, `angeltype_id`, `supporter`) VALUES (?, ?, FALSE)' ,
2018-10-14 18:24:42 +02:00
[ $user -> id , $selected_angel_type_id ]
2017-01-21 13:58:53 +01:00
);
2017-01-02 03:57:23 +01:00
$user_angel_types_info [] = $angel_types [ $selected_angel_type_id ];
}
2017-01-02 15:43:36 +01:00
engelsystem_log (
2019-05-31 04:03:19 +02:00
'User ' . User_Nick_render ( $user , true )
2017-01-03 14:12:17 +01:00
. ' signed up as: ' . join ( ', ' , $user_angel_types_info )
2017-01-02 15:43:36 +01:00
);
2018-08-29 21:55:32 +02:00
success ( __ ( 'Angel registration successful!' ));
2017-01-02 15:43:36 +01:00
// User is already logged in - that means a supporter has registered an angel. Return to register page.
2018-10-14 18:24:42 +02:00
if ( $authUser ) {
2019-09-08 02:25:49 +02:00
throw_redirect ( page_link_to ( 'register' ));
2017-01-02 15:43:36 +01:00
}
2019-10-08 15:23:46 +02:00
// If a welcome message is present, display it on the next page
2018-09-25 17:33:31 +02:00
if ( $message = $config -> get ( 'welcome_msg' )) {
2019-10-08 15:23:46 +02:00
info (( new Parsedown ()) -> text ( $message ));
2017-01-02 15:43:36 +01:00
}
2020-11-15 18:47:30 +01:00
// Login the user
if ( $user -> oauth -> count ()) {
/** @var OAuth $provider */
$provider = $user -> oauth -> first ();
throw_redirect ( url ( '/oauth/' . $provider -> provider ));
}
2019-09-08 02:25:49 +02:00
throw_redirect ( page_link_to ( '/' ));
2017-01-02 03:57:23 +01:00
}
2012-12-01 11:39:03 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$buildup_start_date = time ();
$teardown_end_date = null ;
2018-09-25 17:33:31 +02:00
if ( $buildup = $config -> get ( 'buildup_start' )) {
/** @var Carbon $buildup */
$buildup_start_date = $buildup -> getTimestamp ();
}
if ( $teardown = $config -> get ( 'teardown_end' )) {
/** @var Carbon $teardown */
$teardown_end_date = $teardown -> getTimestamp ();
2016-12-23 16:22:46 +01:00
}
2017-01-02 15:43:36 +01:00
2020-11-15 18:47:30 +01:00
$form_data = $session -> get ( 'form_data' );
$session -> remove ( 'form_data' );
if ( ! $nick && ! empty ( $form_data [ 'name' ])) {
$nick = $form_data [ 'name' ];
}
if ( ! $email && ! empty ( $form_data [ 'email' ])) {
$email = $form_data [ 'email' ];
}
if ( ! $preName && ! empty ( $form_data [ 'first_name' ])) {
$preName = $form_data [ 'first_name' ];
}
if ( ! $lastName && ! empty ( $form_data [ 'last_name' ])) {
$lastName = $form_data [ 'last_name' ];
}
2017-01-02 03:57:23 +01:00
return page_with_title ( register_title (), [
2018-08-29 21:55:32 +02:00
__ ( 'By completing this form you\'re registering as a Chaos-Angel. This script will create you an account in the angel task scheduler.' ),
2017-01-02 15:43:36 +01:00
$msg ,
msg (),
form ([
div ( 'row' , [
div ( 'col-md-6' , [
div ( 'row' , [
div ( 'col-sm-4' , [
2020-11-14 01:51:03 +01:00
form_text (
'username' ,
__ ( 'Nick' ) . ' ' . entry_required (),
$nick ,
false ,
2020-12-02 14:43:11 +01:00
24 ,
2020-11-14 01:51:03 +01:00
'nickname'
),
2019-05-31 04:03:19 +02:00
form_info ( '' ,
2020-12-02 14:43:11 +01:00
__ ( 'Use up to 24 letters, numbers, connecting punctuations or spaces for your nickname.' ))
2017-01-02 15:43:36 +01:00
]),
div ( 'col-sm-8' , [
2020-11-14 01:51:03 +01:00
form_email (
'email' ,
__ ( 'E-Mail' ) . ' ' . entry_required (),
$email ,
false ,
2020-12-02 14:43:11 +01:00
'email' ,
254
2020-11-14 01:51:03 +01:00
),
2017-01-02 15:43:36 +01:00
form_checkbox (
'email_shiftinfo' ,
2018-10-05 15:35:14 +02:00
__ (
'The %s is allowed to send me an email (e.g. when my shifts change)' ,
[ config ( 'app_name' )]
),
2017-01-02 15:43:36 +01:00
$email_shiftinfo
),
2020-12-28 16:04:05 +01:00
form_checkbox (
'email_news' ,
__ ( 'Notify me of new news' ),
$email_news
),
2017-01-02 15:43:36 +01:00
form_checkbox (
'email_by_human_allowed' ,
2021-11-29 22:13:49 +01:00
__ ( 'To receive vouchers, agree that nick, email address, worked hours and shirt size will be stored until the next similar event. To withdraw your approval, send an email to <a href="mailto:%s">%1$s</a>.' , [ config ( 'privacy_email' )]),
2017-01-02 15:43:36 +01:00
$email_by_human_allowed
2020-12-28 16:04:05 +01:00
),
2017-01-02 15:43:36 +01:00
])
]),
2020-11-14 01:51:03 +01:00
div ( 'row' , [
div ( 'col-sm-6' , [
form_password ( 'password' , __ ( 'Password' ) . ' ' . entry_required ())
]),
div ( 'col-sm-6' , [
form_password ( 'password2' , __ ( 'Confirm password' ) . ' ' . entry_required ())
])
]),
2017-01-02 15:43:36 +01:00
div ( 'row' , [
2019-04-25 17:30:51 +02:00
$enable_planned_arrival ? div ( 'col-sm-6' , [
form_date (
2017-01-02 15:43:36 +01:00
'planned_arrival_date' ,
2018-08-29 21:55:32 +02:00
__ ( 'Planned date of arrival' ) . ' ' . entry_required (),
2017-01-02 15:43:36 +01:00
$planned_arrival_date , $buildup_start_date , $teardown_end_date
2019-04-25 17:30:51 +02:00
)
]) : '' ,
2017-01-02 15:43:36 +01:00
div ( 'col-sm-6' , [
$enable_tshirt_size ? form_select ( 'tshirt_size' ,
2018-08-29 21:55:32 +02:00
__ ( 'Shirt size' ) . ' ' . entry_required (),
$tshirt_sizes , $tshirt_size , __ ( 'Please select...' )) : ''
2017-01-02 15:43:36 +01:00
])
]),
form_checkboxes (
'angel_types' ,
2018-08-29 21:55:32 +02:00
__ ( 'What do you want to do?' ) . sprintf (
2017-01-21 19:37:42 +01:00
' (<a href="%s">%s</a>)' ,
2017-08-28 16:21:10 +02:00
page_link_to ( 'angeltypes' , [ 'action' => 'about' ]),
2018-08-29 21:55:32 +02:00
__ ( 'Description of job types' )
2017-01-02 15:43:36 +01:00
),
$angel_types ,
$selected_angel_types
),
form_info (
2017-01-03 14:12:17 +01:00
'' ,
2020-10-17 23:50:28 +02:00
__ ( 'Some angel types have to be confirmed later by a supporter at an introduction meeting. You can change your selection in the options section.' )
2017-01-02 15:43:36 +01:00
)
]),
div ( 'col-md-6' , [
div ( 'row' , [
2019-04-23 12:42:01 +02:00
$enable_dect ? div ( 'col-sm-4' , [
2020-11-14 01:51:03 +01:00
form_text ( 'dect' , __ ( 'DECT' ), $dect , false , 40 , 'tel-local' )
2019-04-23 12:42:01 +02:00
]) : '' ,
div ( $enable_dect ? 'col-sm-4' : 'col-sm-12' , [
2020-12-02 14:43:11 +01:00
form_text ( 'mobile' , __ ( 'Mobile' ), $mobile , false , 40 , 'tel-national' )
2017-01-02 15:43:36 +01:00
]),
2020-11-14 01:36:37 +01:00
$enable_pronoun ? div ( 'col-sm-4' , [
2020-12-02 14:43:11 +01:00
form_text ( 'pronoun' , __ ( 'Pronoun' ), $pronoun , false , 15 )
2020-11-14 01:36:37 +01:00
]) : '' ,
2017-01-02 15:43:36 +01:00
]),
2019-08-24 10:56:59 +02:00
$enable_user_name ? div ( 'row' , [
2017-01-02 15:43:36 +01:00
div ( 'col-sm-6' , [
2020-12-02 14:43:11 +01:00
form_text ( 'prename' , __ ( 'First name' ), $preName , false , 64 , 'given-name' )
2017-01-02 15:43:36 +01:00
]),
div ( 'col-sm-6' , [
2020-12-02 14:43:11 +01:00
form_text ( 'lastname' , __ ( 'Last name' ), $lastName , false , 64 , 'family-name' )
2017-01-02 15:43:36 +01:00
])
2019-08-24 10:56:59 +02:00
]) : '' ,
2018-08-29 21:55:32 +02:00
form_info ( entry_required () . ' = ' . __ ( 'Entry required!' ))
2017-01-02 15:43:36 +01:00
])
]),
2018-08-29 21:55:32 +02:00
form_submit ( 'submit' , __ ( 'Register' ))
2017-01-02 15:43:36 +01:00
])
]);
2011-06-02 00:48:29 +02:00
}
2017-08-30 19:57:01 +02:00
/**
* @ return string
*/
2017-01-02 03:57:23 +01:00
function entry_required ()
{
2021-07-22 21:22:21 +02:00
return icon ( 'exclamation-triangle' , 'text-info' );
2014-08-23 15:35:25 +02:00
}