function loadLanguage($template_name, $lang = '', $fatal = true, $force_reload = false) { global $user_info, $language, $settings, $context, $modSettings; global $db_show_debug, $sourcedir, $txt; static $already_loaded = array(); // Default to the user's language. if ($lang == '') { $lang = isset($user_info['language']) ? $user_info['language'] : $language; } // Do we want the English version of language file as fallback? if (empty($modSettings['disable_language_fallback']) && $lang != 'english') { loadLanguage($template_name, 'english', false); } if (!$force_reload && isset($already_loaded[$template_name]) && $already_loaded[$template_name] == $lang) { return $lang; } // Make sure we have $settings - if not we're in trouble and need to find it! if (empty($settings['default_theme_dir'])) { require_once $sourcedir . '/ScheduledTasks.php'; loadEssentialThemeData(); } // What theme are we in? $theme_name = basename($settings['theme_url']); if (empty($theme_name)) { $theme_name = 'unknown'; } // For each file open it up and write it out! foreach (explode('+', $template_name) as $template) { // Obviously, the current theme is most important to check. $attempts = array(array($settings['theme_dir'], $template, $lang, $settings['theme_url']), array($settings['theme_dir'], $template, $language, $settings['theme_url'])); // Do we have a base theme to worry about? if (isset($settings['base_theme_dir'])) { $attempts[] = array($settings['base_theme_dir'], $template, $lang, $settings['base_theme_url']); $attempts[] = array($settings['base_theme_dir'], $template, $language, $settings['base_theme_url']); } // Fall back on the default theme if necessary. $attempts[] = array($settings['default_theme_dir'], $template, $lang, $settings['default_theme_url']); $attempts[] = array($settings['default_theme_dir'], $template, $language, $settings['default_theme_url']); // Fall back on the English language if none of the preferred languages can be found. if (!in_array('english', array($lang, $language))) { $attempts[] = array($settings['theme_dir'], $template, 'english', $settings['theme_url']); $attempts[] = array($settings['default_theme_dir'], $template, 'english', $settings['default_theme_url']); } // Try to find the language file. $found = false; foreach ($attempts as $k => $file) { if (file_exists($file[0] . '/languages/' . $file[1] . '.' . $file[2] . '.php')) { // Include it! template_include($file[0] . '/languages/' . $file[1] . '.' . $file[2] . '.php'); // Note that we found it. $found = true; break; } } // That couldn't be found! Log the error, but *try* to continue normally. if (!$found && $fatal) { log_error(sprintf($txt['theme_language_error'], $template_name . '.' . $lang, 'template')); break; } } // Keep track of what we're up to soldier. if ($db_show_debug === true) { $context['debug']['language_files'][] = $template_name . '.' . $lang . ' (' . $theme_name . ')'; } // Remember what we have loaded, and in which language. $already_loaded[$template_name] = $lang; // Return the language actually loaded. return $lang; }
function scheduled_paid_subscriptions() { global $txt, $sourcedir, $scripturl, $modSettings, $language; // Start off by checking for removed subscriptions. $request = smf_db_query(' SELECT id_subscribe, id_member FROM {db_prefix}log_subscribed WHERE status = {int:is_active} AND end_time < {int:time_now}', array('is_active' => 1, 'time_now' => time())); while ($row = mysql_fetch_assoc($request)) { require_once $sourcedir . '/ManagePaid.php'; removeSubscription($row['id_subscribe'], $row['id_member']); } mysql_free_result($request); // Get all those about to expire that have not had a reminder sent. $request = smf_db_query(' SELECT ls.id_sublog, m.id_member, m.member_name, m.email_address, m.lngfile, s.name, ls.end_time FROM {db_prefix}log_subscribed AS ls INNER JOIN {db_prefix}subscriptions AS s ON (s.id_subscribe = ls.id_subscribe) INNER JOIN {db_prefix}members AS m ON (m.id_member = ls.id_member) WHERE ls.status = {int:is_active} AND ls.reminder_sent = {int:reminder_sent} AND s.reminder > {int:reminder_wanted} AND ls.end_time < ({int:time_now} + s.reminder * 86400)', array('is_active' => 1, 'reminder_sent' => 0, 'reminder_wanted' => 0, 'time_now' => time())); $subs_reminded = array(); while ($row = mysql_fetch_assoc($request)) { // If this is the first one load the important bits. if (empty($subs_reminded)) { require_once $sourcedir . '/lib/Subs-Post.php'; // Need the below for loadLanguage to work! loadEssentialThemeData(); } $subs_reminded[] = $row['id_sublog']; $replacements = array('PROFILE_LINK' => $scripturl . '?action=profile;area=subscriptions;u=' . $row['id_member'], 'REALNAME' => $row['member_name'], 'SUBSCRIPTION' => $row['name'], 'END_DATE' => strip_tags(timeformat($row['end_time']))); $emaildata = loadEmailTemplate('paid_subscription_reminder', $replacements, empty($row['lngfile']) || empty($modSettings['userLanguage']) ? $language : $row['lngfile']); // Send the actual email. sendmail($row['email_address'], $emaildata['subject'], $emaildata['body'], null, null, false, 2); } mysql_free_result($request); // Mark the reminder as sent. if (!empty($subs_reminded)) { smf_db_query(' UPDATE {db_prefix}log_subscribed SET reminder_sent = {int:reminder_sent} WHERE id_sublog IN ({array_int:subscription_list})', array('subscription_list' => $subs_reminded, 'reminder_sent' => 1)); } return true; }
/** * Check for old drafts and remove them */ public function remove_old_drafts() { global $modSettings; $db = database(); if (empty($modSettings['drafts_keep_days'])) { return true; } // init $drafts = array(); // We need this for language items loadEssentialThemeData(); // Find all of the old drafts $request = $db->query('', ' SELECT id_draft FROM {db_prefix}user_drafts WHERE poster_time <= {int:poster_time_old}', array('poster_time_old' => time() - 86400 * $modSettings['drafts_keep_days'])); while ($row = $db->fetch_row($request)) { $drafts[] = (int) $row[0]; } $db->free_result($request); // If we have old one, remove them if (count($drafts) > 0) { require_once SUBSDIR . '/Drafts.subs.php'; deleteDrafts($drafts, -1, false); } return true; }
/** * This is a simple function that returns nothing if the language file exist and english if it does not exist * This will help to make it possible to load each time the english language! * * @param string $template_name */ function sp_languageSelect($template_name) { global $user_info, $language, $settings; static $already_loaded = array(); if (isset($already_loaded[$template_name])) { return $already_loaded[$template_name]; } $lang = isset($user_info['language']) ? $user_info['language'] : $language; // Make sure we have $settings - if not we're in trouble and need to find it! if (empty($settings['default_theme_dir'])) { loadEssentialThemeData(); } // For each file open it up and write it out! $allTemplatesExists = array(); foreach (explode('+', $template_name) as $template) { // Obviously, the current theme is most important to check. $attempts = array(array($settings['theme_dir'], $template, $lang, $settings['theme_url']), array($settings['theme_dir'], $template, $language, $settings['theme_url'])); // Do we have a base theme to worry about? if (isset($settings['base_theme_dir'])) { $attempts[] = array($settings['base_theme_dir'], $template, $lang, $settings['base_theme_url']); $attempts[] = array($settings['base_theme_dir'], $template, $language, $settings['base_theme_url']); } // Fallback on the default theme if necessary. $attempts[] = array($settings['default_theme_dir'], $template, $lang, $settings['default_theme_url']); $attempts[] = array($settings['default_theme_dir'], $template, $language, $settings['default_theme_url']); // Try to find the language file. $allTemplatesExists[$template] = false; $already_loaded[$template] = 'english'; foreach ($attempts as $k => $file) { if (file_exists($file[0] . '/languages/' . $file[2] . '/' . $file[1] . '.' . $file[2] . '.php')) { $already_loaded[$template] = ''; $allTemplatesExists[$template] = true; break; } } } // So all need to be true that it work ;) foreach ($allTemplatesExists as $exist) { if (!$exist) { $already_loaded[$template_name] = 'english'; return 'english'; } } // Everything is fine, let's go back :D $already_loaded[$template_name] = ''; return ''; }
function cacheLanguage($template_name, $lang, $fatal, $theme_name) { global $language, $settings, $txt, $modSettings; global $sourcedir, $cachedir, $smcFunc; // Is the file writable? $can_write = !empty($modSettings['cache_enable']) && is_writable($cachedir) ? 1 : 0; // Assume it's not invalid! $invalid_file_found = false; // Lets assume we can cache the file and include it. $do_include = true; // Make sure we have $settings - if not we're in trouble and need to find it! if (empty($settings['default_theme_dir'])) { require_once $sourcedir . '/ScheduledTasks.php'; loadEssentialThemeData(); } // Open the file to write to. if ($can_write) { $fh = fopen($cachedir . '/lang_' . $template_name . '_' . $lang . '_' . $theme_name . '.php', 'w'); @flock($fh, LOCK_EX); fwrite($fh, '<' . '?php' . "\n"); } // For each file open it up and write it out! foreach (explode('+', $template_name) as $template) { // Obviously, the current theme is most important to check. $attempts = array(array($settings['theme_dir'], $template, $lang, $settings['theme_url']), array($settings['theme_dir'], $template, $language, $settings['theme_url'])); // Do we have a base theme to worry about? if (isset($settings['base_theme_dir'])) { $attempts[] = array($settings['base_theme_dir'], $template, $lang, $settings['base_theme_url']); $attempts[] = array($settings['base_theme_dir'], $template, $language, $settings['base_theme_url']); } // Fall back on the default theme if necessary. $attempts[] = array($settings['default_theme_dir'], $template, $lang, $settings['default_theme_url']); $attempts[] = array($settings['default_theme_dir'], $template, $language, $settings['default_theme_url']); // Fall back on the English language if none of the preferred languages can be found. if (!in_array('english', array($lang, $language))) { $attempts[] = array($settings['theme_dir'], $template, 'english', $settings['theme_url']); $attempts[] = array($settings['default_theme_dir'], $template, 'english', $settings['default_theme_url']); } // Try to find the language file. $found = false; foreach ($attempts as $k => $file) { if (file_exists($file[0] . '/languages/' . $file[1] . '.' . $file[2] . '.php')) { // Are we caching? if ($can_write) { foreach (file($file[0] . '/languages/' . $file[1] . '.' . $file[2] . '.php') as $line) { if (substr($line, 0, 2) != '?' . '>' && substr($line, 0, 2) != '<' . '?') { // Some common variables get parsed in... $line = preg_replace('~\\{NL\\}~', '\\\\n', $line); fwrite($fh, $line); } } } else { $do_include = false; } // Include it for fun. require $file[0] . '/languages/' . $file[1] . '.' . $file[2] . '.php'; // Note that we found it. $found = true; break; } } // That couldn't be found! Log the error, but *try* to continue normally. if (!$found) { $invalid_file_found = true; if ($fatal) { log_error(sprintf($txt['theme_language_error'], $template_name . '.' . $lang, 'template')); break; } } else { unset($language_url); } } if ($can_write) { fwrite($fh, '?' . '>'); @flock($fh, LOCK_UN); fclose($fh); // If we couldn't find the file don't cache it! if ($invalid_file_found) { @unlink($cachedir . '/lang_' . $template_name . '_' . $lang . '_' . $theme_name . '.php'); } } return $do_include; }