Open Journal Systems  3.3.0
UploadImageForm.inc.php
1 <?php
2 
16 import('lib.pkp.classes.form.Form');
17 
18 class UploadImageForm extends Form {
21 
23  var $request;
24 
27 
29  var $submission;
30 
33 
35  var $plugin;
36 
38  var $context;
39 
45  function __construct($plugin, $request) {
46  parent::__construct($plugin->getTemplateResource('uploadImageForm.tpl'));
47 
48  $this->addCheck(new FormValidator($this, 'temporaryFileId', 'required', 'manager.website.imageFileRequired'));
49 
50  $this->plugin = $plugin;
51  $this->request = $request;
52  $this->context = $request->getContext();
53 
54  $this->submissionId = $request->getUserVar('submissionId');
55 
56  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
57  $this->submission = $submissionDao->getById($request->getUserVar('submissionId'), $this->context->getId(), false);
58  $this->publication = $this->submission->getCurrentPublication();
59  }
60 
61  //
62  // Extend methods from Form.
63  //
67  function getLocaleFieldNames() {
68  return array('imageAltText');
69  }
70 
74  function initData() {
75  $templateMgr = TemplateManager::getManager($this->request);
76  $templateMgr->assign('submissionId', $this->submissionId);
77 
78  $locale = AppLocale::getLocale();
79  $coverImage = $this->submission->getCoverImage($locale);
80 
81  if ($coverImage) {
82  import('lib.pkp.classes.linkAction.LinkAction');
83  import('lib.pkp.classes.linkAction.request.RemoteActionConfirmationModal');
84  $router = $this->request->getRouter();
85  $deleteCoverImageLinkAction = new LinkAction(
86  'deleteCoverImage',
88  $this->request->getSession(),
89  __('common.confirmDelete'), null,
90  $router->url($this->request, null, null, 'importexport', array('plugin', 'QuickSubmitPlugin', 'deleteCoverImage'), array(
91  'coverImage' => $coverImage,
92  'submissionId' => $this->submission->getId(),
93  'stageId' => WORKFLOW_STAGE_ID_PRODUCTION,
94  )),
95  'modal_delete'
96  ),
97  __('common.delete'),
98  null
99  );
100  $templateMgr->assign('deleteCoverImageLinkAction', $deleteCoverImageLinkAction);
101  }
102 
103  $this->setData('coverImage', $coverImage);
104  $this->setData('imageAltText', $this->submission->getCoverImageAltText($locale));
105  }
106 
110  function readInputData() {
111  $this->readUserVars(array('imageAltText', 'temporaryFileId'));
112  }
113 
119  function deleteCoverImage($request) {
120  assert($request->getUserVar('coverImage') != '' && $request->getUserVar('submissionId') != '');
121 
122  $publicationDao = DAORegistry::getDAO('PublicationDAO'); /* @var $publicationDao PublicationDAO */
123  $file = $request->getUserVar('coverImage');
124 
125  // Remove cover image and alt text from article settings
126  $locale = AppLocale::getLocale();
127  $this->publication->setData('coverImage', []);
128  $publicationDao->updateObject($this->publication);
129 
130  // Remove the file
131  $publicFileManager = new PublicFileManager();
132  if ($publicFileManager->removeContextFile($this->submission->getContextId(), $file)) {
133  $json = new JSONMessage(true);
134  $json->setEvent('fileDeleted');
135  return $json;
136  } else {
137  return new JSONMessage(false, __('editor.article.removeCoverImageFileNotFound'));
138  }
139  }
140 
145  function execute($request) {
146  $publicationDao = DAORegistry::getDAO('PublicationDAO'); /* @var $publicationDao PublicationDAO */
147 
148  $temporaryFile = $this->fetchTemporaryFile($request);
149  $locale = AppLocale::getLocale();
150  $coverImage = $this->publication->getData('coverImage');
151 
152  import('classes.file.PublicFileManager');
153  $publicFileManager = new PublicFileManager();
154 
155  if (is_a($temporaryFile, 'TemporaryFile')) {
156  $type = $temporaryFile->getFileType();
157  $extension = $publicFileManager->getImageExtension($type);
158  if (!$extension) {
159  return false;
160  }
161  $locale = AppLocale::getLocale();
162 
163  $newFileName = 'article_' . $this->submissionId . '_cover_' . $locale . $publicFileManager->getImageExtension($temporaryFile->getFileType());
164 
165  if ($publicFileManager->copyContextFile($this->context->getId(), $temporaryFile->getFilePath(), $newFileName)) {
166 
167  $this->publication->setData('coverImage', [
168  'altText' => $this->getData('imageAltText'),
169  'uploadName' => $newFileName,
170  ], $locale);
171  $publicationDao->updateObject($this->publication);
172 
173  // Clean up the temporary file.
174  $this->removeTemporaryFile($request);
175 
176  return DAO::getDataChangedEvent();
177  }
178  } elseif ($coverImage) {
179  $coverImage = $this->publication->getData('coverImage');
180  $coverImage[$locale]['altText'] = $this->getData('imageAltText');
181  $this->publication->setData('coverImage', $coverImage);
182  $publicationDao->updateObject($this->publication);
183  return DAO::getDataChangedEvent();
184  }
185  return new JSONMessage(false, __('common.uploadFailed'));
186 
187  }
188 
193  function getFileSettingName() {
195  }
196 
201  function setFileSettingName($fileSettingName) {
202  $this->_fileSettingName = $fileSettingName;
203  }
204 
205 
206  //
207  // Implement template methods from Form.
208  //
213  function fetch($request, $template = null, $display = false, $params = null) {
214  $templateMgr = TemplateManager::getManager($request);
215  $templateMgr->assign(array(
216  'fileSettingName' => $this->getFileSettingName(),
217  'fileType' => 'image',
218  ));
219 
220  return parent::fetch($request, $template, $display);
221  }
222 
223 
224  //
225  // Public methods
226  //
232  function fetchTemporaryFile($request) {
233  $user = $request->getUser();
234 
235  $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO');
236  $temporaryFile = $temporaryFileDao->getTemporaryFile(
237  $this->getData('temporaryFileId'),
238  $user->getId()
239  );
240  return $temporaryFile;
241  }
242 
247  function removeTemporaryFile($request) {
248  $user = $request->getUser();
249 
250  import('lib.pkp.classes.file.TemporaryFileManager');
251  $temporaryFileManager = new TemporaryFileManager();
252  $temporaryFileManager->deleteById($this->getData('temporaryFileId'), $user->getId());
253  }
254 
259  function uploadFile($request) {
260  $user = $request->getUser();
261 
262  import('lib.pkp.classes.file.TemporaryFileManager');
263  $temporaryFileManager = new TemporaryFileManager();
264  $temporaryFile = $temporaryFileManager->handleUpload('uploadedFile', $user->getId());
265 
266  if ($temporaryFile) return $temporaryFile->getId();
267 
268  return false;
269  }
270 }
271 
TemporaryFileManager
Definition: TemporaryFileManager.inc.php:19
UploadImageForm
Form for upload an image.
Definition: UploadImageForm.inc.php:18
RemoteActionConfirmationModal
Class defining a simple confirmation modal with a remote action and ok/cancel buttons.
Definition: RemoteActionConfirmationModal.inc.php:18
UploadImageForm\__construct
__construct($plugin, $request)
Definition: UploadImageForm.inc.php:63
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
UploadImageForm\deleteCoverImage
deleteCoverImage($request)
Definition: UploadImageForm.inc.php:137
UploadImageForm\uploadFile
uploadFile($request)
Definition: UploadImageForm.inc.php:277
Form\setData
setData($key, $value=null)
Definition: Form.inc.php:229
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
UploadImageForm\$_fileSettingName
$_fileSettingName
Definition: UploadImageForm.inc.php:20
Form\getData
getData($key)
Definition: Form.inc.php:220
UploadImageForm\$context
$context
Definition: UploadImageForm.inc.php:56
UploadImageForm\execute
execute($request)
Definition: UploadImageForm.inc.php:163
UploadImageForm\setFileSettingName
setFileSettingName($fileSettingName)
Definition: UploadImageForm.inc.php:219
PublicFileManager
Wrapper class for uploading files to a site/journal's public directory.
Definition: PublicFileManager.inc.php:18
DAO\getDataChangedEvent
static getDataChangedEvent($elementId=null, $parentElementId=null, $content='')
Definition: DAO.inc.php:647
UploadImageForm\initData
initData()
Definition: UploadImageForm.inc.php:92
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
UploadImageForm\getLocaleFieldNames
getLocaleFieldNames()
Definition: UploadImageForm.inc.php:85
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
UploadImageForm\$plugin
$plugin
Definition: UploadImageForm.inc.php:50
UploadImageForm\removeTemporaryFile
removeTemporaryFile($request)
Definition: UploadImageForm.inc.php:265
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
FormValidator
Class to represent a form validation check.
Definition: FormValidator.inc.php:23
UploadImageForm\$request
$request
Definition: UploadImageForm.inc.php:26
UploadImageForm\fetch
fetch($request, $template=null, $display=false, $params=null)
Definition: UploadImageForm.inc.php:231
UploadImageForm\readInputData
readInputData()
Definition: UploadImageForm.inc.php:128
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
Form
Class defining basic operations for handling HTML forms.
Definition: Form.inc.php:47
UploadImageForm\$submissionId
$submissionId
Definition: UploadImageForm.inc.php:32
AppLocale\getLocale
static getLocale()
Definition: env1/MockAppLocale.inc.php:40
UploadImageForm\$submission
$submission
Definition: UploadImageForm.inc.php:38
UploadImageForm\getFileSettingName
getFileSettingName()
Definition: UploadImageForm.inc.php:211
UploadImageForm\fetchTemporaryFile
fetchTemporaryFile($request)
Definition: UploadImageForm.inc.php:250
UploadImageForm\$publication
$publication
Definition: UploadImageForm.inc.php:44