12 import(
'lib.pkp.classes.controllers.grid.GridHandler');
13 import(
'plugins.generic.customLocale.controllers.grid.CustomLocaleGridCellProvider');
14 import(
'classes.handler.Handler');
15 import(
'plugins.generic.customLocale.classes.CustomLocale');
17 import(
'plugins.generic.customLocale.controllers.grid.CustomLocaleAction');
38 parent::__construct();
40 array(ROLE_ID_MANAGER, ROLE_ID_SITE_ADMIN),
41 array(
'fetchGrid',
'editLocaleFile',
'updateLocale')
48 function authorize($request, &$args, $roleAssignments) {
49 import(
'lib.pkp.classes.security.authorization.ContextAccessPolicy');
51 return parent::authorize($request, $args, $roleAssignments);
60 $context = $request->getContext();
61 $contextId = $context->getId();
62 $locale = $args[
'locale'];
63 $filename = $args[
'key'];
66 $changes = (array) $args[
'changes'];
67 if (!empty($changes)) {
68 import(
'lib.pkp.classes.file.ContextFileManager');
70 $customFilesDir = $contextFileManager->getBasePath() .
"customLocale/$locale/";
71 $customFilePath =
"$customFilesDir/$filename";
73 if ($contextFileManager->fileExists($customFilePath)) {
74 $translations = Gettext\Translations::fromPoFile($customFilePath);
76 $translations = new \Gettext\Translations();
79 foreach ($changes as $key => $value) {
80 $value = str_replace(
"\r\n",
"\n", $value);
82 $translation = $translations->find(
'', $key);
84 $translation->setTranslation($value);
86 $translation = new \Gettext\Translation(
'', $key);
87 $translation->setTranslation($value);
88 $translations->append($translation);
91 if ($translation = $translations->find(
'', $key)) {
92 $translations->offsetUnset($translation->getId());
97 $contextFileManager->mkdirtree(dirname($customFilePath));
98 $translations->toPoFile($customFilePath);
102 $notificationMgr->createTrivialNotification($request->getUser()->getId());
107 $context = $request->getContext();
111 import(
'plugins.generic.customLocale.controllers.grid.form.LocaleFileForm');
113 $localeFileForm =
new LocaleFileForm(self::$plugin, $filename, $locale);
115 $localeFileForm->initData();
116 return new JSONMessage(
true, $localeFileForm->fetch($request));
127 parent::initialize($request, $args);
130 $this->
setTitle(
'plugins.generic.customLocale.customLocaleFiles');
138 'plugins.generic.customLocale.files.pageTitle',
140 'controllers/grid/gridCell.tpl',
146 'plugins.generic.customLocale.path',
148 'controllers/grid/gridCell.tpl',
157 function loadData($request, $filter) {
158 $context = $request->getContext();
159 $locales = $context->getSupportedLocaleNames();
161 $localeKeys = array_keys($locales);
163 $locale = $localeKeys[$filter[
'locale']];
164 $search = $filter[
'search'];
168 $localeFilesSelected = array();
171 for ($i=0; $i<
sizeof($localeFiles); $i++) {
172 if (strpos(strtolower($localeFiles[$i]),strtolower($search)) !==
false) {
173 $localeFilesSelected[$count] = $localeFiles[$i];
178 $localeFilesSelected = $localeFiles;
181 $gridDataElements = array();
182 for ($i=0; $i<
sizeof($localeFilesSelected); $i++) {
184 $customLocale->setId($i);
185 $customLocale->setLocale($locale);
186 $customLocale->setFilePath($localeFilesSelected[$i]);
187 $customLocale->setContextId($request->getContext()->getId());
188 $customLocale->setFileTitle($localeFilesSelected[$i]);
189 $gridDataElements[]=$customLocale;
192 return $gridDataElements;
199 import(
'lib.pkp.classes.controllers.grid.feature.PagingFeature');
212 return self::$plugin->getTemplateResource(
'customLocaleGridFilter.tpl');
218 function renderFilter($request, $filterData = array()) {
219 $locales = $request->getContext()->getSupportedLocaleNames();
220 return parent::renderFilter(
222 array_merge_recursive(
225 'localeOptions' => array_keys($locales),
226 'fieldOptions' => array(
'CUSTOMLOCALE_FIELD_PATH' =>
'fieldopt1'),
227 'matchOptions' => array(
228 'contains' =>
'form.contains',
242 $locale = $request->getUserVar(
'locale') ? (int)$request->getUserVar(
'locale') : 0;
243 $searchField = $request->getUserVar(
'searchField');
244 $searchMatch = $request->getUserVar(
'searchMatch');
245 $search = $request->getUserVar(
'search');
247 return $filterSelectionData = array(
249 'searchField' => $searchField,
250 'searchMatch' => $searchMatch,
251 'search' => $search ? $search :
''
261 $context = $request->getContext();
265 import(
'plugins.generic.customLocale.controllers.grid.form.LocaleFileForm');
267 $localeFileForm =
new LocaleFileForm(self::$plugin, $args[
'filePath'], $args[
'locale']);
268 $localeFileForm->initData();
269 return new JSONMessage(
true, $localeFileForm->fetch($request));