root_path = $root_path; $this->php_ext = $php_ext; $this->phpbb_extension_manager = $phpbb_extension_manager; $this->phpbb_path_helper = $phpbb_path_helper; $this->db = $db; $this->config = $config; $this->phpbb_log = $log; $this->user = $user; } /** * Runs this cron task. * * @return null */ public function run() { global $request; $ext_path = $this->phpbb_path_helper->update_web_root_path($this->phpbb_extension_manager->get_extension_path('football/football', true)); include($ext_path . 'includes/functions.' . $this->php_ext); include($ext_path . 'includes/constants.' . $this->php_ext); // Load extension language file $this->user->add_lang_ext('football/football', 'info_acp_football'); // mode=test ? $mode = $request->variable('mode', ''); $days = $request->variable('days', 0); //Mail Settings $use_queue = false; $used_method = NOTIFY_EMAIL; $priority = MAIL_NORMAL_PRIORITY; $season = curr_season(); //Matchdays to close in 24 hours and 24 hours later // shift days to test $local_board_time = time() + ($days * 86400); if ($mode <> 'test') { // Update next run $run_time = getdate($this->config['football_remember_next_run']); $next_run = mktime($run_time['hours'], $run_time['minutes'], 0, date("n"), date("j") + 1, date("Y")); $this->config->set('football_remember_next_run', $next_run, true); } else { $message = sprintf($this->user->lang['LOG_FOOTBALL_MSG_TEST' . (($days == 0) ? '' : '_TRAVEL')], date("d.m.Y H:i", $local_board_time)); $this->phpbb_log->add('admin', ANONYMOUS, '', 'LOG_FOOTBALL_REMEMBER_CRON_TEST', false, array($message)); } $sql = 'SELECT m.*, l.* FROM ' . FOOTB_MATCHDAYS . ' AS m LEFT JOIN ' . FOOTB_LEAGUES . " AS l ON (l.season = m.season AND l.league = m.league) WHERE m.season >= $season AND m.status = 0 AND (DATE_SUB(m.delivery_date, INTERVAL '1 23:59' DAY_MINUTE) < FROM_UNIXTIME('$local_board_time')) AND (DATE_SUB(m.delivery_date, INTERVAL '1 00:00' DAY_MINUTE) > FROM_UNIXTIME('$local_board_time'))"; $result = $this->db->sql_query($sql); $toclose = $this->db->sql_fetchrowset($result); $this->db->sql_freeresult($result); // If we found matchdays to close, search missing bets and mail them foreach ($toclose as $close) { // prepare some variables $first_mail = true; $season = $close['season']; $league = $close['league']; $league_name = $close['league_name']; $league_short = $close['league_name_short']; $delivery = $close['delivery_date']; $matchday = $close['matchday']; $subject = sprintf($this->user->lang['FOOTBALL_REMEMBER_SUBJECT'], $league_short, $matchday); $usernames = ''; // find missing users $sql = 'SELECT u.user_email AS user_email, u.username AS username, u.user_id AS userid, u.user_lang FROM ' . FOOTB_MATCHES . ' AS m LEFT JOIN ' . FOOTB_LEAGUES . ' AS l ON (l.season = m.season AND l.league = m.league) LEFT JOIN ' . FOOTB_BETS . ' AS b ON (b.season = m.season AND b.league = m.league AND b.match_no = m.match_no) LEFT JOIN ' . PROFILE_FIELDS_DATA_TABLE. ' AS p ON p.user_id = b.user_id LEFT JOIN ' . USERS_TABLE. " AS u ON u.user_id = b.user_id WHERE m.season = $season AND m.league = $league AND m.matchday = $matchday AND ((b.goals_home = '') OR (b.goals_guest = '')) AND m.status = 0 AND p.pf_footb_rem_f = 1 AND (l.bet_in_time = 0 OR (l.bet_in_time = 1 AND (DATE_SUB(m.match_datetime, INTERVAL '1 23:59' DAY_MINUTE) < FROM_UNIXTIME('$local_board_time')) AND (DATE_SUB(m.match_datetime, INTERVAL '1 00:00' DAY_MINUTE) > FROM_UNIXTIME('$local_board_time')))) GROUP BY b.user_id UNION SELECT p.pf_footb_email AS user_email, u.username AS username, u.user_id AS userid, u.user_lang FROM " . FOOTB_MATCHES . ' AS m LEFT JOIN ' . FOOTB_LEAGUES . ' AS l ON (l.season = m.season AND l.league = m.league) LEFT JOIN ' . FOOTB_BETS . ' AS b ON (b.season = m.season AND b.league = m.league AND b.match_no = m.match_no) LEFT JOIN ' . PROFILE_FIELDS_DATA_TABLE. ' AS p ON p.user_id = b.user_id LEFT JOIN ' . USERS_TABLE. " AS u ON u.user_id = b.user_id WHERE m.season = $season AND m.league = $league AND m.matchday = $matchday AND ((b.goals_home = '') OR (b.goals_guest = '')) AND m.status = 0 AND p.pf_footb_rem_s = 1 AND (l.bet_in_time = 0 OR (l.bet_in_time = 1 AND (DATE_SUB(m.match_datetime, INTERVAL '1 23:59' DAY_MINUTE) < FROM_UNIXTIME('$local_board_time')) AND (DATE_SUB(m.match_datetime, INTERVAL '1 00:00' DAY_MINUTE) > FROM_UNIXTIME('$local_board_time')))) GROUP BY b.user_id "; $result = $this->db->sql_query($sql); $row = $this->db->sql_fetchrow($result); if (!$row) { $this->db->sql_freeresult($result); } else { // Send the messages include_once($this->root_path . 'includes/functions_messenger.' . $this->php_ext); $messenger = new \messenger($use_queue); include_once($this->root_path . 'includes/functions_user.' . $this->php_ext); $errored = false; $messenger->headers('X-AntiAbuse: Board servername - ' . $this->config['server_name']); $messenger->headers('X-AntiAbuse: User_id - ' . ANONYMOUS); $messenger->headers('X-AntiAbuse: Username - CRON TASK Football remember'); $messenger->headers('X-AntiAbuse: User IP - ' . $this->user->ip); $messenger->subject(htmlspecialchars_decode($subject)); $messenger->set_mail_priority($priority); do { // Send the messages $used_lang = $row['user_lang']; $mail_template_path = $ext_path . 'language/' . $used_lang . '/email/'; if ($mode <> 'test') { $messenger->to($row['user_email'], $row['username']); } else { // test send to board email $messenger->to($this->config['board_email'], $this->config['sitename']); } $messenger->template('footb_send_remember', $used_lang, $mail_template_path); $messenger->assign_vars(array( 'USERNAME' => $row['username'], 'LEAGUE' => $league_name, 'MATCHDAY' => $matchday, 'DELIVERY' => $delivery, 'CONTACT_EMAIL' => $this->config['board_contact']) ); if ($mode <> 'test') { if (!($messenger->send($used_method))) { $message = '' . sprintf($this->user->lang['FOOTBALL_REMEMBER_ERROR_EMAIL'], $league_short, $row['user_email']) . ''; $this->phpbb_log->add('critical', ANONYMOUS, '', 'LOG_ERROR_EMAIL', false, array($message)); $usernames .= (($usernames != '') ? ', ' : '') . $row['username']. '!'; } else { $usernames .= (($usernames != '') ? ', ' : '') . $row['username']; } } else { // Test mode if ($first_mail) { // only send one mail if (!($messenger->send($used_method))) { $message = '' . sprintf($this->user->lang['FOOTBALL_REMEMBER_ERROR_EMAIL'], $league_short, $row['user_email']) . ''; $this->phpbb_log->add('critical', ANONYMOUS, '', 'LOG_ERROR_EMAIL', false, array($message)); $usernames .= (($usernames != '') ? ', ' : '') . $row['username']. '!'; } else { $usernames .= (($usernames != '') ? ', ' : '') . $row['username']; } $first_mail = false; } else { $usernames .= (($usernames != '') ? ', ' : '') . $row['username']; } } } while ($row = $this->db->sql_fetchrow($result)); $this->db->sql_freeresult($result); // Only if mails have already been sent previously if ($usernames <> '') { // send mail to board administration $used_lang = $this->config['default_lang']; $mail_template_path = $ext_path . 'language/' . $used_lang . '/email/'; $subject = sprintf($this->user->lang['FOOTBALL_REMEMBER_SUBJECT_BOARD'], $league_short, $matchday); $messenger->to($this->config['board_email'], $this->config['sitename']); $messenger->subject(htmlspecialchars_decode($subject)); $messenger->template('footb_board_remember', $used_lang, $mail_template_path); $messenger->assign_vars(array( 'CONTACT_EMAIL' => $this->config['board_contact'], 'REMEMBER_LIST' => $usernames, ) ); if (!($messenger->send($used_method))) { $message = '' . sprintf($this->user->lang['FOOTBALL_REMEMBER_ERROR_EMAIL_BOARD'], $league_short, $this->config['board_email']) . ''; $this->phpbb_log->add('critical', ANONYMOUS, '', 'LOG_ERROR_EMAIL', false, array($message)); } else { $log_subject = sprintf($this->user->lang['FOOTBALL_REMEMBER_SEND'], $league_short, $usernames) ; $this->phpbb_log->add('admin', ANONYMOUS, '', 'LOG_FOOTBALL_REMEMBER_CRON', false, array($log_subject)); } } else { // Log the cronjob run $log_subject = sprintf($this->user->lang['FOOTBALL_REMEMBER_NOBODY']) ; $this->phpbb_log->add('admin', ANONYMOUS, '', 'LOG_FOOTBALL_REMEMBER_CRON', false, array($log_subject)); } } } if (sizeof($toclose) == 0) { // Log the cronjob run $log_subject = sprintf($this->user->lang['FOOTBALL_REMEMBER_NO_DELIVERY']) ; $this->phpbb_log->add('admin', ANONYMOUS, '', 'LOG_FOOTBALL_REMEMBER_CRON', false, array($log_subject)); } return; } /** * Returns whether this cron task can run, given current board configuration. * * @return bool */ public function is_runnable() { return (bool) $this->config['football_remember_enable']; } /** * Returns whether this cron task should run now, because next run time * has passed. * * @return bool */ public function should_run() { global $request; $mode = $request->variable('mode', ''); if ($mode <> 'test') { return $this->config['football_remember_next_run'] < time(); } else { return true; } } } ?>