/** * Commits prefs to the database. */ function prefs_save() { global $prefs, $gmtoffset, $is_dst, $auto_dst, $timezone_key, $txp_user; // Update custom fields count from database schema and cache it as a hidden pref. // TODO: move this when custom fields are refactored. $max_custom_fields = count(preg_grep('/^custom_\\d+/', getThings('describe ' . safe_pfx('textpattern')))); set_pref('max_custom_fields', $max_custom_fields, 'publish', 2); $sql = array(); $sql[] = 'prefs_id = 1 and event != "" and type in(' . PREF_CORE . ', ' . PREF_PLUGIN . ', ' . PREF_HIDDEN . ')'; $sql[] = "(user_name = '' or (user_name='" . doSlash($txp_user) . "' and name not in(\n select name from " . safe_pfx('txp_prefs') . " where user_name = ''\n )))"; if (!get_pref('use_comments', 1, 1)) { $sql[] = "event != 'comments'"; } $prefnames = safe_rows_start("name, event, user_name, val", 'txp_prefs', join(' and ', $sql)); $post = stripPost(); if (isset($post['tempdir']) && empty($post['tempdir'])) { $post['tempdir'] = find_temp_dir(); } if (!empty($post['file_max_upload_size'])) { $post['file_max_upload_size'] = real_max_upload_size($post['file_max_upload_size']); } if (isset($post['auto_dst'])) { $prefs['auto_dst'] = $auto_dst = $post['auto_dst']; if (isset($post['is_dst']) && !$post['auto_dst']) { $is_dst = $post['is_dst']; } } // Forge $gmtoffset and $is_dst from $timezone_key if present. if (isset($post['timezone_key'])) { $key = $post['timezone_key']; $tzd = Txp::get('Textpattern_Date_Timezone')->getTimeZones(); if (isset($tzd[$key])) { $prefs['timezone_key'] = $timezone_key = $key; $post['gmtoffset'] = $prefs['gmtoffset'] = $gmtoffset = $tzd[$key]['offset']; $post['is_dst'] = $prefs['is_dst'] = $is_dst = Txp::get('Textpattern_Date_Timezone')->isDst(null, $key); } } if (isset($post['siteurl'])) { $post['siteurl'] = preg_replace('#^https?://#', '', rtrim($post['siteurl'], '/ ')); } while ($a = nextRow($prefnames)) { extract($a); if (!isset($post[$name]) || !has_privs('prefs.' . $event)) { continue; } if ($name === 'logging' && $post[$name] === 'none' && $post[$name] !== $val) { safe_truncate('txp_log'); } if ($name === 'expire_logs_after' && (int) $post[$name] !== (int) $val) { safe_delete('txp_log', 'time < date_sub(now(), interval ' . intval($post[$name]) . ' day)'); } update_pref($name, (string) $post[$name], null, null, null, null, (string) $user_name); } update_lastmod(); prefs_list(gTxt('preferences_saved')); }
/** * Commits prefs to the database. */ function prefs_save() { global $prefs, $gmtoffset, $is_dst, $auto_dst, $timezone_key, $txp_user; // Update custom fields count from database schema and cache it as a hidden pref. // TODO: move this when custom fields are refactored. $max_custom_fields = count(preg_grep('/^custom_\\d+/', getThings("DESCRIBE " . safe_pfx('textpattern')))); set_pref('max_custom_fields', $max_custom_fields, 'publish', 2); $sql = array(); $sql[] = "prefs_id = 1 AND event != '' AND type IN (" . PREF_CORE . ", " . PREF_PLUGIN . ", " . PREF_HIDDEN . ")"; $sql[] = "(user_name = '' OR (user_name = '" . doSlash($txp_user) . "' AND name NOT IN (\n SELECT name FROM " . safe_pfx('txp_prefs') . " WHERE user_name = ''\n )))"; if (!get_pref('use_comments', 1, 1)) { $sql[] = "event != 'comments'"; } $prefnames = safe_rows_start("name, event, user_name, val", 'txp_prefs', join(" AND ", $sql)); $post = stripPost(); if (isset($post['tempdir']) && empty($post['tempdir'])) { $post['tempdir'] = find_temp_dir(); } if (!empty($post['file_max_upload_size'])) { $post['file_max_upload_size'] = real_max_upload_size($post['file_max_upload_size']); } if (isset($post['auto_dst'])) { $prefs['auto_dst'] = $auto_dst = $post['auto_dst']; if (isset($post['is_dst']) && !$post['auto_dst']) { $is_dst = $post['is_dst']; } } // Forge $gmtoffset and $is_dst from $timezone_key if present. if (isset($post['timezone_key'])) { $key = $post['timezone_key']; $tzd = Txp::get('\\Textpattern\\Date\\Timezone')->getTimeZones(); if (isset($tzd[$key])) { $prefs['timezone_key'] = $timezone_key = $key; $post['gmtoffset'] = $prefs['gmtoffset'] = $gmtoffset = $tzd[$key]['offset']; $post['is_dst'] = $prefs['is_dst'] = $is_dst = Txp::get('\\Textpattern\\Date\\Timezone')->isDst(null, $key); } } if (isset($post['siteurl'])) { $post['siteurl'] = preg_replace('#^https?://#', '', rtrim($post['siteurl'], '/ ')); } while ($a = nextRow($prefnames)) { extract($a); if (!isset($post[$name]) || !has_privs('prefs.' . $event)) { continue; } if ($name === 'logging' && $post[$name] === 'none' && $post[$name] !== $val) { safe_truncate('txp_log'); } if ($name === 'expire_logs_after' && (int) $post[$name] !== (int) $val) { safe_delete('txp_log', "time < DATE_SUB(NOW(), INTERVAL " . intval($post[$name]) . " DAY)"); } update_pref($name, (string) $post[$name], null, null, null, null, (string) $user_name); } update_lastmod('preferences_saved'); prefs_list(gTxt('preferences_saved')); }
/** * Creates or updates a preference. * * @param string $name The name * @param string $val The value * @param string $event The section the preference appears in * @param int $type Either PREF_CORE, PREF_PLUGIN, PREF_HIDDEN * @param string $html The HTML control type the field uses. Can take a custom function name * @param int $position Used to sort the field on the Preferences panel * @param bool $is_private If PREF_PRIVATE, is created as a user pref * @return bool FALSE on error * @package Pref * @example * if (set_pref('myPref', 'value')) * { * echo "'myPref' created or updated."; * } */ function set_pref($name, $val, $event = 'publish', $type = PREF_CORE, $html = 'text_input', $position = 0, $is_private = PREF_GLOBAL) { $user_name = null; if ($is_private == PREF_PRIVATE) { $user_name = PREF_PRIVATE; } if (pref_exists($name, $user_name)) { return update_pref($name, (string) $val, null, null, null, null, $user_name); } return create_pref($name, $val, $event, $type, $html, $position, $user_name); }
function updateSitePath($here) { update_pref('path_to_site', $here); }
/** * Replacement for SQL NOW() * * This function can be used when constructing SQL SELECT queries as a * replacement for the NOW() function to allow the SQL server to cache the * queries. Should only be used when comparing with the Posted or Expired * columns from the textpattern (articles) table or the Created column from * the txp_file table. * * @param string $type Column name, lower case (one of 'posted', 'expires', 'created') * @param bool $update Force update * @return string SQL query string partial */ function now($type, $update = false) { static $nows = array(); static $time = null; if (!in_array($type, array('posted', 'expires', 'created'))) { return false; } if (isset($nows[$type])) { $now = $nows[$type]; } else { if ($time === null) { $time = time(); } $pref = 'sql_now_' . $type; $now = get_pref($pref, $time - 1); if ($time > $now or $update) { $table = $type === 'created' ? 'txp_file' : 'textpattern'; $where = '1=1 having utime > ' . $time . ' order by utime asc limit 1'; $now = safe_field('unix_timestamp(' . $type . ') as utime', $table, $where); $now = $now === false ? 2147483647 : intval($now) - 1; update_pref($pref, $now); $nows[$type] = $now; } } return 'from_unixtime(' . $now . ')'; }
function list_languages_post() { global $locale, $textarray; // Select and save active language $language = $this->ps('active_language'); $locale = doSlash(getlocale($language)); update_pref('language', $language); update_pref('locale', $locale); $textarray = load_lang($language); $locale = setlocale(LC_ALL, $locale); $this->_message(gTxt('preferences_saved')); }