• Main Page
  • Modules
  • Classes
  • Files
  • File List

controllers/grid/catalogEntry/PublicationFormatGridCellProvider.inc.php

00001 <?php
00002 
00015 import('lib.pkp.classes.controllers.grid.DataObjectGridCellProvider');
00016 
00017 // Import monograph file class which contains the MONOGRAPH_FILE_* constants.
00018 import('classes.monograph.MonographFile');
00019 
00020 class PublicationFormatGridCellProvider extends DataObjectGridCellProvider {
00021 
00023    var $_monographId;
00024 
00026    var $_inCatalogEntryModal;
00027 
00034    function PublicationFormatGridCellProvider($monographId, $inCatalogEntryModal) {
00035       parent::DataObjectGridCellProvider();
00036       $this->_monographId = $monographId;
00037       $this->_inCatalogEntryModal = $inCatalogEntryModal;
00038    }
00039 
00040 
00041    //
00042    // Getters and setters.
00043    //
00048    function getMonographId() {
00049       return $this->_monographId;
00050    }
00051 
00057    function getInCatalogEntryModal() {
00058       return $this->_inCatalogEntryModal;
00059    }
00060 
00061 
00062    //
00063    // Template methods from GridCellProvider
00064    //
00072    function getTemplateVarsFromRowColumn(&$row, $column) {
00073       $publicationFormat =& $row->getData();
00074       $columnId = $column->getId();
00075       assert(is_a($publicationFormat, 'DataObject') && !empty($columnId));
00076       switch ($columnId) {
00077          case 'name':
00078             $label = $publicationFormat->getLocalizedName() . ' (' .$publicationFormat->getNameForONIXCode() . ')';
00079             return array('label' => $label);
00080          case 'proofComplete':
00081          case 'isAvailable':
00082          case 'isApproved':
00083             return array('status' => $this->getCellState($row, $column));
00084          default:
00085             assert(false);
00086       }
00087    }
00088 
00094    function isProofComplete(&$publicationFormat) {
00095       $monographFiles =& $this->getMonographFiles($publicationFormat->getId());
00096       $proofComplete = false;
00097       // If we have at least one viewable file, we consider
00098       // proofs as approved.
00099       foreach ($monographFiles as $file) {
00100          if ($file->getViewable()) {
00101             $proofComplete = true;
00102             break;
00103          }
00104       }
00105       return $proofComplete;
00106    }
00107 
00114    function getCellState(&$row, &$column) {
00115       $publicationFormat =& $row->getData();
00116       switch ($column->getId()) {
00117          case 'proofComplete':
00118             return $this->isProofComplete($publicationFormat)?'completed':'new';
00119          case 'isApproved':
00120             $publishedMonographDao =& DAORegistry::getDAO('PublishedMonographDAO');
00121             $publishedMonograph =& $publishedMonographDao->getById($publicationFormat->getMonographId());
00122             return ($publicationFormat->getIsApproved() && $publishedMonograph)?'completed':'new';
00123          case 'isAvailable':
00124             return $publicationFormat->getIsAvailable()?'completed':'new';
00125          default:
00126             assert(false);
00127       }
00128    }
00129 
00133    function getCellActions($request, $row, $column) {
00134       $publicationFormat =& $row->getData();
00135       $actionArgs = array(
00136          'monographId' => $publicationFormat->getMonographId(),
00137          'publicationFormatId' => $publicationFormat->getId()
00138       );
00139       $monographId = $publicationFormat->getMonographId();
00140       $publicationFormatId = $publicationFormat->getId();
00141       switch ($column->getId()) {
00142          case 'proofComplete':
00143             import('controllers.api.proof.linkAction.ApproveProofsLinkAction');
00144             return array(new ApproveProofsLinkAction($request, $monographId, $publicationFormatId, $this->getCellState($row, $column)));
00145             break;
00146          case 'isApproved':
00147             if ($this->getInCatalogEntryModal()) {
00148                import('lib.pkp.classes.linkAction.request.NullAction');
00149                $toolTip = ($this->getCellState($row, $column) == 'completed') ? __('grid.action.formatInCatalogEntry') : null;
00150                return array(new LinkAction('publicationFormatTab', new NullAction(), __('monograph.publicationFormat.openTab'), $this->getCellState($row, $column), $toolTip));
00151             } else {
00152                import('controllers.modals.submissionMetadata.linkAction.CatalogEntryLinkAction');
00153                return array(new CatalogEntryLinkAction($request, $monographId, WORKFLOW_STAGE_ID_PRODUCTION, $publicationFormatId, $this->getCellState($row, $column)));
00154             }
00155             break;
00156          case 'isAvailable':
00157             $router =& $request->getRouter();
00158             $publishedMonographDao =& DAORegistry::getDAO('PublishedMonographDAO');
00159             $publishedMonograph =& $publishedMonographDao->getById($publicationFormat->getMonographId());
00160 
00161             // FIXME: Bug #7715
00162             $warningMarkup = '';
00163             $templateMgr =& TemplateManager::getManager();
00164             $templateMgr->assign('notificationStyleClass', 'notifyWarning');
00165             $templateMgr->assign('notificationTitle', __('common.warning'));
00166             if (!$publishedMonograph) {
00167                $templateMgr->assign('notificationId', uniqid('notPublished'));
00168                $templateMgr->assign('notificationContents', __('grid.catalogEntry.availablePublicationFormat.catalogNotApprovedWarning'));
00169                $warningMarkup .= $templateMgr->fetch('controllers/notification/inPlaceNotificationContent.tpl');
00170             }
00171             if (!$publicationFormat->getIsApproved()) {
00172                $templateMgr->assign('notificationId', uniqid('notAvailable'));
00173                $templateMgr->assign('notificationContents', __('grid.catalogEntry.availablePublicationFormat.notApprovedWarning'));
00174                $warningMarkup .= $templateMgr->fetch('controllers/notification/inPlaceNotificationContent.tpl');
00175             }
00176             if (!$this->isProofComplete($publicationFormat)) {
00177                $templateMgr->assign('notificationId', uniqid('notProofed'));
00178                $templateMgr->assign('notificationContents', __('grid.catalogEntry.availablePublicationFormat.proofNotApproved'));
00179                $warningMarkup .= $templateMgr->fetch('controllers/notification/inPlaceNotificationContent.tpl');
00180             }
00181             // If we have any notifications, wrap them in the appropriately styled div
00182             if ($warningMarkup !== '') $warningMarkup = "<div class=\"pkp_notification\">$warningMarkup</div>";
00183             $toolTip = ($this->getCellState($row, $column) == 'completed') ? __('grid.action.formatAvailable') : null;
00184             return array(new LinkAction(
00185                'availablePublicationFormat',
00186                new RemoteActionConfirmationModal(
00187                   $warningMarkup . __($publicationFormat->getIsAvailable()?'grid.catalogEntry.availablePublicationFormat.removeMessage':'grid.catalogEntry.availablePublicationFormat.message'),
00188                   __('grid.catalogEntry.availablePublicationFormat.title'),
00189                   $router->url($request, null, 'grid.catalogEntry.PublicationFormatGridHandler',
00190                      'setAvailable', null, array('publicationFormatId' => $publicationFormat->getId(), 'newAvailableState' => $publicationFormat->getIsAvailable()?0:1, 'monographId' => $monographId)),
00191                   'modal_approve'),
00192                   __('manager.emails.disable'),
00193                   $this->getCellState($row, $column),
00194                   $toolTip
00195             ));
00196             break;
00197          default:
00198             return array();
00199       }
00200    }
00201 
00208    function &getMonographFiles($publicationFormatId) {
00209       $submissionFileDao =& DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */
00210       $monographFiles =& $submissionFileDao->getLatestRevisionsByAssocId(
00211          ASSOC_TYPE_PUBLICATION_FORMAT, $publicationFormatId,
00212          $this->getMonographId(), MONOGRAPH_FILE_PROOF
00213       );
00214 
00215       return $monographFiles;
00216    }
00217 }
00218 
00219 ?>

Generated on Mon Sep 17 2012 13:58:55 for Open Monograph Press by  doxygen 1.7.1