Example #1
0
 /**
  * @copydoc Form::execute()
  */
 function execute($request)
 {
     parent::execute($request);
     // Retrieve the temporary file.
     $user = $request->getUser();
     $temporaryFileId = $this->getData('temporaryFileId');
     $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO');
     $temporaryFile = $temporaryFileDao->getTemporaryFile($temporaryFileId, $user->getId());
     $pluginHelper = new PluginHelper();
     $errorMsg = null;
     $pluginDir = $pluginHelper->extractPlugin($temporaryFile->getFilePath(), $temporaryFile->getOriginalFileName(), $errorMsg);
     $notificationMgr = new NotificationManager();
     if ($pluginDir) {
         if ($this->_function == PLUGIN_ACTION_UPLOAD) {
             $pluginVersion = $pluginHelper->installPlugin($pluginDir, $errorMsg);
             if ($pluginVersion) {
                 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('manager.plugins.installSuccessful', array('versionNumber' => $pluginVersion->getVersionString(false)))));
             }
         } else {
             if ($this->_function == PLUGIN_ACTION_UPGRADE) {
                 $pluginVersion = $pluginHelper->upgradePlugin($request->getUserVar('category'), $request->getUserVar('plugin'), $pluginDir, $errorMsg);
                 if ($pluginVersion) {
                     $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('manager.plugins.upgradeSuccessful', array('versionString' => $pluginVersion->getVersionString(false)))));
                 }
             }
         }
     } else {
         $errorMsg = __('manager.plugins.invalidPluginArchive');
     }
     if ($errorMsg) {
         $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array('contents' => $errorMsg));
         return false;
     }
     return true;
 }
 /**
  * Install or upgrade a plugin
  */
 function installPlugin($args, $request, $isUpgrade = false)
 {
     $plugin = $this->_getSpecifiedPlugin($request);
     $notificationMgr = new NotificationManager();
     $user = $request->getUser();
     $dispatcher = $request->getDispatcher();
     // Download the file and ensure the MD5 sum
     $fileManager = new FileManager();
     $destPath = tempnam(sys_get_temp_dir(), 'plugin');
     $fileManager->copyFile($plugin->getReleasePackage(), $destPath);
     if (md5_file($destPath) !== $plugin->getReleaseMD5()) {
         fatalError('Incorrect MD5 checksum!');
     }
     // Extract the plugin
     import('lib.pkp.classes.plugins.PluginHelper');
     $pluginHelper = new PluginHelper();
     $errorMsg = null;
     if (!($pluginDir = $pluginHelper->extractPlugin($destPath, $plugin->getProduct() . '-' . $plugin->getVersion(), $errorMsg))) {
         $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array('contents' => $errorMsg));
     }
     // Install the plugin
     if (!$isUpgrade) {
         if (!($pluginVersion = $pluginHelper->installPlugin($pluginDir, $errorMsg))) {
             $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array('contents' => $errorMsg));
         }
     } else {
         if (!($pluginVersion = $pluginHelper->upgradePlugin($plugin->getCategory(), $plugin->getProduct(), $pluginDir, $errorMsg))) {
             $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array('contents' => $errorMsg));
         }
     }
     if (!$errorMsg) {
         $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('manager.plugins.upgradeSuccessful', array('versionString' => $pluginVersion->getVersionString(false)))));
     }
     return $request->redirectUrlJson($dispatcher->url($request, ROUTE_PAGE, null, 'management', 'settings', array('website'), null, 'plugins'));
 }