language : NULL; if ($admin_setting = variable_get('linkchecker_mail_' . $key, FALSE)) { // An admin setting overrides the default string. return strtr($admin_setting, $variables); } else { // No override, return default string. switch ($key) { case 'broken_subject': return t('Content created by you has broken links at !site', $variables, $langcode); case 'broken_body': return t("!username,\n\nThank you for your participation at !site. Content created by you at !site has been found to contain broken links. Please consider visiting your User Page and checking for broken links at: !user_link.\n\nYou can change the broken link notification settings by logging in to your account and going to your account page.\n\n\n-- !site team", $variables, $langcode); } } } function linkchecker_mail_tokens($account, $language) { global $base_url; $tokens = array( '!username' => $account->name, '!user_link' => url('user/' . $account->uid . '/linkchecker'), '!site' => variable_get('site_name', 'Drupal'), '!uri' => $base_url, '!uri_brief' => preg_replace('!^https?://!', '', $base_url), '!mailto' => $account->mail, '!date' => format_date(time(), 'medium', '', NULL, $language->language)); return $tokens; } function _linkchecker_cron_start_time() { static $time = NULL; if (!isset($time)) { $time = time(); } return ($time); } function _linkchecker_notify_broken_links() { if (!variable_get('linkchecker_mail_broken', TRUE)) { return; } $time = _linkchecker_cron_start_time(); $status = 1; $day = date('N'); $mail_time = time(); $default = _linkchecker_default_user_settings(); $ignore_response_codes = preg_split('/(\r\n?|\n)/', variable_get('linkchecker_ignore_response_codes', "200\n302\n304\n401\n403")); $codes = db_escape_string(implode(',', $ignore_response_codes)); // Search for broken links in nodes and comments and blocks of all users. $sql = " SELECT u.*, lu.receive_mail, lu.min_days, lu.days, lu.last_mailed FROM {users} u LEFT JOIN {linkchecker_users} lu ON u.uid = lu.uid INNER JOIN ( SELECT DISTINCT c.uid FROM {linkchecker_links} ll INNER JOIN {linkchecker_comments} lc ON ll.last_checked >= $time AND ll.status = $status AND ll.code NOT IN ($codes) AND ll.lid = lc.lid INNER JOIN {comments} c ON lc.cid = c.cid UNION SELECT DISTINCT n.uid FROM {linkchecker_links} ll INNER JOIN {linkchecker_nodes} ln ON ll.last_checked >= $time AND ll.status = $status AND ll.code NOT IN ($codes) AND ll.lid = ln.lid INNER JOIN {node} n ON ln.nid = n.nid) q1 ON u.uid = q1.uid"; $results = db_query($sql); while ($user = db_fetch_object($results)) { $receive_mail = $user->receive_mail == NULL ? 1 : $user->receive_mail == NULL; if ($receive_mail == 1) { $last_mailed = $user->last_mailed == NULL ? 0 : $user->last_mailed; $days = $user->days == NULL ? 0 : $user->days; if ((($mail_time - $last_mailed) / 86400) > $days) { $days = $user->days == NULL ? NULL : explode(',', $user->days); if ($days == NULL || in_array($day, $days)) { try { drupal_mail('linkchecker', 'broken', $user->mail, user_preferred_language($user), array( 'account' => $user)); } catch (Exception $ex) { watchdog('mail', $ex->getMessage()); } if ($user->receive_mail == NULL) { db_query("INSERT INTO {linkchecker_users} (uid, receive_mail, min_days, days, last_mailed) VALUES (%d, %d, %d, '%s', %d)", $user->uid, $default['receive_mail'], $default['min_days'], $default['days'], $mail_time); } else { db_query("UPDATE {linkchecker_users} SET last_mailed = %d WHERE uid = %d", $mail_time, $user->uid); } } } } } } function _linkchecker_default_user_settings() { $settings = array(); $settings['receive_mail'] = 1; $settings['min_days'] = 7; $settings['days'] = '1,2,3,4,5,6,7'; return ($settings); }