16 import(
'lib.pkp.classes.controllers.grid.CategoryGridHandler');
17 import(
'lib.pkp.controllers.grid.plugins.form.UploadPluginForm');
18 import(
'lib.pkp.controllers.grid.plugins.PluginGalleryGridHandler');
27 array(
'enable',
'disable',
'manage',
'fetchGrid',
'fetchCategory',
'fetchRow'));
30 array(
'uploadPlugin',
'upgradePlugin',
'deletePlugin',
'saveUploadPlugin',
'uploadPluginFile'));
32 parent::__construct();
43 parent::initialize($request, $args);
55 import(
'lib.pkp.controllers.grid.plugins.PluginGridCellProvider');
64 'showTotalItemsNumber' =>
true,
65 'collapseAllColumnsInCategories' =>
true
77 $descriptionColumn->addFlag(
'html',
true);
84 'controllers/grid/common/cell/selectStatusCell.tpl',
89 $router = $request->getRouter();
93 if (in_array(ROLE_ID_SITE_ADMIN, $userRoles)) {
94 import(
'lib.pkp.classes.linkAction.request.AjaxModal');
101 $router->url($request,
null,
null,
'uploadPlugin'),
102 __(
'manager.plugins.upload'),
'modal_add_file'),
103 __(
'manager.plugins.upload'),
112 return 'controllers/grid/plugins/pluginGridFilter.tpl';
119 $category = $request->getUserVar(
'category');
120 $pluginName = $request->getUserVar(
'pluginName');
122 if (is_null($category)) {
123 $category = PLUGIN_GALLERY_ALL_CATEGORY_SEARCH_VALUE;
126 return array(
'category' => $category,
'pluginName' => $pluginName);
133 $categoriesSymbolic = $this->
loadData($request,
null);
134 $categories = array(PLUGIN_GALLERY_ALL_CATEGORY_SEARCH_VALUE => __(
'grid.plugin.allCategories'));
135 foreach ($categoriesSymbolic as $category) {
136 $categories[$category] = __(
"plugins.categories.$category");
138 $filterData[
'categories'] = $categories;
140 return parent::renderFilter($request, $filterData);
147 import(
'lib.pkp.controllers.grid.plugins.PluginCategoryGridRow');
158 import(
'lib.pkp.classes.site.VersionCheck');
161 $notHiddenPlugins = array();
162 foreach ((array) $plugins as $plugin) {
163 if (!$plugin->getHideManagement()) {
164 $notHiddenPlugins[$plugin->getName()] = $plugin;
166 $version = $plugin->getCurrentVersion();
167 if ($version ==
null) {
168 $versionFile = $plugin->getPluginPath() .
'/version.xml';
169 if ($fileManager->fileExists($versionFile)) {
171 $pluginVersion = $versionInfo[
'version'];
177 'plugins.'.$plugin->getCategory(),
178 basename($plugin->getPluginPath()),
181 $plugin->isSitePlugin()
184 $versionDao->insertVersion($pluginVersion,
true);
188 if (!is_null($filter) && isset($filter[
'pluginName']) && $filter[
'pluginName'] !=
"") {
190 $filteredPlugins = array();
191 foreach ($notHiddenPlugins as $plugin) {
192 $pluginName = $plugin->getDisplayName();
193 if (stristr($pluginName, $filter[
'pluginName']) !==
false) {
194 $filteredPlugins[$plugin->getName()] = $plugin;
197 return $filteredPlugins;
200 return $notHiddenPlugins;
215 if (is_array($filter) && isset($filter[
'category']) && array_search($filter[
'category'], $categories) !==
false) {
216 return array($filter[
'category'] => $filter[
'category']);
218 return array_combine($categories, $categories);
234 return $plugin->manage($args, $request);
245 if ($request->checkCSRF() && $plugin->getCanEnable()) {
246 $plugin->setEnabled(
true);
247 if (empty($args[
'disableNotification'])) {
248 $user = $request->getUser();
250 $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_PLUGIN_ENABLED, array(
'pluginName' => $plugin->getDisplayName()));
252 return DAO::getDataChangedEvent($request->getUserVar(
'plugin'), $request->getUserVar($this->getCategoryRowIdParameterName()));
265 if ($request->checkCSRF() && $plugin->getCanDisable()) {
266 $plugin->setEnabled(
false);
267 if (empty($args[
'disableNotification'])) {
268 $user = $request->getUser();
270 $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_PLUGIN_DISABLED, array(
'pluginName' => $plugin->getDisplayName()));
272 return DAO::getDataChangedEvent($request->getUserVar(
'plugin'), $request->getUserVar($this->getCategoryRowIdParameterName()));
304 import(
'lib.pkp.classes.file.TemporaryFileManager');
306 $user = $request->getUser();
309 if ($temporaryFile = $temporaryFileManager->handleUpload(
'uploadedFile', $user->getId())) {
311 $json->setAdditionalAttributes(array(
312 'temporaryFileId' => $temporaryFile->getId()
316 return new JSONMessage(
false, __(
'manager.plugins.uploadError'));
327 $function = $request->getUserVar(
'function');
329 $uploadPluginForm->readInputData();
331 if($uploadPluginForm->validate()) {
332 if($uploadPluginForm->execute()) {
347 if (!$request->checkCSRF())
return new JSONMessage(
false);
350 $category = $plugin->getCategory();
351 $productName = basename($plugin->getPluginPath());
354 $installedPlugin = $versionDao->getCurrentVersion(
'plugins.'.$category, $productName,
true);
357 $user = $request->getUser();
359 if ($installedPlugin) {
360 $pluginName = array(
'pluginName' => $plugin->getDisplayName());
361 $pluginDest =
Core::getBaseDir() . DIRECTORY_SEPARATOR .
'plugins' . DIRECTORY_SEPARATOR . $category . DIRECTORY_SEPARATOR . $productName;
362 $pluginLibDest =
Core::getBaseDir() . DIRECTORY_SEPARATOR . PKP_LIB_PATH . DIRECTORY_SEPARATOR .
'plugins' . DIRECTORY_SEPARATOR . $category . DIRECTORY_SEPARATOR . $productName;
368 $fileManager->rmtree($pluginDest);
369 $fileManager->rmtree($pluginLibDest);
372 if(is_dir($pluginDest) || is_dir($pluginLibDest)) {
373 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array(
'contents' => __(
'manager.plugins.deleteError', $pluginName)));
375 $versionDao->disableVersion(
'plugins.'.$category, $productName);
376 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array(
'contents' => __(
'manager.plugins.deleteSuccess', $pluginName)));
379 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array(
'contents' => __(
'manager.plugins.doesNotExist', $pluginName)));
392 import(
'lib.pkp.controllers.grid.plugins.form.UploadPluginForm');
394 $uploadPluginForm->initData();
396 return new JSONMessage(
true, $uploadPluginForm->fetch($request));