first commit
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/plugins/form/UploadPluginForm.php
|
||||
*
|
||||
* Copyright (c) 2014-2021 Simon Fraser University
|
||||
* Copyright (c) 2003-2021 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class UploadPluginForm
|
||||
*
|
||||
* @ingroup controllers_grid_plugins_form
|
||||
*
|
||||
* @brief Form to upload a plugin file.
|
||||
*/
|
||||
|
||||
namespace PKP\controllers\grid\plugins\form;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\notification\NotificationManager;
|
||||
use APP\template\TemplateManager;
|
||||
use Exception;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\file\TemporaryFileDAO;
|
||||
use PKP\file\TemporaryFileManager;
|
||||
use PKP\form\Form;
|
||||
use PKP\notification\PKPNotification;
|
||||
use PKP\plugins\PluginHelper;
|
||||
use PKP\plugins\PluginRegistry;
|
||||
|
||||
class UploadPluginForm extends Form
|
||||
{
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param string $pluginAction PLUGIN_ACTION_...
|
||||
*/
|
||||
public function __construct(private $pluginAction)
|
||||
{
|
||||
parent::__construct('controllers/grid/plugins/form/uploadPluginForm.tpl');
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'temporaryFileId', 'required', 'manager.plugins.uploadFailed'));
|
||||
}
|
||||
|
||||
//
|
||||
// Implement template methods from Form.
|
||||
//
|
||||
/**
|
||||
* @copydoc Form::readInputData()
|
||||
*/
|
||||
public function readInputData()
|
||||
{
|
||||
$this->readUserVars(['temporaryFileId']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::fetch()
|
||||
*
|
||||
* @param null|mixed $template
|
||||
*/
|
||||
public function fetch($request, $template = null, $display = false)
|
||||
{
|
||||
$templateMgr = TemplateManager::getManager($request);
|
||||
$templateMgr->assign([
|
||||
'function' => $this->pluginAction,
|
||||
'category' => $request->getUserVar('category'),
|
||||
'plugin' => $request->getUserVar('plugin'),
|
||||
]);
|
||||
|
||||
return parent::fetch($request, $template, $display);
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::execute()
|
||||
*/
|
||||
public function execute(...$functionArgs)
|
||||
{
|
||||
parent::execute(...$functionArgs);
|
||||
|
||||
$request = Application::get()->getRequest();
|
||||
$user = $request->getUser();
|
||||
$pluginHelper = new PluginHelper();
|
||||
$notificationMgr = new NotificationManager();
|
||||
|
||||
// Retrieve the temporary file.
|
||||
$temporaryFileManager = new TemporaryFileManager();
|
||||
$temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /** @var TemporaryFileDAO $temporaryFileDao */
|
||||
$temporaryFile = $temporaryFileDao->getTemporaryFile($this->getData('temporaryFileId'), $user->getId());
|
||||
|
||||
try {
|
||||
if (!$temporaryFile) {
|
||||
throw new Exception('The uploaded plugin file was not found');
|
||||
}
|
||||
switch ($this->pluginAction) {
|
||||
case PluginHelper::PLUGIN_ACTION_UPLOAD:
|
||||
$pluginVersion = $pluginHelper->installPlugin($temporaryFile->getFilePath(), $temporaryFile->getOriginalFileName());
|
||||
$notificationMgr->createTrivialNotification(
|
||||
$user->getId(),
|
||||
PKPNotification::NOTIFICATION_TYPE_SUCCESS,
|
||||
['contents' => __('manager.plugins.installSuccessful', ['versionNumber' => $pluginVersion->getVersionString(false)])]
|
||||
);
|
||||
break;
|
||||
case PluginHelper::PLUGIN_ACTION_UPGRADE:
|
||||
$plugin = PluginRegistry::getPlugin($request->getUserVar('category'), $request->getUserVar('plugin'));
|
||||
$pluginVersion = $pluginHelper->upgradePlugin(
|
||||
$request->getUserVar('category'),
|
||||
basename($plugin->getPluginPath()),
|
||||
$temporaryFile->getFilePath(),
|
||||
$temporaryFile->getOriginalFileName()
|
||||
);
|
||||
$notificationMgr->createTrivialNotification(
|
||||
$user->getId(),
|
||||
PKPNotification::NOTIFICATION_TYPE_SUCCESS,
|
||||
['contents' => __('manager.plugins.upgradeSuccessful', ['versionString' => $pluginVersion->getVersionString(false)])]
|
||||
);
|
||||
break;
|
||||
default:
|
||||
throw new Exception(__('common.unknownError'));
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$notificationMgr->createTrivialNotification($user->getId(), PKPNotification::NOTIFICATION_TYPE_ERROR, ['contents' => $e->getMessage()]);
|
||||
} finally {
|
||||
if ($temporaryFile) {
|
||||
$temporaryFileManager->deleteById($temporaryFile->getId(), $user->getId());
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user