00001 <?php
00002
00015
00016
00017
00018 class AdminLanguagesHandler extends AdminHandler {
00019
00023 function languages() {
00024 parent::validate();
00025 parent::setupTemplate(true);
00026
00027 $site = &Request::getSite();
00028
00029 $templateMgr = &TemplateManager::getManager();
00030 $templateMgr->assign('localeNames', Locale::getAllLocales());
00031 $templateMgr->assign('primaryLocale', $site->getPrimaryLocale());
00032 $templateMgr->assign('supportedLocales', $site->getSupportedLocales());
00033 $templateMgr->assign('installedLocales', $site->getInstalledLocales());
00034 $templateMgr->assign('uninstalledLocales', array_diff(array_keys(Locale::getAllLocales()), $site->getInstalledLocales()));
00035 $templateMgr->assign('helpTopicId', 'site.siteManagement');
00036
00037 import('i18n.LanguageAction');
00038 $languageAction =& new LanguageAction();
00039 if ($languageAction->isDownloadAvailable()) {
00040 $templateMgr->assign('downloadAvailable', true);
00041 $templateMgr->assign('downloadableLocales', $languageAction->getDownloadableLocales());
00042 }
00043
00044 $templateMgr->display('admin/languages.tpl');
00045 }
00046
00050 function saveLanguageSettings() {
00051 parent::validate();
00052 parent::setupTemplate(true);
00053
00054 $site = &Request::getSite();
00055
00056 $primaryLocale = Request::getUserVar('primaryLocale');
00057 $supportedLocales = Request::getUserVar('supportedLocales');
00058
00059 if (Locale::isLocaleValid($primaryLocale)) {
00060 $site->setPrimaryLocale($primaryLocale);
00061 }
00062
00063 $newSupportedLocales = array();
00064 if (isset($supportedLocales) && is_array($supportedLocales)) {
00065 foreach ($supportedLocales as $locale) {
00066 if (Locale::isLocaleValid($locale)) {
00067 array_push($newSupportedLocales, $locale);
00068 }
00069 }
00070 }
00071 if (!in_array($primaryLocale, $newSupportedLocales)) {
00072 array_push($newSupportedLocales, $primaryLocale);
00073 }
00074 $site->setSupportedLocales($newSupportedLocales);
00075
00076 $siteDao = &DAORegistry::getDAO('SiteDAO');
00077 $siteDao->updateSite($site);
00078
00079 AdminLanguagesHandler::removeLocalesFromJournals();
00080
00081 $templateMgr = &TemplateManager::getManager();
00082 $templateMgr->assign(array(
00083 'currentUrl' => Request::url(null, null, 'languages'),
00084 'pageTitle' => 'common.languages',
00085 'message' => 'common.changesSaved',
00086 'backLink' => Request::url(null, 'admin'),
00087 'backLinkLabel' => 'admin.siteAdmin'
00088 ));
00089 $templateMgr->display('common/message.tpl');
00090 }
00091
00095 function installLocale() {
00096 parent::validate();
00097
00098 $site = &Request::getSite();
00099 $installLocale = Request::getUserVar('installLocale');
00100
00101 if (isset($installLocale) && is_array($installLocale)) {
00102 $installedLocales = $site->getInstalledLocales();
00103
00104 foreach ($installLocale as $locale) {
00105 if (Locale::isLocaleValid($locale) && !in_array($locale, $installedLocales)) {
00106 array_push($installedLocales, $locale);
00107 Locale::installLocale($locale);
00108 }
00109 }
00110
00111 $site->setInstalledLocales($installedLocales);
00112 $siteDao = &DAORegistry::getDAO('SiteDAO');
00113 $siteDao->updateSite($site);
00114 }
00115
00116 Request::redirect(null, null, 'languages');
00117 }
00118
00122 function uninstallLocale() {
00123 parent::validate();
00124
00125 $site = &Request::getSite();
00126 $locale = Request::getUserVar('locale');
00127
00128 if (isset($locale) && !empty($locale) && $locale != $site->getPrimaryLocale()) {
00129 $installedLocales = $site->getInstalledLocales();
00130
00131 if (in_array($locale, $installedLocales)) {
00132 $installedLocales = array_diff($installedLocales, array($locale));
00133 $site->setInstalledLocales($installedLocales);
00134 $supportedLocales = $site->getSupportedLocales();
00135 $supportedLocales = array_diff($supportedLocales, array($locale));
00136 $site->setSupportedLocales($supportedLocales);
00137 $siteDao = &DAORegistry::getDAO('SiteDAO');
00138 $siteDao->updateSite($site);
00139
00140 AdminLanguagesHandler::removeLocalesFromJournals();
00141 Locale::uninstallLocale($locale);
00142 }
00143 }
00144
00145 Request::redirect(null, null, 'languages');
00146 }
00147
00151 function reloadLocale() {
00152 parent::validate();
00153
00154 $site = &Request::getSite();
00155 $locale = Request::getUserVar('locale');
00156
00157 if (in_array($locale, $site->getInstalledLocales())) {
00158 Locale::reloadLocale($locale);
00159 }
00160
00161 Request::redirect(null, null, 'languages');
00162 }
00163
00167 function removeLocalesFromJournals() {
00168 $site = &Request::getSite();
00169 $siteSupportedLocales = $site->getSupportedLocales();
00170
00171 $journalDao = &DAORegistry::getDAO('JournalDAO');
00172 $settingsDao = &DAORegistry::getDAO('JournalSettingsDAO');
00173 $journals = &$journalDao->getJournals();
00174 $journals = &$journals->toArray();
00175 foreach ($journals as $journal) {
00176 $primaryLocale = $journal->getPrimaryLocale();
00177 $supportedLocales = $journal->getSetting('supportedLocales');
00178
00179 if (isset($primaryLocale) && !in_array($primaryLocale, $siteSupportedLocales)) {
00180 $journal->setPrimaryLocale($site->getPrimaryLocale());
00181 $journalDao->updateJournal($journal);
00182 }
00183
00184 if (is_array($supportedLocales)) {
00185 $supportedLocales = array_intersect($supportedLocales, $siteSupportedLocales);
00186 $settingsDao->updateSetting($journal->getJournalId(), 'supportedLocales', $supportedLocales, 'object');
00187 }
00188 }
00189 }
00190
00194 function downloadLocale() {
00195 parent::validate();
00196 $locale = Request::getUserVar('locale');
00197
00198 import('i18n.LanguageAction');
00199 $languageAction =& new LanguageAction();
00200
00201 if (!$languageAction->isDownloadAvailable()) Request::redirect(null, null, 'languages');
00202
00203 if (!preg_match('/^[a-z]{2}_[A-Z]{2}$/', $locale)) {
00204 Request::redirect(null, null, 'languages');
00205 }
00206
00207 $templateMgr =& TemplateManager::getManager();
00208
00209 $errors = array();
00210 if (!$languageAction->downloadLocale($locale, $errors)) {
00211 $templateMgr->assign('errors', $errors);
00212 $templateMgr->display('admin/languageDownloadErrors.tpl');
00213 return;
00214 }
00215 $templateMgr->assign('messageTranslated', Locale::translate('admin.languages.localeInstalled', array('locale' => $locale)));
00216 $templateMgr->assign('backLink', Request::url(null, null, 'languages'));
00217 $templateMgr->assign('backLinkLabel', 'admin.languages.languageSettings');
00218 $templateMgr->display('common/message.tpl');
00219 }
00220 }
00221
00222 ?>