/**
  * Fetch the HTML contents of the form.
  * @param $request PKPRequest
  * return string
  */
 function fetch($request)
 {
     $monograph = $this->getMonograph();
     $press = $request->getPress();
     $templateMgr = TemplateManager::getManager($request);
     $templateMgr->assign('submissionId', $monograph->getId());
     $templateMgr->assign('representationId', (int) $this->getPublicationFormatId());
     $templateMgr->assign('isPhysicalFormat', (bool) $this->getPhysicalFormat());
     // included to load format-specific template
     $templateMgr->assign('stageId', $this->getStageId());
     $templateMgr->assign('formParams', $this->getFormParams());
     $templateMgr->assign('submissionApproved', $monograph->getDatePublished());
     $onixCodelistItemDao = DAORegistry::getDAO('ONIXCodelistItemDAO');
     // Check if e-commerce is available
     import('classes.payment.omp.OMPPaymentManager');
     $ompPaymentManager = new OMPPaymentManager($request);
     if ($ompPaymentManager->isConfigured()) {
         $templateMgr->assign('paymentConfigured', true);
         $templateMgr->assign('currency', $press->getSetting('currency'));
     }
     // get the lists associated with the select elements on these publication format forms.
     $codes = array('productCompositionCodes' => 'List2', 'measurementUnitCodes' => 'List50', 'weightUnitCodes' => 'List95', 'measurementTypeCodes' => 'List48', 'productFormDetailCodes' => 'List175', 'productAvailabilityCodes' => 'List65', 'technicalProtectionCodes' => 'List144', 'returnableIndicatorCodes' => 'List66', 'countriesIncludedCodes' => 'List91');
     foreach ($codes as $templateVarName => $list) {
         $templateMgr->assign_by_ref($templateVarName, $onixCodelistItemDao->getCodes($list));
     }
     // consider public identifiers
     $pubIdPlugins = PluginRegistry::loadCategory('pubIds', true);
     $templateMgr->assign('pubIdPlugins', $pubIdPlugins);
     // Notification options.
     $notificationRequestOptions = array(NOTIFICATION_LEVEL_NORMAL => array(NOTIFICATION_TYPE_CONFIGURE_PAYMENT_METHOD => array(ASSOC_TYPE_PRESS, $press->getId()), NOTIFICATION_TYPE_FORMAT_NEEDS_APPROVED_SUBMISSION => array(ASSOC_TYPE_MONOGRAPH, $monograph->getId())), NOTIFICATION_LEVEL_TRIVIAL => array());
     $templateMgr->assign('notificationRequestOptions', $notificationRequestOptions);
     return parent::fetch($request);
 }
Esempio n. 2
0
 /**
  * Download a published monograph publication format file.
  * @param $args array
  * @param $request PKPRequest
  * @param $view boolean True iff inline viewer should be used, if available
  */
 function download($args, $request, $view = false)
 {
     $dispatcher = $request->getDispatcher();
     $publishedMonograph = $this->getAuthorizedContextObject(ASSOC_TYPE_PUBLISHED_MONOGRAPH);
     $this->setupTemplate($request, $publishedMonograph);
     $press = $request->getPress();
     $monographId = array_shift($args);
     // Validated thru auth
     $representationId = array_shift($args);
     $bestFileId = array_shift($args);
     $publicationFormatDao = DAORegistry::getDAO('PublicationFormatDAO');
     $publicationFormat = $publicationFormatDao->getByBestId($representationId, $publishedMonograph->getId());
     if (!$publicationFormat || !$publicationFormat->getIsApproved() || !$publicationFormat->getIsAvailable() || ($remoteURL = $publicationFormat->getRemoteURL())) {
         fatalError('Invalid publication format specified.');
     }
     $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
     import('lib.pkp.classes.submission.SubmissionFile');
     // File constants
     $submissionFile = $submissionFileDao->getByBestId($bestFileId, $publishedMonograph->getId());
     if (!$submissionFile) {
         $dispatcher->handle404();
     }
     $fileIdAndRevision = $submissionFile->getFileIdAndRevision();
     list($fileId, $revision) = array_map(create_function('$a', 'return (int) $a;'), preg_split('/-/', $fileIdAndRevision));
     import('lib.pkp.classes.file.SubmissionFileManager');
     $monographFileManager = new SubmissionFileManager($publishedMonograph->getContextId(), $publishedMonograph->getId());
     switch ($submissionFile->getAssocType()) {
         case ASSOC_TYPE_PUBLICATION_FORMAT:
             // Publication format file
             if ($submissionFile->getAssocId() != $publicationFormat->getId() || $submissionFile->getDirectSalesPrice() === null) {
                 fatalError('Invalid monograph file specified!');
             }
             break;
         case ASSOC_TYPE_SUBMISSION_FILE:
             // Dependent file
             $genreDao = DAORegistry::getDAO('GenreDAO');
             $genre = $genreDao->getById($submissionFile->getGenreId());
             if (!$genre->getDependent()) {
                 fatalError('Invalid monograph file specified!');
             }
             return $monographFileManager->downloadFile($fileId, $revision);
             break;
         default:
             fatalError('Invalid monograph file specified!');
     }
     $ompCompletedPaymentDao = DAORegistry::getDAO('OMPCompletedPaymentDAO');
     $user = $request->getUser();
     if ($submissionFile->getDirectSalesPrice() === '0' || $user && $ompCompletedPaymentDao->hasPaidPurchaseFile($user->getId(), $fileIdAndRevision)) {
         // Paid purchase or open access.
         if (!$user && $press->getSetting('restrictMonographAccess')) {
             // User needs to register first.
             Validation::redirectLogin();
         }
         // If inline viewing is requested, permit plugins to
         // handle the document.
         PluginRegistry::loadCategory('viewableFiles', true);
         if ($view) {
             if (HookRegistry::call('CatalogBookHandler::view', array(&$this, &$publishedMonograph, &$publicationFormat, &$submissionFile))) {
                 // If the plugin handled the hook, prevent further default activity.
                 exit;
             }
         }
         // Inline viewer not available, or viewing not wanted.
         // Download or show the file.
         $inline = $request->getUserVar('inline') ? true : false;
         if (!HookRegistry::call('CatalogBookHandler::download', array(&$this, &$publishedMonograph, &$publicationFormat, &$submissionFile, &$inline))) {
             return $monographFileManager->downloadFile($fileId, $revision, $inline);
         }
     }
     // Fall-through: user needs to pay for purchase.
     // Users that are not logged in need to register/login first.
     if (!$user) {
         return $request->redirect(null, 'login', null, null, array('source' => $request->url(null, null, null, array($monographId, $representationId, $bestFileId))));
     }
     // They're logged in but need to pay to view.
     import('classes.payment.omp.OMPPaymentManager');
     $ompPaymentManager = new OMPPaymentManager($request);
     if (!$ompPaymentManager->isConfigured()) {
         $request->redirect(null, 'catalog');
     }
     $queuedPayment = $ompPaymentManager->createQueuedPayment($press->getId(), PAYMENT_TYPE_PURCHASE_FILE, $user->getId(), $fileIdAndRevision, $submissionFile->getDirectSalesPrice(), $press->getSetting('currency'));
     $ompPaymentManager->displayPaymentForm($ompPaymentManager->queuePayment($queuedPayment), $queuedPayment);
 }