2021-12-29 00:06:17 +01:00
< ? php
require_once 'utils.php' ;
$executed_actions = [];
function job_reset_availability () {
global $db , $executed_actions ;
$profiles = $db -> select ( " SELECT * FROM ` " . DB_PREFIX . " _profiles` " );
if ( ! is_null ( $profiles ) && count ( $profiles ) > 0 ) {
$list = [];
foreach ( $profiles as $profile ){
$list [] = [ $profile [ " id " ] => $profile [ " availability_minutes " ]];
}
$db -> insert (
DB_PREFIX . " _minutes " ,
[ " month " => date ( " m " ), " year " => date ( " Y " ), " list " => json_encode ( $list )]
);
$db -> exec ( " UPDATE ` " . DB_PREFIX . " _profiles` SET `availability_minutes` = 0 " );
$output = $list ;
$output_status = " ok " ;
} else {
$output = [ " profiles array empty " ];
$output_status = " error " ;
}
$executed_actions [] = [
" title " => " Reset availability minutes " ,
" description " => " Reset availability minutes for all profiles " ,
" output " => $output ,
" output_status " => $output_status
];
}
function job_increment_availability () {
global $db , $executed_actions ;
$profiles = $db -> select ( " SELECT * FROM ` " . DB_PREFIX . " _profiles` WHERE `available` = 1 " );
if ( ! is_null ( $profiles ) && count ( $profiles ) > 0 ) {
$output = [];
$output [] = $profiles ;
$output_status = " ok " ;
$queries = [];
foreach ( $profiles as $row ) {
$value = ( int ) $row [ " availability_minutes " ] + 5 ;
$id = $row [ " id " ];
$increment [ $id ] = $value ;
$count = $db -> update (
DB_PREFIX . " _profiles " ,
[ " availability_minutes " => $value ],
[ " id " => $id ]
);
$tmp = $id . " - " . $value . " " ;
$tmp .= $count == 1 ? " success " : " fail " ;
$queries [] = $tmp ;
}
$output [] = $queries ;
} else {
$output = [ " profiles array empty " ];
$output_status = " ok " ;
}
$executed_actions [] = [
" title " => " Increment availability minutes " ,
" description " => " Increment availability minutes for all available profiles " ,
" output " => $output ,
" output_status " => $output_status
];
}
function job_schedule_availability () {
2022-01-05 23:16:09 +01:00
global $availability , $db , $executed_actions ;
2021-12-29 13:13:28 +01:00
$result = $db -> select ( " SELECT * FROM ` " . DB_PREFIX . " _schedules`; " );
$schedules_check = [];
$schedules_users = [];
$schedules_check [ " schedules " ] = [];
$schedules_check [ " users " ] = [];
if ( ! empty ( $result )){
foreach ( $result as $key => $value ) {
$result [ $key ][ " schedules " ] = json_decode ( $result [ $key ][ " schedules " ], true );
}
$schedules_check [ " table " ] = $result ;
foreach ( $result as $row ) {
if ( ! is_null ( $row [ " last_exec " ])){
$last_exec = [
" day " => ( int ) explode ( " ; " , $row [ " last_exec " ])[ 0 ],
" hour " => ( int ) explode ( " : " , explode ( " ; " , $row [ " last_exec " ])[ 1 ])[ 0 ],
" minutes " => ( int ) explode ( " : " , $row [ " last_exec " ])[ 1 ]
];
} else {
$last_exec = null ;
}
$id = $row [ " id " ];
$user_id = $row [ " user " ];
/*
$selected_holidays = json_decode ( $row [ " holidays " ]);
$selected_holidays_dates = [];
foreach ( $selected_holidays as $holiday ){
$selected_holidays_dates [] = $user -> holidays -> getHoliday ( $holiday ) -> format ( 'Y-m-d' );
}
*/
foreach ( $row [ " schedules " ] as $value ) {
$schedule = [
" day " => ( int ) $value [ " day " ] + 1 ,
" hour " => ( int ) explode ( " : " , $value [ " hour " ])[ 0 ],
" minutes " => ( int ) explode ( " : " , $value [ " hour " ])[ 1 ]
];
$now = [
" day " => ( int ) date ( " N " ),
" hour " => ( int ) date ( " H " ),
" minutes " => ( int ) date ( " i " )
];
2022-01-06 23:24:23 +01:00
$manual_mode = $db -> selectValue ( " SELECT `manual_mode` FROM ` " . DB_PREFIX . " _profiles` WHERE `id` = ? " , [ $user_id ]);
2021-12-29 13:13:28 +01:00
if (
2022-01-06 23:24:23 +01:00
$manual_mode == 0 &&
2021-12-29 13:13:28 +01:00
$schedule [ " day " ] == $now [ " day " ] &&
$schedule [ " hour " ] == $now [ " hour " ] &&
$schedule [ " minutes " ] <= $now [ " minutes " ] &&
$now [ " minutes " ] - $schedule [ " minutes " ] <= 30
){
if ( ! in_array ( $user_id , $schedules_users )) $schedules_users [] = $user_id ;
2022-01-06 23:53:50 +01:00
$last_exec_new = $schedule [ " day " ] . " ; " . sprintf ( " %02d " , $schedule [ " hour " ]) . " : " . sprintf ( " %02d " , $schedule [ " minutes " ]);
$db -> update (
DB_PREFIX . " _schedules " ,
[ " last_exec " => $last_exec_new ],
[ " id " => $id ]
);
$availability -> change ( 1 , $user_id , false );
$schedules_check [ " schedules " ][] = [
" schedule " => $schedule ,
" now " => $now ,
" last_exec " => $last_exec ,
" last_exec_new " => $last_exec_new ,
];
2021-12-29 13:13:28 +01:00
}
}
}
$schedules_check [ " users " ] = $schedules_users ;
2022-01-07 00:58:10 +01:00
$profiles = $db -> select ( " SELECT id FROM ` " . DB_PREFIX . " _profiles` WHERE `manual_mode` = 0 " );
2021-12-29 13:13:28 +01:00
foreach ( $profiles as $profile ) {
if ( ! in_array ( $profile [ " id " ], $schedules_users )){
2022-01-06 22:16:15 +01:00
$availability -> change ( 0 , $profile [ " id " ], false );
2021-12-29 13:13:28 +01:00
}
}
$output = $schedules_check ;
$output_status = " ok " ;
} else {
$output = [ " schedules array empty " ];
$output_status = " ok " ;
}
$executed_actions [] = [
" title " => " Schedule availability " ,
" description " => " Update availability for all users based on schedules " ,
" output " => $output ,
" output_status " => $output_status
];
2021-12-29 00:06:17 +01:00
}
2022-01-06 23:53:50 +01:00
function job_send_notification_if_manual_mode () {
global $db , $executed_actions ;
if (
( int ) date ( " H " ) === 7 &&
( int ) date ( " i " ) - 5 < 0
) {
$profiles = $db -> select ( " SELECT * FROM ` " . DB_PREFIX . " _profiles` WHERE `manual_mode` = 1 " );
$notified_users = [];
foreach ( $profiles as $profile ) {
$notified_users [] = $profiles [ " id " ];
$stato = $profile [ " available " ] ? " disponibile " : " non disponibile " ;
2022-01-07 00:38:43 +01:00
sendTelegramNotificationToUser ( " ⚠️ Attenzione! La tua disponibilità <b>non segue la programmazione oraria</b>. \n Attualmente sei <b> { $stato } </b>. \n Scrivi \" /programma \" se vuoi ripristinare la programmazione. " , $profile [ " id " ]);
2022-01-06 23:53:50 +01:00
}
$output = $notified_users ;
$output_status = " ok " ;
} else {
$output = [ " notification not sent " ];
$output_status = " ok " ;
}
$executed_actions [] = [
" title " => " Send notification if manual mode " ,
" description " => " Send notification to users at 7:00 if they are in manual mode " ,
" output " => $output ,
" output_status " => $output_status
];
}
2021-12-29 00:06:17 +01:00
function cronRouter ( FastRoute\RouteCollector $r ) {
$r -> addRoute (
2021-12-29 15:42:58 +01:00
'POST' ,
2021-12-29 00:06:17 +01:00
'/execute' ,
function ( $vars ) {
global $db , $executed_actions ;
2021-12-29 17:08:01 +01:00
$cron_job_allowed = get_option ( " cron_job_enabled " , false ) && (( isset ( $_POST [ 'cron' ]) && $_POST [ 'cron' ] == " cron_job- " . get_option ( " cron_job_code " )) || ( isset ( $_SERVER [ 'HTTP_CRON' ]) && $_SERVER [ 'HTTP_CRON' ] == " cron_job- " . get_option ( " cron_job_code " )));
2021-12-29 00:06:17 +01:00
if ( ! $cron_job_allowed ) {
statusCode ( 403 );
exit ();
}
job_schedule_availability ();
2022-01-07 00:00:36 +01:00
job_reset_availability ();
2021-12-29 13:13:28 +01:00
job_increment_availability ();
2022-01-06 23:53:50 +01:00
job_send_notification_if_manual_mode ();
2021-12-29 00:06:17 +01:00
apiResponse ([ " excuted_actions " => $executed_actions ]);
}
);
2022-01-07 00:58:10 +01:00
}