/** * Display object metadata on the article abstract pages. * @param $hookName string (Templates::Article::MoreInfo) * @param $args array * @return boolean false to continue processing subsequent hooks */ function displayAbstract($hookName, $params) { $smarty =& $params[1]; $output =& $params[2]; // Get the journal and the article $journal =& Request::getJournal(); $journalId = $journal->getId(); $article = $smarty->get_template_vars('article'); $pubObject = $smarty->get_template_vars('pubObject'); // Only consider the abstract page if ($article && is_a($pubObject, 'Article')) { // Get the assignemnts for this article $objectsForReview = array(); $ofrDao =& DAORegistry::getDAO('ObjectForReviewDAO'); $ofrAssignmentDao =& DAORegistry::getDAO('ObjectForReviewAssignmentDAO'); $objectForReviewAssignments =& $ofrAssignmentDao->getAllBySubmissionId($article->getId()); foreach ($objectForReviewAssignments as $objectForReviewAssignment) { $objectForReview = $ofrDao->getById($objectForReviewAssignment->getObjectId(), $journalId); $objectsForReview[] = $objectForReview; } if (!empty($objectsForReview)) { // Get metadata for the review type $reviewObjectTypeDao =& DAORegistry::getDAO('ReviewObjectTypeDAO'); $allTypes =& $reviewObjectTypeDao->getTypeIdsAlphabetizedByContext($journalId); $reviewObjectMetadataDao =& DAORegistry::getDAO('ReviewObjectMetadataDAO'); $allReviewObjectsMetadata = array(); foreach ($allTypes as $type) { $typeId = $type['typeId']; $typeMetadata = $reviewObjectMetadataDao->getArrayByReviewObjectTypeId($typeId); $allReviewObjectsMetadata[$typeId] = $typeMetadata; } $publicFileManager = new PublicFileManager(); $coverPagePath = Request::getBaseUrl() . '/'; $coverPagePath .= $publicFileManager->getJournalFilesPath($journalId) . '/'; $smarty->assign('coverPagePath', $coverPagePath); $smarty->assign('objectsForReview', $objectsForReview); $smarty->assign('allReviewObjectsMetadata', $allReviewObjectsMetadata); $smarty->assign('multipleOptionsTypes', ReviewObjectMetadata::getMultipleOptionsTypes()); $smarty->assign('ofrListing', true); $smarty->assign('ofrTemplatePath', $this->getTemplatePath()); $output .= $smarty->fetch($this->getTemplatePath() . 'articleObjectsForReview.tpl'); } } return false; }
/** * Public view object for review details. * @param $args array * @param $request PKPRequest */ function viewObjectForReview($args, &$request) { // Ensure the args (object ID) exists $objectId = array_shift($args); if (!$objectId) { $request->redirect(null, 'objectsForReview'); } $journal =& $request->getJournal(); $journalId = $journal->getId(); // Ensure the object exists $ofrDao =& DAORegistry::getDAO('ObjectForReviewDAO'); $objectForReview =& $ofrDao->getById($objectId, $journalId); if (!isset($objectForReview)) { $request->redirect(null, 'objectsForReview'); } // If object is available if ($objectForReview->getAvailable()) { // Get all metadata for the objects for review $reviewObjectTypeDao =& DAORegistry::getDAO('ReviewObjectTypeDAO'); $allTypes =& $reviewObjectTypeDao->getTypeIdsAlphabetizedByContext($journalId); $reviewObjectMetadataDao =& DAORegistry::getDAO('ReviewObjectMetadataDAO'); $allReviewObjectsMetadata = array(); foreach ($allTypes as $type) { $typeId = $type['typeId']; $typeMetadata = $reviewObjectMetadataDao->getArrayByReviewObjectTypeId($typeId); $allReviewObjectsMetadata[$typeId] = $typeMetadata; } // If the user is an author get her/his assignments $isAuthor = Validation::isAuthor(); if ($isAuthor) { $user =& $request->getUser(); $ofrAssignmentDao =& DAORegistry::getDAO('ObjectForReviewAssignmentDAO'); $authorAssignments = $ofrAssignmentDao->getObjectIds($user->getId()); } $this->setupTemplate($request, true); $templateMgr =& TemplateManager::getManager($request); $templateMgr->assign('objectForReview', $objectForReview); $templateMgr->assign('allReviewObjectsMetadata', $allReviewObjectsMetadata); $templateMgr->assign('isAuthor', $isAuthor); $templateMgr->assign('authorAssignments', $authorAssignments); // Cover page path import('classes.file.PublicFileManager'); $publicFileManager = new PublicFileManager(); $coverPagePath = $request->getBaseUrl() . '/'; $coverPagePath .= $publicFileManager->getJournalFilesPath($journalId) . '/'; $templateMgr->assign('coverPagePath', $coverPagePath); $ofrPlugin =& $this->_getObjectsForReviewPlugin(); $ofrPlugin->import('classes.ReviewObjectMetadata'); $templateMgr->assign('multipleOptionsTypes', ReviewObjectMetadata::getMultipleOptionsTypes()); $templateMgr->assign('locale', AppLocale::getLocale()); $templateMgr->assign('ofrListing', false); $templateMgr->assign('ofrTemplatePath', $ofrPlugin->getTemplatePath()); $templateMgr->display($ofrPlugin->getTemplatePath() . 'objectForReview.tpl'); } else { $request->redirect(null, 'objectsForReview'); } }
/** * @see Form::execute() */ function execute() { $ofrPlugin =& PluginRegistry::getPlugin('generic', $this->parentPluginName); $journal =& Request::getJournal(); $journalId = $journal->getId(); $ofrPlugin->import('classes.ReviewObjectType'); $reviewObjectTypeDao =& DAORegistry::getDAO('ReviewObjectTypeDAO'); if ($this->reviewObjectType == null) { $reviewObjectType = $reviewObjectTypeDao->newDataObject(); $reviewObjectType->setContextId($journalId); $reviewObjectType->setActive(0); } else { $reviewObjectType =& $this->reviewObjectType; } $reviewObjectType->setName($this->getData('name'), null); // Localized $reviewObjectType->setDescription($this->getData('description'), null); // Localized if ($reviewObjectType->getId() != null) { $reviewObjectTypeDao->updateObject($reviewObjectType); } else { //install common metadata $ofrPlugin->import('classes.ReviewObjectMetadata'); $multipleOptionsTypes = ReviewObjectMetadata::getMultipleOptionsTypes(); $dtdTypes = ReviewObjectMetadata::getMetadataDTDTypes(); $reviewObjectMetadataDao =& DAORegistry::getDAO('ReviewObjectMetadataDAO'); $reviewObjectMetadataArray = array(); $availableLocales = $journal->getSupportedLocaleNames(); foreach ($availableLocales as $locale => $localeName) { $xmlDao = new XMLDAO(); $commonDataPath = $ofrPlugin->getPluginPath() . DIRECTORY_SEPARATOR . 'xml' . DIRECTORY_SEPARATOR . 'commonMetadata.xml'; $commonData = $xmlDao->parse($commonDataPath); $commonMetadata = $commonData->getChildByName('objectMetadata'); foreach ($commonMetadata->getChildren() as $metadataNode) { $key = $metadataNode->getAttribute('key'); if (array_key_exists($key, $reviewObjectMetadataArray)) { $reviewObjectMetadata = $reviewObjectMetadataArray[$key]; } else { $reviewObjectMetadata = $reviewObjectMetadataDao->newDataObject(); $reviewObjectMetadata->setSequence(REALLY_BIG_NUMBER); $metadataType = $dtdTypes[$metadataNode->getAttribute('type')]; $reviewObjectMetadata->setMetadataType($metadataType); $required = $metadataNode->getAttribute('required'); $reviewObjectMetadata->setRequired($required == 'true' ? 1 : 0); $display = $metadataNode->getAttribute('display'); $reviewObjectMetadata->setDisplay($display == 'true' ? 1 : 0); } $name = __($metadataNode->getChildValue('name'), array(), $locale); $reviewObjectMetadata->setName($name, $locale); if ($key == 'role') { $reviewObjectMetadata->setPossibleOptions($this->getData('possibleOptions'), null); // Localized } else { if (in_array($reviewObjectMetadata->getMetadataType(), $multipleOptionsTypes)) { $selectionOptions = $metadataNode->getChildByName('selectionOptions'); $possibleOptions = array(); $index = 1; foreach ($selectionOptions->getChildren() as $selectionOptionNode) { $possibleOptions[] = array('order' => $index, 'content' => __($selectionOptionNode->getValue(), array(), $locale)); $index++; } $reviewObjectMetadata->setPossibleOptions($possibleOptions, $locale); } else { $reviewObjectMetadata->setPossibleOptions(null, null); } } $reviewObjectMetadataArray[$key] = $reviewObjectMetadata; } } $reviewObjectTypeId = $reviewObjectTypeDao->insertObject($reviewObjectType); // insert review object metadata foreach ($reviewObjectMetadataArray as $key => $reviewObjectMetadata) { $reviewObjectMetadata->setReviewObjectTypeId($reviewObjectTypeId); $reviewObjectMetadata->setKey($key); $reviewObjectMetadataDao->insertObject($reviewObjectMetadata); $reviewObjectMetadataDao->resequence($reviewObjectTypeId); } } }
/** * @see Form::execute() */ function execute() { $ofrPlugin =& PluginRegistry::getPlugin('generic', $this->parentPluginName); $journal =& Request::getJournal(); $journalId = $journal->getId(); $ofrPlugin->import('classes.ReviewObjectMetadata'); $reviewObjectMetadataDao =& DAORegistry::getDAO('ReviewObjectMetadataDAO'); if ($this->reviewObjectMetadata == null) { $reviewObjectMetadata = $reviewObjectMetadataDao->newDataObject(); $reviewObjectMetadata->setReviewObjectTypeId($this->reviewObjectTypeId); $reviewObjectMetadata->setSequence(REALLY_BIG_NUMBER); } else { $reviewObjectMetadata =& $this->reviewObjectMetadata; } $reviewObjectMetadata->setName($this->getData('name'), null); // Localized $reviewObjectMetadata->setRequired($this->getData('required') ? 1 : 0); $reviewObjectMetadata->setDisplay($this->getData('display') ? 1 : 0); $reviewObjectMetadata->setMetadataType($this->getData('metadataType')); if (in_array($this->getData('metadataType'), ReviewObjectMetadata::getMultipleOptionsTypes())) { $reviewObjectMetadata->setPossibleOptions($this->getData('possibleOptions'), null); // Localized } else { $reviewObjectMetadata->setPossibleOptions(null, null); } if ($reviewObjectMetadata->getId() != null) { $reviewObjectMetadataDao->deleteSetting($reviewObjectMetadata->getId(), 'possibleOptions'); $reviewObjectMetadataDao->updateObject($reviewObjectMetadata); } else { $reviewObjectMetadataDao->insertObject($reviewObjectMetadata); $reviewObjectMetadataDao->resequence($this->reviewObjectTypeId); } }
/** * Update or install review objects * @param $journal Journal * @param $reviewObjects array of review object types keys or ids * @param $locales array of locales * @param $action string (install or update) */ function _updateOrInstallReviewObjectTypes($journal, $reviewObjects, $locales, $action) { $plugin =& $this->_getObjectsForReviewPlugin(); if (!isset($journal) || !isset($reviewObjects) || !isset($locales) || !isset($action)) { return false; } $journalId = $journal->getId(); $plugin->import('classes.ReviewObjectType'); $plugin->import('classes.ReviewObjectMetadata'); $reviewObjectTypeDao =& DAORegistry::getDAO('ReviewObjectTypeDAO'); $reviewObjectMetadataDao =& DAORegistry::getDAO('ReviewObjectMetadataDAO'); $onlyCommonMetadata = false; foreach ($reviewObjects as $keyOrId) { if ($action == 'install') { // Create a new review object type $reviewObjectType = $reviewObjectTypeDao->newDataObject(); $reviewObjectType->setContextId($journalId); $reviewObjectType->setActive(0); $reviewObjectType->setKey($keyOrId); } elseif ($action == 'update') { // Get the review object type $reviewObjectType =& $reviewObjectTypeDao->getById($keyOrId, $journalId); if (!isset($reviewObjectType)) { return false; } // If the type was created by the user, update only the common metadata if ($reviewObjectType->getKey() == NULL) { $onlyCommonMetadata = true; } } // Callect the metadata in the array $reviewObjectMetadataArray = array(); // For all languages foreach ($locales as $locale) { // Register the locale/translation file $localePath = $plugin->getPluginPath() . '/locale/' . $locale . '/locale.xml'; AppLocale::registerLocaleFile($locale, $localePath, true); $xmlDao = new XMLDAO(); // Get common metadata $commonDataPath = $plugin->getPluginPath() . '/xml/commonMetadata.xml'; $commonData = $xmlDao->parse($commonDataPath); $commonMetadata = $commonData->getChildByName('objectMetadata'); $allMetadataChildren = $commonMetadata->getChildren(); // Get the object metadata if (!$onlyCommonMetadata) { // Parse the review object XML file $itemPath = $plugin->getPluginPath() . '/xml/reviewObjects/' . $reviewObjectType->getKey() . '.xml'; $data = $xmlDao->parse($itemPath); if (!$data) { return false; } // Set the review object name $itemTypeName = __($data->getChildValue('objectType'), array(), $locale); $reviewObjectType->setName($itemTypeName, $locale); // $reviewObjectType->setDescription($itemTypeNameDescription, $locale); // Get the review object role selection options $roleSelectionOptions = $data->getChildByName('roleSelectionOptions'); // Handle Metadata // Get multiple options metadata types $multipleOptionsTypes = ReviewObjectMetadata::getMultipleOptionsTypes(); // Get metadata types defined in DTD $dtdTypes = ReviewObjectMetadata::getMetadataDTDTypes(); // Get the review object metadata $itemMetadata = $data->getChildByName('objectMetadata'); // Merge all (common + review objec) metadata $allMetadataChildren = array_merge($commonMetadata->getChildren(), $itemMetadata->getChildren()); } // Go through the metadata foreach ($allMetadataChildren as $metadataNode) { $key = $metadataNode->getAttribute('key'); // If we have already went througt, collected/considered the metadata if (array_key_exists($key, $reviewObjectMetadataArray)) { $reviewObjectMetadata = $reviewObjectMetadataArray[$key]; } else { if ($action == 'update') { // Get the metadata $reviewObjectMetadata = $reviewObjectMetadataDao->getByKey($key, $reviewObjectType->getId()); } if ($action == 'install' || !isset($reviewObjectMetadata)) { // Create a new metadata $reviewObjectMetadata = $reviewObjectMetadataDao->newDataObject(); $reviewObjectMetadata->setSequence(REALLY_BIG_NUMBER); $metadataType = $dtdTypes[$metadataNode->getAttribute('type')]; $reviewObjectMetadata->setMetadataType($metadataType); $required = $metadataNode->getAttribute('required'); $reviewObjectMetadata->setRequired($required == 'true' ? 1 : 0); $display = $metadataNode->getAttribute('display'); $reviewObjectMetadata->setDisplay($display == 'true' ? 1 : 0); } } // Set metadata name $name = __($metadataNode->getChildValue('name'), array(), $locale); $reviewObjectMetadata->setName($name, $locale); // Set roles options if ($key == REVIEW_OBJECT_METADATA_KEY_ROLE) { if (!$onlyCommonMetadata) { $possibleOptions = array(); $index = 1; foreach ($roleSelectionOptions->getChildren() as $selectionOptionNode) { $possibleOptions[] = array('order' => $index, 'content' => __($selectionOptionNode->getValue(), array(), $locale)); $index++; } $reviewObjectMetadata->setPossibleOptions($possibleOptions, $locale); } } else { // Set possible options for multiple options metadata type if (in_array($reviewObjectMetadata->getMetadataType(), $multipleOptionsTypes)) { $selectionOptions = $metadataNode->getChildByName('selectionOptions'); $possibleOptions = array(); $index = 1; foreach ($selectionOptions->getChildren() as $selectionOptionNode) { $possibleOptions[] = array('order' => $index, 'content' => __($selectionOptionNode->getValue(), array(), $locale)); $index++; } $reviewObjectMetadata->setPossibleOptions($possibleOptions, $locale); } else { $reviewObjectMetadata->setPossibleOptions(null, null); } } // Collect/consider the metadata $reviewObjectMetadataArray[$key] = $reviewObjectMetadata; unset($reviewObjectMetadata); } // End foreach metadata } // End foreach locales // Insert resp. update the review object type if ($action == 'install') { $reviewObjectTypeId = $reviewObjectTypeDao->insertObject($reviewObjectType); } elseif ($action == 'update') { $reviewObjectTypeDao->updateObject($reviewObjectType); } // Insert resp. update review object metadata foreach ($reviewObjectMetadataArray as $key => $reviewObjectMetadata) { // if this is a new metadata insert it if ($reviewObjectMetadata->getKey() == '') { $reviewObjectMetadata->setKey($key); $reviewObjectMetadata->setReviewObjectTypeId($reviewObjectType->getId()); $reviewObjectMetadataDao->insertObject($reviewObjectMetadata); $reviewObjectMetadataDao->resequence($reviewObjectType->getId()); } else { $reviewObjectMetadataDao->updateObject($reviewObjectMetadata); } } unset($reviewObjectType); } // End foreach review objects }