/** * 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); }
/** * 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); }