Open Monograph Press  3.3.0
CustomLocaleGridHandler.inc.php
1 <?php
2 
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');
16 
17 import('plugins.generic.customLocale.controllers.grid.CustomLocaleAction');
18 
20 
22  var $form;
23 
25  static $plugin;
26 
30  static function setPlugin($plugin) {
31  self::$plugin = $plugin;
32  }
33 
37  function __construct() {
38  parent::__construct();
39  $this->addRoleAssignment(
40  array(ROLE_ID_MANAGER, ROLE_ID_SITE_ADMIN),
41  array('fetchGrid', 'editLocaleFile', 'updateLocale')
42  );
43  }
44 
48  function authorize($request, &$args, $roleAssignments) {
49  import('lib.pkp.classes.security.authorization.ContextAccessPolicy');
50  $this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
51  return parent::authorize($request, $args, $roleAssignments);
52  }
53 
59  function updateLocale($args, $request) {
60  $context = $request->getContext();
61  $contextId = $context->getId();
62  $locale = $args['locale'];
63  $filename = $args['key'];
64 
65  // save changes
66  $changes = (array) $args['changes'];
67  if (!empty($changes)) {
68  import('lib.pkp.classes.file.ContextFileManager');
69  $contextFileManager = new ContextFileManager($context->getId());
70  $customFilesDir = $contextFileManager->getBasePath() . "customLocale/$locale/";
71  $customFilePath = "$customFilesDir/$filename";
72 
73  if ($contextFileManager->fileExists($customFilePath)) {
74  $translations = Gettext\Translations::fromPoFile($customFilePath);
75  } else {
76  $translations = new \Gettext\Translations();
77  }
78 
79  foreach ($changes as $key => $value) {
80  $value = str_replace("\r\n", "\n", $value);
81  if (!empty($value)) {
82  $translation = $translations->find('', $key);
83  if ($translation) {
84  $translation->setTranslation($value);
85  } else {
86  $translation = new \Gettext\Translation('', $key);
87  $translation->setTranslation($value);
88  $translations->append($translation);
89  }
90  } else {
91  if ($translation = $translations->find('', $key)) {
92  $translations->offsetUnset($translation->getId());
93  }
94  }
95  }
96 
97  $contextFileManager->mkdirtree(dirname($customFilePath));
98  $translations->toPoFile($customFilePath);
99 
100  // Create success notification and close modal on save
101  $notificationMgr = new NotificationManager();
102  $notificationMgr->createTrivialNotification($request->getUser()->getId());
103  return new JSONMessage(false);
104  }
105 
106 
107  $context = $request->getContext();
108  $this->setupTemplate($request);
109 
110  // Create and present the edit form
111  import('plugins.generic.customLocale.controllers.grid.form.LocaleFileForm');
112 
113  $localeFileForm = new LocaleFileForm(self::$plugin, $filename, $locale);
114 
115  $localeFileForm->initData();
116  return new JSONMessage(true, $localeFileForm->fetch($request));
117  }
118 
119  //
120  // Overridden template methods
121  //
125  function initialize($request, $args=null) {
126 
127  parent::initialize($request, $args);
128 
129  // Set the grid details.
130  $this->setTitle('plugins.generic.customLocale.customLocaleFiles');
131  $this->setEmptyRowText('plugins.generic.customLocale.noneCreated');
132 
133  // Columns
134  $cellProvider = new CustomLocaleGridCellProvider();
135 
136  $this->addColumn(new GridColumn(
137  'filetitle',
138  'plugins.generic.customLocale.files.pageTitle',
139  null,
140  'controllers/grid/gridCell.tpl', // Default null not supported in OMP 1.1
141  $cellProvider
142  ));
143 
144  $this->addColumn(new GridColumn(
145  'filepath',
146  'plugins.generic.customLocale.path',
147  null,
148  'controllers/grid/gridCell.tpl', // Default null not supported in OMP 1.1
149  $cellProvider
150  ));
151 
152  }
153 
157  function loadData($request, $filter) {
158  $context = $request->getContext();
159  $locales = $context->getSupportedLocaleNames();
160 
161  $localeKeys = array_keys($locales);
162 
163  $locale = $localeKeys[$filter['locale']];
164  $search = $filter['search'];
165 
166  $localeFiles = CustomLocaleAction::getLocaleFiles($locale);
167 
168  $localeFilesSelected = array();
169  $count = 0;
170  if ($search!=='') {
171  for ($i=0; $i<sizeof($localeFiles); $i++) {
172  if (strpos(strtolower($localeFiles[$i]),strtolower($search)) !== false) {
173  $localeFilesSelected[$count] = $localeFiles[$i];
174  $count++;
175  }
176  }
177  } else {
178  $localeFilesSelected = $localeFiles;
179  }
180 
181  $gridDataElements = array();
182  for ($i=0; $i<sizeof($localeFilesSelected); $i++) {
183  $customLocale = new CustomLocale();
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;
190  }
191 
192  return $gridDataElements;
193  }
194 
198  function initFeatures($request, $args) {
199  import('lib.pkp.classes.controllers.grid.feature.PagingFeature');
200  return array(new PagingFeature());
201  }
202 
203 
204  //
205  // Public Grid Actions
206  //
211  function getFilterForm() {
212  return self::$plugin->getTemplateResource('customLocaleGridFilter.tpl');
213  }
214 
218  function renderFilter($request, $filterData = array()) {
219  $locales = $request->getContext()->getSupportedLocaleNames();
220  return parent::renderFilter(
221  $request,
222  array_merge_recursive(
223  $filterData,
224  array(
225  'localeOptions' => array_keys($locales),
226  'fieldOptions' => array('CUSTOMLOCALE_FIELD_PATH' => 'fieldopt1'),
227  'matchOptions' => array(
228  'contains' => 'form.contains',
229  'is' => 'form.is'
230  ),
231  )
232  )
233  );
234  }
235 
239  function getFilterSelectionData($request) {
240  // Get the search terms.
241 
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');
246 
247  return $filterSelectionData = array(
248  'locale' => $locale,
249  'searchField' => $searchField,
250  'searchMatch' => $searchMatch,
251  'search' => $search ? $search : ''
252  );
253  }
254 
260  function editLocaleFile($args, $request) {
261  $context = $request->getContext();
262  $this->setupTemplate($request);
263 
264  // Create and present the edit form
265  import('plugins.generic.customLocale.controllers.grid.form.LocaleFileForm');
266 
267  $localeFileForm = new LocaleFileForm(self::$plugin, $args['filePath'], $args['locale']);
268  $localeFileForm->initData();
269  return new JSONMessage(true, $localeFileForm->fetch($request));
270  }
271 }
272 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
GridHandler\setEmptyRowText
setEmptyRowText($emptyRowText)
Definition: GridHandler.inc.php:231
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
CustomLocaleGridHandler\initFeatures
initFeatures($request, $args)
Definition: CustomLocaleGridHandler.inc.php:201
ContextAccessPolicy
Class to control access to PKP applications' setup components.
Definition: ContextAccessPolicy.inc.php:17
CustomLocaleGridHandler\initialize
initialize($request, $args=null)
Definition: CustomLocaleGridHandler.inc.php:128
CustomLocaleGridHandler
Definition: CustomLocaleGridHandler.inc.php:19
CustomLocaleGridHandler\getFilterSelectionData
getFilterSelectionData($request)
Definition: CustomLocaleGridHandler.inc.php:242
CustomLocale
Definition: CustomLocale.inc.php:12
CustomLocaleAction\getLocaleFiles
static getLocaleFiles($locale)
Definition: CustomLocaleAction.inc.php:18
CustomLocaleGridHandler\editLocaleFile
editLocaleFile($args, $request)
Definition: CustomLocaleGridHandler.inc.php:263
CustomLocaleGridHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: CustomLocaleGridHandler.inc.php:51
GridHandler\addColumn
addColumn($column)
Definition: GridHandler.inc.php:335
ContextFileManager
Class defining operations for private context file management.
Definition: ContextFileManager.inc.php:19
CustomLocaleGridHandler\setPlugin
static setPlugin($plugin)
Definition: CustomLocaleGridHandler.inc.php:33
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
CustomLocaleGridCellProvider
Definition: CustomLocaleGridCellProvider.inc.php:15
CustomLocaleGridHandler\__construct
__construct()
Definition: CustomLocaleGridHandler.inc.php:40
CustomLocaleGridHandler\$plugin
static $plugin
Definition: CustomLocaleGridHandler.inc.php:28
PagingFeature
Add paging functionality to grids.
Definition: PagingFeature.inc.php:19
CustomLocaleGridHandler\updateLocale
updateLocale($args, $request)
Definition: CustomLocaleGridHandler.inc.php:62
GridHandler\setTitle
setTitle($title)
Definition: GridHandler.inc.php:215
LocaleFileForm
Definition: LocaleFileForm.inc.php:14
CustomLocaleGridHandler\getFilterForm
getFilterForm()
Definition: CustomLocaleGridHandler.inc.php:214
PKPHandler\setupTemplate
setupTemplate($request)
Definition: PKPHandler.inc.php:466
CustomLocaleGridHandler\$form
$form
Definition: CustomLocaleGridHandler.inc.php:25
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
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
CustomLocaleGridHandler\loadData
loadData($request, $filter)
Definition: CustomLocaleGridHandler.inc.php:160
CustomLocaleGridHandler\renderFilter
renderFilter($request, $filterData=array())
Definition: CustomLocaleGridHandler.inc.php:221