16 import(
'lib.pkp.classes.controllers.grid.GridHandler');
17 import(
'lib.pkp.classes.linkAction.request.RemoteActionConfirmationModal');
22 define(
'PLUGIN_GALLERY_ALL_CATEGORY_SEARCH_VALUE',
'all');
29 parent::__construct();
31 array(ROLE_ID_MANAGER, ROLE_ID_SITE_ADMIN),
32 array(
'fetchGrid',
'fetchRow',
'viewPlugin')
35 array(ROLE_ID_SITE_ADMIN),
36 array(
'installPlugin',
'upgradePlugin')
48 parent::initialize($request, $args);
52 $this->
setTitle(
'manager.plugins.pluginGallery');
57 import(
'lib.pkp.controllers.grid.plugins.PluginGalleryGridCellProvider');
67 $pluginGalleryGridCellProvider
78 $pluginGalleryGridCellProvider,
79 array(
'width' => 50,
'alignment' => COLUMN_ALIGNMENT_LEFT)
90 $pluginGalleryGridCellProvider,
99 function authorize($request, &$args, $roleAssignments) {
100 import(
'lib.pkp.classes.security.authorization.PolicySet');
101 $rolePolicy =
new PolicySet(COMBINING_PERMIT_OVERRIDES);
103 import(
'lib.pkp.classes.security.authorization.RoleBasedHandlerOperationPolicy');
104 foreach($roleAssignments as $role => $operations) {
109 return parent::authorize($request, $args, $roleAssignments);
124 return $pluginGalleryDao->getNewestCompatible(
126 $request->getUserVar(
'category'),
127 $request->getUserVar(
'pluginText')
135 return 'controllers/grid/plugins/pluginGalleryGridFilter.tpl';
142 $category = $request->getUserVar(
'category');
143 $pluginName = $request->getUserVar(
'pluginText');
145 if (is_null($category)) {
146 $category = PLUGIN_GALLERY_ALL_CATEGORY_SEARCH_VALUE;
149 return array(
'category' => $category,
'pluginText' => $pluginName);
157 $categories = array(PLUGIN_GALLERY_ALL_CATEGORY_SEARCH_VALUE => __(
'grid.plugin.allCategories'));
158 foreach ($categoriesSymbolic as $category) {
159 $categories[$category] = __(
"plugins.categories.$category");
161 $filterData[
'categories'] = $categories;
163 return parent::renderFilter($request, $filterData);
180 $templateMgr->assign(
'plugin', $plugin);
183 $installActionKey = $installConfirmKey = $installOp =
null;
184 switch ($plugin->getCurrentStatus()) {
185 case PLUGIN_GALLERY_STATE_NEWER:
186 $statusKey =
'manager.plugins.installedVersionNewer';
187 $statusClass =
'newer';
189 case PLUGIN_GALLERY_STATE_UPGRADABLE:
190 $statusKey =
'manager.plugins.installedVersionOlder';
191 $statusClass =
'older';
192 $installActionKey=
'grid.action.upgrade';
193 $installOp =
'upgradePlugin';
194 $installConfirmKey =
'manager.plugins.upgradeConfirm';
196 case PLUGIN_GALLERY_STATE_CURRENT:
197 $statusKey =
'manager.plugins.installedVersionNewest';
198 $statusClass =
'newest';
200 case PLUGIN_GALLERY_STATE_AVAILABLE:
201 $statusKey =
'manager.plugins.noInstalledVersion';
202 $statusClass =
'notinstalled';
203 $installActionKey=
'grid.action.install';
204 $installOp =
'installPlugin';
205 $installConfirmKey =
'manager.plugins.installConfirm';
207 case PLUGIN_GALLERY_STATE_INCOMPATIBLE:
208 $statusKey =
'manager.plugins.noCompatibleVersion';
209 $statusClass =
'incompatible';
211 default:
return assert(
false);
213 $templateMgr->assign(
'statusKey', $statusKey);
214 $templateMgr->assign(
'statusClass', $statusClass);
216 $router = $request->getRouter();
220 $request->getSession(),
221 __($installConfirmKey),
222 __($installActionKey),
223 $router->url($request,
null,
null, $installOp,
null, array(
'rowId' => $request->getUserVar(
'rowId'))),
226 __($installActionKey),
229 return new JSONMessage(
true, $templateMgr->fetch(
'controllers/grid/plugins/viewPlugin.tpl'));
248 $redirectUrl = $request->getDispatcher()->url($request, ROUTE_PAGE,
null,
'management',
'settings', array(
'website'), array(
'r' => uniqid()),
'plugins');
249 if (!$request->checkCSRF())
return $request->redirectUrlJson($redirectUrl);
253 $user = $request->getUser();
256 $destPath = tempnam(sys_get_temp_dir(),
'plugin');
261 $response = $client->request(
'GET', $plugin->getReleasePackage());
262 if (file_put_contents($destPath, $body->getContents()))
throw new Exception(
'Unable to save plugin to local file!');
263 }
catch (Exception $e) {
264 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array(
'contents' => $e->getMessage()));
265 return $request->redirectUrlJson($redirectUrl);
269 if (md5_file($destPath) !== $plugin->getReleaseMD5()) {
270 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array(
'contents' =>
'Incorrect MD5 checksum!'));
272 return $request->redirectUrlJson($redirectUrl);
276 import(
'lib.pkp.classes.plugins.PluginHelper');
279 $pluginDir = $pluginHelper->extractPlugin($destPath, $plugin->getProduct() .
'-' . $plugin->getVersion());
280 }
catch (Exception $e) {
281 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array(
'contents' => $e->getMessage()));
282 return $request->redirectUrlJson($redirectUrl);
290 $pluginVersion = $pluginHelper->installPlugin($pluginDir);
292 $pluginVersion = $pluginHelper->upgradePlugin($plugin->getCategory(), $plugin->getProduct(), $pluginDir);
296 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array(
'contents' => __(
'manager.plugins.upgradeSuccessful', array(
'versionString' => $pluginVersion->getVersionString(
false)))));
297 }
catch (Exception $e) {
298 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array(
'contents' => $e->getMessage()));
300 import(
'lib.pkp.classes.file.TemporaryFileManager');
302 $temporaryFileManager->rmtree($pluginDir);
305 return $request->redirectUrlJson($redirectUrl);
320 $rowId = (int) $request->getUserVar(
'rowId')-1;
321 if (!isset($plugins[$rowId]))
fatalError(
'Invalid row ID!');
322 return $plugins[$rowId];