00001 <?php
00002
00015 import('lib.pkp.classes.controllers.grid.DataObjectGridCellProvider');
00016
00017
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
00043
00048 function getMonographId() {
00049 return $this->_monographId;
00050 }
00051
00057 function getInCatalogEntryModal() {
00058 return $this->_inCatalogEntryModal;
00059 }
00060
00061
00062
00063
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
00098
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
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
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');
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 ?>