00001 <?php
00002
00018 class SiteSettingsDAO extends DAO {
00019 function &_getCache() {
00020 static $settingCache;
00021 if (!isset($settingCache)) {
00022 import('cache.CacheManager');
00023 $cacheManager =& CacheManager::getManager();
00024 $settingCache = $cacheManager->getCache(
00025 'siteSettings', 'site',
00026 array($this, '_cacheMiss')
00027 );
00028 }
00029 return $settingCache;
00030 }
00031
00038 function &getSetting($name, $locale = null) {
00039 $cache =& $this->_getCache();
00040 $returner = $cache->get($name);
00041 if ($locale !== null) {
00042 if (!isset($returner[$locale]) || !is_array($returner)) {
00043 unset($returner);
00044 $returner = null;
00045 return $returner;
00046 }
00047 return $returner[$locale];
00048 }
00049 return $returner;
00050 }
00051
00052 function _cacheMiss(&$cache, $id) {
00053 $settings =& $this->getSiteSettings();
00054 if (!isset($settings)) {
00055
00056 $cache->setCache($id, null);
00057 return null;
00058 }
00059 return $settings;
00060 }
00061
00066 function &getSiteSettings() {
00067 $siteSettings = array();
00068
00069 $result = &$this->retrieve(
00070 'SELECT setting_name, setting_value, setting_type, locale FROM site_settings'
00071 );
00072
00073 if ($result->RecordCount() == 0) {
00074 $returner = null;
00075 $result->Close();
00076 return $returner;
00077
00078 } else {
00079 while (!$result->EOF) {
00080 $row = &$result->getRowAssoc(false);
00081 $value = $this->convertFromDB($row['setting_value'], $row['setting_type']);
00082 if ($row['locale'] == '') $siteSettings[$row['setting_name']] = $value;
00083 else $siteSettings[$row['setting_name']][$row['locale']] = $value;
00084 $result->MoveNext();
00085 }
00086 $result->close();
00087 unset($result);
00088
00089 $cache =& $this->_getCache();
00090 $cache->setEntireCache($siteSettings);
00091
00092 return $siteSettings;
00093 }
00094 }
00095
00103 function updateSetting($name, $value, $type = null, $isLocalized = false) {
00104 $cache =& $this->_getCache();
00105 $cache->setCache($name, $value);
00106
00107 $keyFields = array('setting_name', 'locale');
00108
00109 if (!$isLocalized) {
00110 $value = $this->convertToDB($value, $type);
00111 $this->replace('site_settings',
00112 array(
00113 'setting_name' => $name,
00114 'setting_value' => $value,
00115 'setting_type' => $type,
00116 'locale' => ''
00117 ),
00118 $keyFields
00119 );
00120 } else {
00121 if (is_array($value)) foreach ($value as $locale => $localeValue) {
00122 $this->update('DELETE FROM site_settings WHERE setting_name = ? AND locale = ?', array($name, $locale));
00123 if (empty($localeValue)) continue;
00124 $type = null;
00125 $this->update('INSERT INTO site_settings
00126 (setting_name, setting_value, setting_type, locale)
00127 VALUES (?, ?, ?, ?)',
00128 array(
00129 $name, $this->convertToDB($localeValue, $type), $type, $locale
00130 )
00131 );
00132 }
00133 }
00134 }
00135
00140 function deleteSetting($name, $locale = null) {
00141 $cache =& $this->_getCache();
00142 $cache->setCache($name, null);
00143
00144 $params = array($name);
00145 $sql = 'DELETE FROM site_settings WHERE setting_name = ?';
00146 if ($locale !== null) {
00147 $params[] = $locale;
00148 $sql .= ' AND locale = ?';
00149 }
00150
00151 return $this->update($sql, $params);
00152 }
00153 }
00154
00155 ?>