00001 <?php
00002
00015 import('lib.pkp.classes.controllers.grid.GridHandler');
00016
00017 import('controllers.grid.languages.LanguageGridRow');
00018 import('controllers.grid.languages.LanguageGridCellProvider');
00019
00020 class LanguageGridHandler extends GridHandler {
00024 function LanguageGridHandler() {
00025 parent::GridHandler();
00026 $this->addRoleAssignment(array(
00027 ROLE_ID_PRESS_MANAGER),
00028 array('saveLanguageSetting', 'setContextPrimaryLocale'));
00029 }
00030
00031
00032
00033
00034
00038 function authorize($request, $args, $roleAssignments) {
00039 import('classes.security.authorization.OmpPressAccessPolicy');
00040 $this->addPolicy(new OmpPressAccessPolicy($request, $roleAssignments));
00041 return parent::authorize($request, $args, $roleAssignments);
00042 }
00043
00047 function initialize(&$request) {
00048 parent::initialize($request);
00049
00050
00051 AppLocale::requireComponents(
00052 LOCALE_COMPONENT_PKP_USER,
00053 LOCALE_COMPONENT_OMP_MANAGER
00054 );
00055
00056
00057 $this->setTitle('common.languages');
00058 }
00059
00060
00061
00062
00063
00069 function saveLanguageSetting($args, &$request) {
00070 $locale = (string) $request->getUserVar('rowId');
00071 $settingName = (string) $request->getUserVar('setting');
00072 $settingValue = (boolean) $request->getUserVar('value');
00073 $availableLocales = $this->getGridDataElements($request);
00074 $press =& $request->getPress();
00075
00076 $permittedSettings = array('supportedFormLocales', 'supportedSubmissionLocales', 'supportedLocales');
00077 if (in_array($settingName, $permittedSettings) && $locale) {
00078 $currentSettingValue = $press->getSetting($settingName);
00079 if (AppLocale::isLocaleValid($locale) && array_key_exists($locale, $availableLocales)) {
00080 if ($settingValue) {
00081 array_push($currentSettingValue, $locale);
00082 } else {
00083 $key = array_search($locale, $currentSettingValue);
00084 if ($key !== false) unset($currentSettingValue[$key]);
00085 }
00086 }
00087 }
00088
00089 $press->updateSetting($settingName, $currentSettingValue);
00090 $pressDao =& DAORegistry::getDAO('PressDAO');
00091 $pressDao->updateObject($press);
00092
00093 $notificationManager = new NotificationManager();
00094 $user =& $request->getUser();
00095 $notificationManager->createTrivialNotification(
00096 $user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.localeSettingsSaved')));
00097
00098 return DAO::getDataChangedEvent($locale);
00099 }
00100
00106 function setContextPrimaryLocale($args, &$request) {
00107 $locale = (string) $request->getUserVar('rowId');
00108 $press =& $request->getPress();
00109 $availableLocales = $this->getGridDataElements($request);
00110
00111 if (AppLocale::isLocaleValid($locale) && array_key_exists($locale, $availableLocales)) {
00112
00113 foreach (array('supportedLocales', 'supportedSubmissionLocales', 'supportedFormLocales') as $name) {
00114 $$name = $press->getSetting($name);
00115 if (!in_array($locale, $$name)) {
00116 array_push($$name, $locale);
00117 $press->updateSetting($name, $$name);
00118 }
00119 }
00120
00121 $press->setPrimaryLocale($locale);
00122 $pressDao =& DAORegistry::getDAO('PressDAO');
00123 $pressDao->updateObject($press);
00124
00125 $notificationManager = new NotificationManager();
00126 $user =& $request->getUser();
00127 $notificationManager->createTrivialNotification(
00128 $user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.localeSettingsSaved')));
00129 }
00130
00131 return DAO::getDataChangedEvent();
00132 }
00133
00134
00135
00136
00142 function getCellProvider() {
00143 return new LanguageGridCellProvider();
00144 }
00145
00149 function addNameColumn() {
00150 $cellProvider = $this->getCellProvider();
00151
00152
00153 $this->addColumn(
00154 new GridColumn(
00155 'locale',
00156 'grid.columns.locale',
00157 null,
00158 'controllers/grid/languages/localeNameCell.tpl',
00159 $cellProvider
00160 )
00161 );
00162 }
00163
00168 function addPrimaryColumn($columnId) {
00169 $cellProvider = $this->getCellProvider();
00170
00171 $this->addColumn(
00172 new GridColumn(
00173 $columnId,
00174 'locale.primary',
00175 null,
00176 'controllers/grid/common/cell/radioButtonCell.tpl',
00177 $cellProvider
00178 )
00179 );
00180 }
00181
00185 function addManagementColumns() {
00186 $cellProvider = $this->getCellProvider();
00187 $this->addColumn(
00188 new GridColumn(
00189 'uiLocale',
00190 'manager.language.ui',
00191 null,
00192 'controllers/grid/common/cell/selectStatusCell.tpl',
00193 $cellProvider
00194 )
00195 );
00196
00197 $this->addColumn(
00198 new GridColumn(
00199 'submissionLocale',
00200 'manager.language.submissions',
00201 null,
00202 'controllers/grid/common/cell/selectStatusCell.tpl',
00203 $cellProvider
00204 )
00205 );
00206
00207 $this->addColumn(
00208 new GridColumn(
00209 'formLocale',
00210 'manager.language.forms',
00211 null,
00212 'controllers/grid/common/cell/selectStatusCell.tpl',
00213 $cellProvider
00214 )
00215 );
00216 }
00217
00225 function addManagementData(&$request, $data) {
00226 $press =& $request->getPress();
00227
00228 if (is_array($data)) {
00229 foreach ($data as $locale => $localeData) {
00230 foreach (array('supportedFormLocales', 'supportedSubmissionLocales', 'supportedLocales') as $name) {
00231 $data[$locale][$name] = in_array($locale, (array) $press->getSetting($name));
00232 }
00233 }
00234 } else {
00235 assert(false);
00236 }
00237
00238 return $data;
00239 }
00240 }
00241 ?>