Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
    /**
     * 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 '';
}
Example #5
0
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;
}