query( 'SELECT ' . 't.*, ( SELECT COUNT(0) FROM tasks WHERE parent_id = t.id ) AS quantity ' . 'FROM ' . 'tasks AS t ' . 'WHERE ' . 'recursively = 1 AND deleted = 0 AND status = 2 AND date_end IS NOT NULL AND date_end < \'' . date( 'Y-m-d', strtotime( '+60 days', time() ) ) . '\' ' . 'HAVING quantity = 0 ORDER BY date_end ASC' ) -> fetchAll( \PDO::FETCH_ASSOC ); if ( is_array( $results ) and count( $results ) ) { foreach ( $results as $row ) { if ( $row['date_end_month_day'] == null ) { $mdb -> update( 'tasks', ['date_end_month_day' => date( 'j', strtotime( $row['date_end'] ) )], ['id' => $row['id']] ); $row['date_end_month_day'] = date( 'j', strtotime( $row['date_end'] ) ); } if ( $row['date_start_month_day'] == null ) { $mdb -> update( 'tasks', ['date_start_month_day' => date( 'j', strtotime( $row['date_start'] ) )], ['id' => $row['id']] ); $row['date_start_month_day'] = date( 'j', strtotime( $row['date_start'] ) ); } /* powtarzanie co x dni */ if ( $row['period'] == 1 ) { $new_date_end = date( 'Y-m-d', strtotime( '+' . $row['frequency'] . ' days', strtotime( $row['date_end'] ) ) ); if ( $row['date_start'] ) $new_date_start = date( 'Y-m-d', strtotime( '+' . $row['frequency'] . ' days', strtotime( $row['date_start'] ) ) ); } /* powtarzanie do x miesięcy */ if ( $row['period'] == 2 ) { $new_date_end = date( 'Y-m', strtotime( '+' . $row['frequency'] . ' months', strtotime( date( 'Y-m', strtotime( $row['date_end'] ) ) ) ) ); $max_days = date( 't', strtotime( $new_date_end ) ); if ( $max_days <= $row['date_end_month_day'] ) $new_date_end = date( 'Y-m-d', strtotime( $new_date_end . '-' . $max_days ) ); else $new_date_end = date( 'Y-m-d', strtotime( $new_date_end . '-' . $row['date_end_month_day'] ) ); if ( $row['date_start'] ) { $new_date_start = date( 'Y-m', strtotime( '+' . $row['frequency'] . ' months', strtotime( date( 'Y-m', strtotime( $row['date_start'] ) ) ) ) ); $max_days = date( 't', strtotime( $new_date_start ) ); if ( $max_days <= $row['date_start_month_day'] ) $new_date_start = date( 'Y-m-d', strtotime( $new_date_start . '-' . $max_days ) ); else $new_date_start = date( 'Y-m-d', strtotime( $new_date_start . '-' . $row['date_start_month_day'] ) ); } } /* powtarzanie co x lat */ if ( $row['period'] == 3 ) { $new_date_end = date( 'Y-m', strtotime( '+' . $row['frequency'] . ' years', strtotime( date( 'Y-m', strtotime( $row['date_end'] ) ) ) ) ); $max_days = date( 't', strtotime( $new_date_end ) ); if ( $max_days <= $row['date_end_month_day'] ) $new_date_end = date( 'Y-m-d', strtotime( $new_date_end . '-' . $max_days ) ); else $new_date_end = date( 'Y-m-d', strtotime( $new_date_end . '-' . $row['date_end_month_day'] ) ); if ( $row['date_start'] ) { $new_date_start = date( 'Y-m', strtotime( '+' . $row['frequency'] . ' years', strtotime( date( 'Y-m', strtotime( $row['date_start'] ) ) ) ) ); $max_days = date( 't', strtotime( $new_date_start ) ); if ( $max_days <= $row['date_start_month_day'] ) $new_date_start = date( 'Y-m-d', strtotime( $new_date_start . '-' . $max_days ) ); else $new_date_start = date( 'Y-m-d', strtotime( $new_date_start . '-' . $row['date_start_month_day'] ) ); } } /* sprawdzenie daty ostatniego powtórzenia */ if ( $row['recursive_last_date'] and $new_date_end > $row['recursive_last_date'] ) continue; $days_reminder = explode( ',', $row['reminders_interval'] ); $max_days_reminder = max( $days_reminder ); $status = 0; $task_users = $mdb -> select( 'task_user', 'user_id', ['task_id' => $row['id']] ); if ( in_array( 6, $task_users ) ) $status = 6; $row['show_in_calendar'] ? $show_in_calendar = 'on' : $show_in_calendar = 'off'; $new_task_id = \factory\Tasks::task_save( null, $row['id'], $row['created_by'], $row['name'], $row['text'], $new_date_start, $new_date_end, $row['project_id'], $row['client_id'], $row['pay_rate'], $row['reminders_interval'], $row['recursively'] ? 'on' : 'off', $row['frequency'], $row['period'], $task_users, $row['date_end_month_day'], $row['date_start_month_day'], null, $row['status_change_mail'], true, $status, $show_in_calendar, $row['priority'], $row['recursive_last_date'] ); if ( $new_task_id ) { $task_actions = $mdb -> select( 'task_action', [ 'name' ], [ 'task_id' => $row['id'] ] ); if ( $task_actions ) foreach ( $task_actions as $task_action ) $mdb -> insert( 'task_action', [ 'name' => $task_action['name'], 'task_id' => $new_task_id ] ); } return [ 'status' => 'ok', 'msg' => 'Dodawanie rekursywnych zadań: ' . $row['name'] . ' - ' . $new_date_end . "" ]; } } return false; } public static function import_tasks_from_email() { global $imap_tasks; if ( !is_array( $imap_tasks ) ) return [ 'status' => 'empty', 'msg' => 'Brak konfiguracji importu email.' ]; $importer = new \Domain\Tasks\MailToTaskImporter(); return $importer -> importFromImap( $imap_tasks ); } public static function tasks_emails() { global $mdb, $setttings; include_once 'libraries/phpmailer/class.phpmailer.php'; include_once 'libraries/phpmailer/class.smtp.php'; $results = $mdb -> query( 'SELECT ' . 't.* ' . 'FROM ' . 'tasks AS t ' . 'WHERE ' . 'reminders_interval IS NOT NULL AND reminders_send = 0 AND status != 2 AND deleted = 0 AND date_end IS NOT NULL' ) -> fetchAll( \PDO::FETCH_ASSOC ); if ( is_array( $results ) and!empty( $results ) ) foreach ( $results as $row ) { $days_counter = explode( ',', $row['reminders_interval'] ); rsort( $days_counter ); if ( is_array( $days_counter ) ) foreach ( $days_counter as $dc ) { if ( !$mdb -> count( 'tasks_reminders', [ 'AND' => [ 'task_id' => $row['id'], 'day_counter' => $dc ] ] ) ) { $send = false; $date_tmp = date( 'Y-m-d', strtotime( '+' . $dc . 'days', strtotime( date( 'Y-m-d' ) ) ) ); if ( $date_tmp >= $row['date_end'] ) { if ( !$mdb -> count( 'tasks_reminders', ['AND' => ['task_id' => $row['id'], 'day_counter' => $dc]] ) ) { $users = $mdb -> select( 'task_user', 'user_id', ['task_id' => $row['id']] ); if ( is_array( $users ) and count( $users ) ) { foreach ( $users as $user ) { $user_email = $mdb -> get( 'users', 'email', ['id' => $user] ); echo $user_mail; date( 'Y-m-d', strtotime( $row['date_end'] ) ) == date( 'Y-m-d' ) ? $date = 'dzisiaj' : $date = date( 'Y-m-d', strtotime( $row['date_end'] ) ); $subject = 'crmPRO - ' . $row['name'] . ' (#' . $row['id'] . ')'; $text = '
Witaj.
' . 'Otrzymałeś ten email z powodu ustawionego przypomnienia. Poniżej znajdziesz jego treść.
' . '---------------------------------------------------------------------------------------
' . '' . $row['name'] . ( $row['client_id'] ? ' / ' . \factory\Crm::get_client_name( $row['client_id'] ) : '' ) . ' (termin zadania: ' . $date . ')
' . '' . \factory\Crm::get_client_name( (int)$task['client_id'] ) . '
' . '' . htmlspecialchars_decode( $row['text'] ) . '
'; if ( \S::send_email( $user_email, $subject, $text ) ); $send = true; } if ( $send ) { $mdb -> insert( 'tasks_reminders', ['task_id' => $row['id'], 'day_counter' => $dc] ); return [ 'status' => 'ok', 'msg' => 'Wiadomość została wysłana na adres: ' . $user_email ]; } } else { $mdb -> insert( 'tasks_reminders', ['task_id' => $row['id'], 'day_counter' => $dc] ); return [ 'status' => 'ok', 'msg' => 'Wiadomość nie wysłana z powodu braku odbiorców.' ]; } } } } } if ( count( $days_counter ) == $mdb -> count( 'tasks_reminders', ['task_id' => $row['id']] ) ) $mdb -> update( 'tasks', ['reminders_send' => 1], ['id' => $row['id']] ); } return ['status' => 'empty']; } }