Open Journal Systems  3.3.0
LanguageGridHandler.inc.php
1 <?php
2 
16 import('lib.pkp.classes.controllers.grid.GridHandler');
17 import('lib.pkp.controllers.grid.languages.LanguageGridRow');
18 import('lib.pkp.controllers.grid.languages.LanguageGridCellProvider');
19 
24  function __construct() {
25  parent::__construct();
26  $this->addRoleAssignment(
27  ROLE_ID_MANAGER,
28  array('saveLanguageSetting', 'setContextPrimaryLocale')
29  );
30  }
31 
32 
33  //
34  // Implement template methods from PKPHandler.
35  //
39  function initialize($request, $args = null) {
40  parent::initialize($request, $args);
41 
42  // Load user-related translations.
44  LOCALE_COMPONENT_PKP_USER,
45  LOCALE_COMPONENT_PKP_MANAGER
46  );
47 
48  // Basic grid configuration.
49  $this->setTitle('common.languages');
50  }
51 
55  protected function getRowInstance() {
56  return new LanguageGridRow();
57  }
58 
59  //
60  // Public handler methods.
61  //
68  function saveLanguageSetting($args, $request) {
69  $locale = (string) $request->getUserVar('rowId');
70  $settingName = (string) $request->getUserVar('setting');
71  $settingValue = (boolean) $request->getUserVar('value');
72  $availableLocales = $this->getGridDataElements($request);
73  $context = $request->getContext();
74 
75  import('classes.core.Services');
76  $contextService = Services::get('context');
77 
78  $permittedSettings = array('supportedFormLocales', 'supportedSubmissionLocales', 'supportedLocales');
79  if (in_array($settingName, $permittedSettings) && $locale) {
80  $currentSettingValue = (array) $context->getData($settingName);
81  if (AppLocale::isLocaleValid($locale) && array_key_exists($locale, $availableLocales)) {
82  if ($settingValue) {
83  array_push($currentSettingValue, $locale);
84  if ($settingName == 'supportedFormLocales') {
85  // reload localized default context settings
86  $contextService->restoreLocaleDefaults($context, $request, $locale);
87  } elseif ($settingName == 'supportedSubmissionLocales') {
88  // if a submission locale is enabled, and this locale is not in the form locales, add it
89  $supportedFormLocales = (array) $context->getData('supportedFormLocales');
90  if (!in_array($locale, $supportedFormLocales)) {
91  array_push($supportedFormLocales, $locale);
92  $context = $contextService->edit($context, ['supportedFormLocales' => $supportedFormLocales], $request);
93  // reload localized default context settings
94  $contextService->restoreLocaleDefaults($context, $request, $locale);
95  }
96  }
97  } else {
98  $key = array_search($locale, $currentSettingValue);
99  if ($key !== false) unset($currentSettingValue[$key]);
100  if ($settingName == 'supportedFormLocales') {
101  // if a form locale is disabled, disable it form submission locales as well
102  $supportedSubmissionLocales = (array) $context->getData('supportedSubmissionLocales');
103  $key = array_search($locale, $supportedSubmissionLocales);
104  if ($key !== false) unset($supportedSubmissionLocales[$key]);
105  $supportedSubmissionLocales = array_values($supportedSubmissionLocales);
106  $context = $contextService->edit($context, ['supportedSubmissionLocales' => $supportedSubmissionLocales], $request);
107  }
108  }
109  }
110  }
111 
112  $context = $contextService->edit($context, [$settingName => $currentSettingValue], $request);
113 
114  $notificationManager = new NotificationManager();
115  $user = $request->getUser();
116  $notificationManager->createTrivialNotification(
117  $user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.localeSettingsSaved')));
118 
119  $localeNames = AppLocale::getAllLocales();
120  $newFormLocales = array_map(function($localeKey) use ($localeNames) {
121  return ['key' => $localeKey, 'label' => $localeNames[$localeKey]];
122  }, $context->getData('supportedFormLocales'));
123 
124  $json = DAO::getDataChangedEvent($locale);
125  $json->setGlobalEvent('set-form-languages', $newFormLocales);
126  return $json;
127  }
128 
135  function setContextPrimaryLocale($args, $request) {
136  $locale = (string) $request->getUserVar('rowId');
137  $context = $request->getContext();
138  $availableLocales = $this->getGridDataElements($request);
139 
140  if (AppLocale::isLocaleValid($locale) && array_key_exists($locale, $availableLocales)) {
141  // Make sure at least the primary locale is chosen as available
142  foreach (array('supportedLocales', 'supportedSubmissionLocales', 'supportedFormLocales') as $name) {
143  $$name = $context->getData($name);
144  if (!in_array($locale, $$name)) {
145  array_push($$name, $locale);
146  $context->updateSetting($name, $$name);
147  }
148  }
149 
150  $context->setPrimaryLocale($locale);
151  $contextDao = Application::getContextDAO();
152  $contextDao->updateObject($context);
153 
154  $notificationManager = new NotificationManager();
155  $user = $request->getUser();
156  $notificationManager->createTrivialNotification(
157  $user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.localeSettingsSaved')));
158  }
159 
160  return DAO::getDataChangedEvent();
161  }
162 
163  //
164  // Protected methods.
165  //
171  function getCellProvider() {
172  return new LanguageGridCellProvider();
173  }
174 
178  function addNameColumn() {
179  $cellProvider = $this->getCellProvider();
180 
181  // Locale name.
182  $this->addColumn(
183  new GridColumn(
184  'locale',
185  'grid.columns.locale',
186  null,
187  'controllers/grid/languages/localeNameCell.tpl',
188  $cellProvider
189  )
190  );
191  }
192 
197  function addPrimaryColumn($columnId) {
198  $cellProvider = $this->getCellProvider();
199 
200  $this->addColumn(
201  new GridColumn(
202  $columnId,
203  'locale.primary',
204  null,
205  'controllers/grid/common/cell/radioButtonCell.tpl',
206  $cellProvider
207  )
208  );
209  }
210 
214  function addManagementColumns() {
215  $cellProvider = $this->getCellProvider();
216  $this->addColumn(
217  new GridColumn(
218  'uiLocale',
219  'manager.language.ui',
220  null,
221  'controllers/grid/common/cell/selectStatusCell.tpl',
222  $cellProvider
223  )
224  );
225 
226  $this->addColumn(
227  new GridColumn(
228  'formLocale',
229  'manager.language.forms',
230  null,
231  'controllers/grid/common/cell/selectStatusCell.tpl',
232  $cellProvider
233  )
234  );
235 
236  $this->addColumn(
237  new GridColumn(
238  'submissionLocale',
239  'manager.language.submissions',
240  null,
241  'controllers/grid/common/cell/selectStatusCell.tpl',
242  $cellProvider
243  )
244  );
245  }
246 
254  function addManagementData($request, $data) {
255  $context = $request->getContext();
256 
257  if (is_array($data)) {
258  foreach ($data as $locale => $localeData) {
259  foreach (array('supportedFormLocales', 'supportedSubmissionLocales', 'supportedLocales') as $name) {
260  $data[$locale][$name] = in_array($locale, $context->getData($name));
261  // $data[$locale][$name] = in_array($locale, (array) $context->getData($name));
262  }
263  }
264  } else {
265  assert(false);
266  }
267 
268  return $data;
269  }
270 }
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
Application\getContextDAO
static getContextDAO()
Definition: Application.inc.php:137
PKPLocale\getAllLocales
static & getAllLocales()
Definition: PKPLocale.inc.php:537
GridColumn
The GridColumn class represents a column within a grid. It is used to format the data presented in a ...
Definition: GridColumn.inc.php:27
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
LanguageGridRow
Language grid row definition.
Definition: LanguageGridRow.inc.php:19
LanguageGridHandler\getCellProvider
getCellProvider()
Definition: LanguageGridHandler.inc.php:171
LanguageGridHandler\__construct
__construct()
Definition: LanguageGridHandler.inc.php:24
GridHandler\getGridDataElements
& getGridDataElements($request)
Definition: GridHandler.inc.php:345
LanguageGridHandler\setContextPrimaryLocale
setContextPrimaryLocale($args, $request)
Definition: LanguageGridHandler.inc.php:135
GridHandler\addColumn
addColumn($column)
Definition: GridHandler.inc.php:335
LanguageGridHandler\addPrimaryColumn
addPrimaryColumn($columnId)
Definition: LanguageGridHandler.inc.php:197
DAO\getDataChangedEvent
static getDataChangedEvent($elementId=null, $parentElementId=null, $content='')
Definition: DAO.inc.php:647
LanguageGridHandler\addManagementData
addManagementData($request, $data)
Definition: LanguageGridHandler.inc.php:254
LanguageGridHandler\getRowInstance
getRowInstance()
Definition: LanguageGridHandler.inc.php:55
LanguageGridCellProvider
Subclass for a language grid column's cell provider.
Definition: LanguageGridCellProvider.inc.php:18
GridHandler\setTitle
setTitle($title)
Definition: GridHandler.inc.php:215
GridHandler
This class defines basic operations for handling HTML grids. Grids are used to implement a standardiz...
Definition: GridHandler.inc.php:58
NotificationManager
Definition: NotificationManager.inc.php:19
LanguageGridHandler\addNameColumn
addNameColumn()
Definition: LanguageGridHandler.inc.php:178
LanguageGridHandler\addManagementColumns
addManagementColumns()
Definition: LanguageGridHandler.inc.php:214
LanguageGridHandler\saveLanguageSetting
saveLanguageSetting($args, $request)
Definition: LanguageGridHandler.inc.php:68
LanguageGridHandler\initialize
initialize($request, $args=null)
Definition: LanguageGridHandler.inc.php:39
PKPLocale\isLocaleValid
static isLocaleValid($locale)
Definition: PKPLocale.inc.php:505
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49
LanguageGridHandler
Handle language grid requests.
Definition: LanguageGridHandler.inc.php:20