/**
  * @covers JSONMessage
  */
 public function testGetString()
 {
     // Create a test object.
     $testObject = new stdClass();
     $testObject->someInt = 5;
     $testObject->someFloat = 5.5;
     $json = new JSONMessage($status = true, $content = 'test content', $elementId = '0', $additionalAttributes = array('testObj' => $testObject));
     $json->setEvent('someEvent', array('eventDataKey' => array('item1', 'item2')));
     // Render the JSON message.
     $expectedString = '{"status":true,"content":"test content",' . '"elementId":"0","testObj":{"someInt":5,"someFloat":5.5},' . '"event":{"name":"someEvent","data":{"eventDataKey":["item1","item2"]}}}';
     self::assertEquals($expectedString, $json->getString());
 }
 /**
  * Fetch form to generate custom reports.
  * @param $args array
  * @param $request Request
  * @return JSONMessage JSON object
  */
 function fetchReportGenerator($args, $request)
 {
     $this->setupTemplate($request);
     $reportGeneratorForm = $this->_getReportGeneratorForm($request);
     $reportGeneratorForm->initData($request);
     $formContent = $reportGeneratorForm->fetch($request);
     $json = new JSONMessage(true);
     if ($request->getUserVar('refreshForm')) {
         $json->setEvent('refreshForm', $formContent);
     } else {
         $json->setContent($formContent);
     }
     return $json;
 }
Example #3
0
 /**
  * An action to delete an article cover image.
  * @param $args array
  * @param $request PKPRequest
  * @return JSONMessage JSON object
  */
 function deleteCoverImage($args, $request)
 {
     assert(!empty($args['coverImage']) && !empty($args['submissionId']));
     $submission = $this->getSubmission();
     $submissionDao = Application::getSubmissionDAO();
     $file = $args['coverImage'];
     // Remove cover image and alt text from article settings
     $submission->setCoverImage('');
     $submission->setCoverImageAltText('');
     $submissionDao->updateObject($submission);
     // Remove the file
     $publicFileManager = new PublicFileManager();
     if ($publicFileManager->removeJournalFile($submission->getJournalId(), $file)) {
         $json = new JSONMessage(true);
         $json->setEvent('fileDeleted');
         return $json;
     } else {
         return new JSONMessage(false, __('editor.article.removeCoverImageFileNotFound'));
     }
 }
 /**
  * Save a submission step.
  * @param $args array first parameter is the step being saved
  * @param $request Request
  */
 function saveStep($args, $request)
 {
     $step = isset($args[0]) ? (int) $args[0] : 1;
     $router = $request->getRouter();
     $context = $router->getContext($request);
     $submission = $this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION);
     $this->setupTemplate($request);
     $formClass = "SubmissionSubmitStep{$step}Form";
     import("classes.submission.form.{$formClass}");
     $submitForm = new $formClass($context, $submission);
     $submitForm->readInputData();
     if (!HookRegistry::call('SubmissionHandler::saveSubmit', array($step, &$submission, &$submitForm))) {
         if ($submitForm->validate()) {
             $submissionId = $submitForm->execute($args, $request);
             if (!$submission) {
                 return $request->redirectUrlJson($router->url($request, null, null, 'wizard', $step + 1, array('submissionId' => $submissionId), 'step-2'));
             }
             $json = new JSONMessage(true);
             $json->setEvent('setStep', max($step + 1, $submission->getSubmissionProgress()));
         } else {
             $json = new JSONMessage(true, $submitForm->fetch($request));
         }
         return $json->getString();
     }
 }
Example #5
0
 /**
  * Generate a JSON message with an event that can be sent
  * to the client to refresh itself according to changes
  * in the DB.
  *
  * @param $elementId string (Optional) To refresh a single element
  *  give the element ID here. Otherwise all elements will
  *  be refreshed.
  * @param $parentElementId string (Optional) To refresh a single
  *  element that is associated with another one give the parent
  *  element ID here.
  * @param $content mixed (Optional) Additional content to pass back
  *  to the handler of the JSON message.
  * @return string A rendered JSON message.
  */
 static function getDataChangedEvent($elementId = null, $parentElementId = null, $content = '')
 {
     // Create the event data.
     $eventData = null;
     if ($elementId) {
         $eventData = array($elementId);
         if ($parentElementId) {
             $eventData['parentElementId'] = $parentElementId;
         }
     }
     // Create and render the JSON message with the
     // event to be triggered on the client side.
     import('lib.pkp.classes.core.JSONMessage');
     $json = new JSONMessage(true, $content);
     $json->setEvent('dataChanged', $eventData);
     return $json->getString();
 }
Example #6
0
 /**
  * Unpublish a previously-published issue
  * @param $args array
  * @param $request PKPRequest
  */
 function unpublishIssue($args, $request)
 {
     $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
     $journal = $request->getJournal();
     if (!$request->checkCSRF()) {
         return new JSONMessage(false);
     }
     $issue->setCurrent(0);
     $issue->setPublished(0);
     $issue->setDatePublished(null);
     $issueDao = DAORegistry::getDAO('IssueDAO');
     $issueDao->updateObject($issue);
     // insert article tombstones for all articles
     import('classes.article.ArticleTombstoneManager');
     $articleTombstoneManager = new ArticleTombstoneManager();
     $publishedArticleDao = DAORegistry::getDAO('PublishedArticleDAO');
     $publishedArticles = $publishedArticleDao->getPublishedArticles($issue->getId());
     foreach ($publishedArticles as $article) {
         $articleTombstoneManager->insertArticleTombstone($article, $journal);
     }
     $dispatcher = $request->getDispatcher();
     $json = new JSONMessage();
     $json->setEvent('containerReloadRequested', array('tabsUrl' => $dispatcher->url($request, ROUTE_PAGE, null, 'manageIssues', 'index')));
     return $json;
 }
 /**
  * Download a locale from the PKP web site.
  * @param $args array
  * @param $request object
  * @return JSONMessage JSON object
  */
 function downloadLocale($args, $request)
 {
     $this->setupTemplate($request, true);
     $locale = $request->getUserVar('locale');
     import('classes.i18n.LanguageAction');
     $languageAction = new LanguageAction();
     if (!$languageAction->isDownloadAvailable() || !preg_match('/^[a-z]{2}_[A-Z]{2}$/', $locale)) {
         $request->redirect(null, 'admin', 'settings');
     }
     $notificationManager = new NotificationManager();
     $user = $request->getUser();
     $json = new JSONMessage(true);
     $errors = array();
     if (!$languageAction->downloadLocale($locale, $errors)) {
         $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_ERROR, array('contents' => $errors));
         $json->setEvent('refreshForm', $this->_fetchReviewerForm($args, $request));
     } else {
         $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contentLocaleKey' => __('admin.languages.localeInstalled'), 'params' => array('locale' => $locale)));
     }
     // Refresh form.
     $installLanguageForm = new InstallLanguageForm();
     $installLanguageForm->initData($request);
     $json->setEvent('refreshForm', $installLanguageForm->fetch($request));
     return $json;
 }
 /**
  * Display the plugin.
  * @param $args array
  * @param $request PKPRequest
  */
 function display($args, $request)
 {
     $templateMgr = TemplateManager::getManager($request);
     $context = $request->getContext();
     parent::display($args, $request);
     $templateMgr->assign('plugin', $this);
     switch (array_shift($args)) {
         case 'index':
         case '':
             $templateMgr->display($this->getTemplatePath() . 'index.tpl');
             break;
         case 'uploadImportXML':
             $user = $request->getUser();
             import('lib.pkp.classes.file.TemporaryFileManager');
             $temporaryFileManager = new TemporaryFileManager();
             $temporaryFile = $temporaryFileManager->handleUpload('uploadedFile', $user->getId());
             if ($temporaryFile) {
                 $json = new JSONMessage(true);
                 $json->setAdditionalAttributes(array('temporaryFileId' => $temporaryFile->getId()));
             } else {
                 $json = new JSONMessage(false, __('common.uploadFailed'));
             }
             return $json->getString();
         case 'importBounce':
             $json = new JSONMessage(true);
             $json->setEvent('addTab', array('title' => __('plugins.importexport.users.results'), 'url' => $request->url(null, null, null, array('plugin', $this->getName(), 'import'), array('temporaryFileId' => $request->getUserVar('temporaryFileId')))));
             return $json->getString();
         case 'import':
             $temporaryFileId = $request->getUserVar('temporaryFileId');
             $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO');
             $user = $request->getUser();
             $temporaryFile = $temporaryFileDao->getTemporaryFile($temporaryFileId, $user->getId());
             if (!$temporaryFile) {
                 $json = new JSONMessage(true, __('plugins.importexport.users.uploadFile'));
                 return $json->getString();
             }
             $temporaryFilePath = $temporaryFile->getFilePath();
             libxml_use_internal_errors(true);
             $users = $this->importUsers(file_get_contents($temporaryFilePath), $context, $user);
             $validationErrors = array_filter(libxml_get_errors(), create_function('$a', 'return $a->level == LIBXML_ERR_ERROR ||  $a->level == LIBXML_ERR_FATAL;'));
             $templateMgr->assign('validationErrors', $validationErrors);
             libxml_clear_errors();
             $templateMgr->assign('users', $users);
             $json = new JSONMessage(true, $templateMgr->fetch($this->getTemplatePath() . 'results.tpl'));
             return $json->getString();
         case 'export':
             $exportXml = $this->exportUsers((array) $request->getUserVar('selectedUsers'), $request->getContext(), $request->getUser());
             import('lib.pkp.classes.file.FileManager');
             $fileManager = new FileManager();
             $exportFileName = $this->getExportFileName($this->getExportPath(), 'users', $context, '.xml');
             $fileManager->writeFile($exportFileName, $exportXml);
             $fileManager->downloadFile($exportFileName);
             $fileManager->deleteFile($exportFileName);
             break;
         case 'exportAllUsers':
             $exportXml = $this->exportAllUsers($request->getContext(), $request->getUser());
             import('lib.pkp.classes.file.TemporaryFileManager');
             $fileManager = new TemporaryFileManager();
             $exportFileName = $this->getExportFileName($this->getExportPath(), 'users', $context, '.xml');
             $fileManager->writeFile($exportFileName, $exportXml);
             $fileManager->downloadFile($exportFileName);
             $fileManager->deleteFile($exportFileName);
             break;
         default:
             $dispatcher = $request->getDispatcher();
             $dispatcher->handle404();
     }
 }
Example #9
0
 /**
  * Request an HTTP redirect via JSON to be used from components.
  * @param $url string
  * @return JSONMessage
  */
 function redirectUrlJson($url)
 {
     import('lib.pkp.classes.core.JSONMessage');
     $json = new JSONMessage(true);
     $json->setEvent('redirectRequested', $url);
     return $json;
 }
 /**
  * Load the contents of the reviewer form
  * @param $args array
  * @param $request Request
  * @return JSONMessage JSON object
  */
 function reloadReviewerForm($args, $request)
 {
     $json = new JSONMessage(true);
     $json->setEvent('refreshForm', $this->_fetchReviewerForm($args, $request));
     return $json;
 }
 /**
  * Display the plugin.
  * @param $args array
  * @param $request PKPRequest
  */
 function display($args, $request)
 {
     $templateMgr = TemplateManager::getManager($request);
     $press = $request->getPress();
     parent::display($args, $request);
     $templateMgr->assign('plugin', $this);
     switch (array_shift($args)) {
         case 'index':
         case '':
             $templateMgr->display($this->getTemplatePath() . 'index.tpl');
             break;
         case 'uploadImportXML':
             $user = $request->getUser();
             import('lib.pkp.classes.file.TemporaryFileManager');
             $temporaryFileManager = new TemporaryFileManager();
             $temporaryFile = $temporaryFileManager->handleUpload('uploadedFile', $user->getId());
             if ($temporaryFile) {
                 $json = new JSONMessage(true);
                 $json->setAdditionalAttributes(array('temporaryFileId' => $temporaryFile->getId()));
             } else {
                 $json = new JSONMessage(false, __('common.uploadFailed'));
             }
             return $json->getString();
         case 'importBounce':
             $json = new JSONMessage(true);
             $json->setEvent('addTab', array('title' => __('plugins.importexport.native.results'), 'url' => $request->url(null, null, null, array('plugin', $this->getName(), 'import'), array('temporaryFileId' => $request->getUserVar('temporaryFileId')))));
             return $json->getString();
         case 'import':
             AppLocale::requireComponents(LOCALE_COMPONENT_PKP_SUBMISSION);
             $temporaryFileId = $request->getUserVar('temporaryFileId');
             $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO');
             $user = $request->getUser();
             $temporaryFile = $temporaryFileDao->getTemporaryFile($temporaryFileId, $user->getId());
             if (!$temporaryFile) {
                 $json = new JSONMessage(true, __('plugins.inportexport.native.uploadFile'));
                 return $json->getString();
             }
             $temporaryFilePath = $temporaryFile->getFilePath();
             $deployment = new NativeImportExportDeployment($press, $user);
             libxml_use_internal_errors(true);
             $submissions = $this->importSubmissions(file_get_contents($temporaryFilePath), $deployment);
             $templateMgr->assign('submissions', $submissions);
             $validationErrors = array_filter(libxml_get_errors(), create_function('$a', 'return $a->level == LIBXML_ERR_ERROR ||  $a->level == LIBXML_ERR_FATAL;'));
             $templateMgr->assign('validationErrors', $validationErrors);
             libxml_clear_errors();
             // Are there any submissions import errors
             $processedSubmissionsIds = $deployment->getProcessedObjectsIds(ASSOC_TYPE_SUBMISSION);
             if (!empty($processedSubmissionsIds)) {
                 $submissionsErrors = array_filter($processedSubmissionsIds, create_function('$a', 'return !empty($a);'));
                 if (!empty($submissionsErrors)) {
                     $templateMgr->assign('submissionsErrors', $processedSubmissionsIds);
                 }
             }
             // If there are any submissions or validataion errors
             // delete imported submissions.
             if (!empty($submissionsErrors) || !empty($validationErrors)) {
                 // remove all imported sumissions
                 $deployment->removeImportedObjects(ASSOC_TYPE_SUBMISSION);
             }
             // Display the results
             $json = new JSONMessage(true, $templateMgr->fetch($this->getTemplatePath() . 'results.tpl'));
             return $json->getString();
         case 'export':
             $exportXml = $this->exportSubmissions((array) $request->getUserVar('selectedSubmissions'), $request->getContext(), $request->getUser());
             import('lib.pkp.classes.file.FileManager');
             $fileManager = new FileManager();
             $exportFileName = $this->getExportFileName($this->getExportPath(), 'monographs', $press, '.xml');
             $fileManager->writeFile($exportFileName, $exportXml);
             $fileManager->downloadFile($exportFileName);
             $fileManager->deleteFile($exportFileName);
             break;
         default:
             $dispatcher = $request->getDispatcher();
             $dispatcher->handle404();
     }
 }
 /**
  * Edit a citation
  * @param $args array
  * @param $request PKPRequest
  * @return JSONMessage JSON object
  */
 function editCitation(&$args, $request)
 {
     // Identify the citation to be edited
     $citation = $this->getCitationFromArgs($request, $args, true);
     // Form handling
     import('lib.pkp.classes.controllers.grid.citation.form.CitationForm');
     $citationForm = new CitationForm($request, $citation, $this->getAssocObject());
     if ($citationForm->isLocaleResubmit()) {
         $citationForm->readInputData();
     } else {
         $citationForm->initData();
     }
     $json = new JSONMessage(true, $data = $citationForm->fetch($request));
     $json->setEvent('setCitationPaneData', $data);
     return $json;
 }
 /**
  * Perform plugin-specific management functions.
  * @param $args array
  * @param $request object
  * @return JSONMessage JSON object
  */
 function plugin($args, $request)
 {
     $verb = (string) $request->getUserVar('verb');
     $plugin = $this->getAuthorizedContextObject(ASSOC_TYPE_PLUGIN);
     /* @var $plugin Plugin */
     $message = $messageParams = $pluginModalContent = null;
     if (!is_a($plugin, 'Plugin') || !$plugin->manage($verb, $args, $message, $messageParams, $pluginModalContent)) {
         HookRegistry::call('PluginGridHandler::plugin', array($verb, $args, $message, $messageParams, $plugin));
         if ($message) {
             $notificationManager = new NotificationManager();
             $user = $request->getUser();
             $notificationManager->createTrivialNotification($user->getId(), $message, $messageParams);
         }
     }
     if ($pluginModalContent) {
         $json = new JSONMessage(true, $pluginModalContent);
         $json->setEvent('refreshForm', $pluginModalContent);
         return $json;
     }
     return DAO::getDataChangedEvent($request->getUserVar('plugin'), $request->getUserVar($this->getCategoryRowIdParameterName()));
 }
 /**
  * List signoff notes.
  * @param $args array
  * @param $request PKPRequest
  * @return string Serialized JSON object
  */
 function listNotes($args, $request)
 {
     $this->setupTemplate($request);
     $templateMgr = TemplateManager::getManager($request);
     $noteDao = DAORegistry::getDAO('NoteDAO');
     $notesFactory = $noteDao->getByAssoc(ASSOC_TYPE_SIGNOFF, $this->_signoff->getId());
     $notes = $notesFactory->toAssociativeArray();
     // Get any note files.
     $noteFilesDownloadLink = array();
     $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
     /** @var $submissionFileDao SubmissionFileDAO */
     import('lib.pkp.controllers.api.file.linkAction.DownloadFileLinkAction');
     foreach ($notes as $noteId => $note) {
         $file = $submissionFileDao->getLatestRevisionsByAssocId(ASSOC_TYPE_NOTE, $noteId, $this->_submission->getId(), SUBMISSION_FILE_NOTE);
         // We don't expect more than one file per note
         $file = current($file);
         // Get the download file link action.
         if ($file) {
             $noteFilesDownloadLink[$noteId] = new DownloadFileLinkAction($request, $file, $this->_stageId);
         }
     }
     $user = $request->getUser();
     import('lib.pkp.classes.core.ArrayItemIterator');
     $templateMgr->assign('notes', new ArrayItemIterator($notes));
     $templateMgr->assign('noteFilesDownloadLink', $noteFilesDownloadLink);
     $templateMgr->assign('notesListId', 'notesList');
     $templateMgr->assign('currentUserId', $user->getId());
     $templateMgr->assign('notesDeletable', false);
     $json = new JSONMessage(true, $templateMgr->fetch('controllers/informationCenter/notesList.tpl'));
     $json->setEvent('dataChanged');
     return $json->getString();
 }
 /**
  * Save a review step.
  * @param $args array first parameter is the step being saved
  * @param $request PKPRequest
  * @return JSONMessage JSON object
  */
 function saveStep($args, $request)
 {
     $step = (int) $request->getUserVar('step');
     if ($step < 1 || $step > 3) {
         fatalError('Invalid step!');
     }
     $reviewAssignment = $this->getAuthorizedContextObject(ASSOC_TYPE_REVIEW_ASSIGNMENT);
     /* @var $reviewAssignment ReviewAssignment */
     if ($reviewAssignment->getDateCompleted()) {
         fatalError('Review already completed!');
     }
     $reviewerSubmissionDao = DAORegistry::getDAO('ReviewerSubmissionDAO');
     $reviewerSubmission = $reviewerSubmissionDao->getReviewerSubmission($reviewAssignment->getId());
     assert(is_a($reviewerSubmission, 'ReviewerSubmission'));
     $formClass = "ReviewerReviewStep{$step}Form";
     import("lib.pkp.classes.submission.reviewer.form.{$formClass}");
     $reviewerForm = new $formClass($request, $reviewerSubmission, $reviewAssignment);
     $reviewerForm->readInputData();
     if ($reviewerForm->validate()) {
         $reviewerForm->execute($request);
         $json = new JSONMessage(true);
         $json->setEvent('setStep', $step + 1);
         return $json;
     } else {
         return new JSONMessage(true, $reviewerForm->fetch($request));
     }
 }
 /**
  * Display the list of existing notes.
  * @param $args array
  * @param $request PKPRequest
  */
 function listNotes($args, $request)
 {
     $this->setupTemplate($request);
     $templateMgr = TemplateManager::getManager($request);
     $noteDao = DAORegistry::getDAO('NoteDAO');
     $templateMgr->assign('notes', $noteDao->getByAssoc($this->_getAssocType(), $this->_getAssocId()));
     $user = $request->getUser();
     $templateMgr->assign('currentUserId', $user->getId());
     $templateMgr->assign('notesDeletable', true);
     $templateMgr->assign('notesListId', 'notesList');
     $json = new JSONMessage(true, $templateMgr->fetch('controllers/informationCenter/notesList.tpl'));
     $json->setEvent('dataChanged');
     return $json->getString();
 }
 /**
  * Display the plugin.
  * @param $args array
  * @param $request PKPRequest
  */
 function display($args, $request)
 {
     $templateMgr = TemplateManager::getManager($request);
     $context = $request->getContext();
     parent::display($args, $request);
     $templateMgr->assign('plugin', $this);
     switch (array_shift($args)) {
         case 'index':
         case '':
             $templateMgr->display($this->getTemplatePath() . 'index.tpl');
             break;
         case 'uploadImportXML':
             $user = $request->getUser();
             import('lib.pkp.classes.file.TemporaryFileManager');
             $temporaryFileManager = new TemporaryFileManager();
             $temporaryFile = $temporaryFileManager->handleUpload('uploadedFile', $user->getId());
             if ($temporaryFile) {
                 $json = new JSONMessage(true);
                 $json->setAdditionalAttributes(array('temporaryFileId' => $temporaryFile->getId()));
             } else {
                 $json = new JSONMessage(false, __('common.uploadFailed'));
             }
             return $json->getString();
         case 'importBounce':
             $json = new JSONMessage(true);
             $json->setEvent('addTab', array('title' => __('plugins.importexport.users.results'), 'url' => $request->url(null, null, null, array('plugin', $this->getName(), 'import'), array('temporaryFileId' => $request->getUserVar('temporaryFileId')))));
             return $json->getString();
         case 'import':
             $temporaryFileId = $request->getUserVar('temporaryFileId');
             $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO');
             $user = $request->getUser();
             $temporaryFile = $temporaryFileDao->getTemporaryFile($temporaryFileId, $user->getId());
             if (!$temporaryFile) {
                 $json = new JSONMessage(true, __('plugins.importexport.users.uploadFile'));
                 return $json->getString();
             }
             $temporaryFilePath = $temporaryFile->getFilePath();
             $users = $this->importUsers(file_get_contents($temporaryFilePath), $context, $user);
             $templateMgr->assign('users', $users);
             $json = new JSONMessage(true, $templateMgr->fetch($this->getTemplatePath() . 'results.tpl'));
             return $json->getString();
         case 'export':
             $exportXml = $this->exportUsers((array) $request->getUserVar('selectedUsers'), $request->getContext(), $request->getUser());
             header('Content-type: application/xml');
             echo $exportXml;
             break;
         case 'exportAllUsers':
             $exportXml = $this->exportAllUsers($request->getContext(), $request->getUser());
             header('Content-type: application/xml');
             echo $exportXml;
             break;
         default:
             $dispatcher = $request->getDispatcher();
             $dispatcher->handle404();
     }
 }