tao-test/app/taoQtiTest/actions/class.XmlEditor.php

88 lines
3.2 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2020 (original work) Open Assessment Technologies SA ;
*/
declare(strict_types=1);
use oat\generis\model\OntologyAwareTrait;
use oat\tao\model\resources\ResourceAccessDeniedException;
use oat\taoQtiTest\models\forms\XmlEditForm;
use oat\taoQtiTest\models\xmlEditor\XmlEditorInterface;
use qtism\data\storage\xml\XmlStorageException;
use tao_helpers_form_FormContainer as FormContainer;
class taoQtiTest_actions_XmlEditor extends tao_actions_ServiceModule
{
use OntologyAwareTrait;
public function edit() : void
{
if (!$this->hasPostParameter('id')) {
$this->returnError(__('Missed required parameter \'id\''));
return;
}
$test = $this->getResource($this->getPostParameter('id'));
if ($this->getXmlEditorService()->isLocked()) {
$this->setData('errorMessage', __('This functionality is blocked. Please contact with your administrator for more details.'));
} else {
try {
$xmlString = $this->getXmlEditorService()->getTestXml($test);
$formContainer = new XmlEditForm(
$test,
$xmlString,
[FormContainer::CSRF_PROTECTION_OPTION => true]
);
$form = $formContainer->getForm();
if ($form->isSubmited() && $form->isValid()) {
$this->getXmlEditorService()->saveStringTest($test, $form->getValues()['xmlString']);
$this->setData('message', __('Saved'));
}
} catch (ResourceAccessDeniedException $e) {
$this->setData('errorMessage', $e->getMessage());
common_Logger::e($e->getMessage());
} catch (XmlStorageException $e) {
$errors = $e->getErrors();
$message = '';
/** @var LibXMLError $error */
foreach ($errors->getArrayCopy() as $error){
$message .= $error->message;
}
$this->setData('errorMessage', $message);
}catch (Throwable $e) {
$this->setData('errorMessage', __('Something went wrong...'));
common_Logger::e($e->getMessage());
}
$this->setData('form', $form->render());
$this->setData('formTitle', __('XML Content'));
}
$this->setView('xml_editor.tpl');
}
/**
* @return XmlEditorInterface
*/
private function getXmlEditorService() : XmlEditorInterface
{
return $this->getServiceLocator()->get(XmlEditorInterface::SERVICE_ID);
}
}