Skip to content

Commit

Permalink
Merge branch 'develop' into feature/PELAGOS-3413-add-file-information…
Browse files Browse the repository at this point in the history
…-to-review

Conflicts:
	src/Pelagos/Bundle/AppBundle/Controller/UI/DatasetReviewController.php
  • Loading branch information
mickel1138 committed Dec 7, 2018
2 parents 64d8792 + 5625df0 commit 65b5340
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 123 deletions.
195 changes: 72 additions & 123 deletions src/Pelagos/Bundle/AppBundle/Controller/UI/DatasetReviewController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,25 @@
namespace Pelagos\Bundle\AppBundle\Controller\UI;

use Pelagos\Bundle\AppBundle\Form\DatasetSubmissionType;
use Pelagos\Entity\Account;
use Pelagos\Entity\Dataset;
use Pelagos\Entity\DatasetSubmission;
use Pelagos\Entity\DatasetSubmissionReview;
use Pelagos\Entity\Entity;
use Pelagos\Entity\PersonDatasetSubmissionDatasetContact;
use Pelagos\Entity\PersonDatasetSubmissionMetadataContact;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

use Symfony\Component\Form\Form;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;

use Pelagos\Entity\Account;
use Pelagos\Entity\Dataset;
use Pelagos\Entity\DatasetSubmission;
use Pelagos\Entity\DatasetSubmissionReview;
use Pelagos\Entity\Entity;
use Pelagos\Entity\PersonDatasetSubmissionDatasetContact;
use Pelagos\Entity\PersonDatasetSubmissionMetadataContact;

/**
* The Dataset Review controller for the Pelagos UI App Bundle.
*
Expand Down Expand Up @@ -123,55 +125,52 @@ protected function eligibiltyForReview($udi, Request $request)
if (!empty($datasets)) {
$dataset = $datasets[0];

$datasetSubmission = (($dataset->getDatasetSubmissionHistory()->first()) ? $dataset->getDatasetSubmissionHistory()->first() : null);

if ($datasetSubmission instanceof DatasetSubmission and $this->filerStatus($datasetSubmission)) {

$datasetSubmission = $this->latestDatasetSubmissionForReview($request, $datasetSubmission, $dataset, $udi);

} else {
$this->addToWarningDisplayQueue($request, $udi, 'notSubmitted');
}
$datasetSubmission = $this->latestDatasetSubmissionForReview($request, $dataset);
} else {
$this->addToWarningDisplayQueue($request, $udi, 'notFound');
$this->addToFlashDisplayQueue($request, $udi, 'notFound');
}

return $this->makeSubmissionForm($udi, $dataset, $datasetSubmission);
}

/**
* Gets Latest dataset submission and checks for errors to add in the flash bag.
*
* @param Request $request The Symfony request object.
* @param DatasetSubmission $datasetSubmission A dataset submission instance.
* @param Dataset $dataset A dataset instance..
* @param string $udi The UDI entered by the user.
* @param Request $request The Symfony request object.
* @param Dataset $dataset A dataset instance..
*
* @return DatasetSubmission A dataset submission instance.
*/
private function latestDatasetSubmissionForReview(Request $request, DatasetSubmission $datasetSubmission, Dataset $dataset, $udi)
private function latestDatasetSubmissionForReview(Request $request, Dataset $dataset)
{
$datasetSubmissionStatus = (($datasetSubmission) ? $datasetSubmission->getStatus() : null);
$datasetSubmissionDatasetStatus = $dataset->getDatasetStatus();

switch (true) {

case ($datasetSubmissionStatus === DatasetSubmission::STATUS_INCOMPLETE):
$this->addToWarningDisplayQueue($request, $udi, 'hasDraft');
break;
$udi = $request->query->get('udiReview');
$datasetStatus = $dataset->getDatasetStatus();
$datasetSubmission = $dataset->getLatestDatasetReview();

case ($datasetSubmissionDatasetStatus === Dataset::DATASET_STATUS_BACK_TO_SUBMITTER):
if ('view' === $this->mode) {
$this->addToNoticeDisplayQueue($request, $udi, 'backToSub');
$datasetSubmission = $this->reviewMode($request, $datasetSubmission, $dataset, $udi);
} else {
$this->addToWarningDisplayQueue($request, $udi, 'requestRevision');
if ($datasetStatus === Dataset::DATASET_STATUS_BACK_TO_SUBMITTER) {
if ('view' === $this->mode) {
$datasetSubmission = $dataset->getDatasetSubmission();
$this->addToFlashDisplayQueue($request, $udi, 'backToSub');
} else {
$this->addToFlashDisplayQueue($request, $udi, 'requestRevision');
}
} else {
if ($datasetSubmission instanceof DatasetSubmission and $this->filerStatus($datasetSubmission)) {
$datasetSubmissionReview = $datasetSubmission->getDatasetSubmissionReview();
switch (!in_array($datasetStatus, [Dataset::DATASET_STATUS_BACK_TO_SUBMITTER, Dataset::DATASET_STATUS_NONE])) {
case (empty($datasetSubmissionReview) || $datasetSubmissionReview->getReviewEndDateTime()):
$datasetSubmission = $this->createNewDatasetSubmission($datasetSubmission);
break;
case (empty($datasetSubmissionReview->getReviewEndDateTime())
and $datasetSubmissionReview->getReviewedBy() !== $this->getUser()->getPerson()):
$reviewerUserName = $this->entityHandler->get(Account::class, $datasetSubmissionReview->getReviewedBy())->getUserId();
$this->addToFlashDisplayQueue($request, $udi, 'locked', $reviewerUserName);
break;
default:
$datasetSubmission = $this->createNewDatasetSubmission($datasetSubmission);
}
break;

default:
$datasetSubmission = $this->reviewMode($request, $datasetSubmission, $dataset, $udi);
break;
} else {
$this->addToFlashDisplayQueue($request, $udi, 'notSubmitted');
}
}

return $datasetSubmission;
Expand All @@ -182,12 +181,12 @@ private function latestDatasetSubmissionForReview(Request $request, DatasetSubmi
*
* @param Request $request The Symfony request object.
* @param string $udi The UDI entered by the user.
* @param integer $error The Error code generated.
* @param integer $noticeCode The Notice/Error code generated.
* @param string $reviewerUserName Reviewer Username for the Dataset submission review.
*
* @return void
*/
private function addToWarningDisplayQueue(Request $request, $udi, $error, $reviewerUserName = null)
private function addToFlashDisplayQueue(Request $request, $udi, $noticeCode, $reviewerUserName = null)
{
$flashBag = $request->getSession()->getFlashBag();

Expand All @@ -202,30 +201,13 @@ private function addToWarningDisplayQueue(Request $request, $udi, $error, $revie
'locked' => 'The dataset ' . $udi . ' is in review mode. Username: ' . $reviewerUserName,
];

if (array_key_exists($error, $listOfErrors)) {
$flashBag->add('warning', $listOfErrors[$error]);
}
}

/**
* Add informational messages to flash bag to show it to the user.
*
* @param Request $request The Symfony request object.
* @param string $udi The UDI entered by the user.
* @param integer $noticeCode The Notice code generated.
* @param string $reviewerUserName Reviewer Username for the Dataset submission review.
*
* @return void
*/
private function addToNoticeDisplayQueue(Request $request, $udi, $noticeCode, $reviewerUserName = null)
{
$flashBag = $request->getSession()->getFlashBag();

$listOfNotices = [
'backToSub' => "Because this data is currently marked $udi is Back To Submitter, you are viewing user's latest data submission.",
'backToSub' => "Because this dataset $udi is currently in Request Revisions, you are viewing user's latest data submission.",
];

if (array_key_exists($noticeCode, $listOfNotices)) {
if (array_key_exists($noticeCode, $listOfErrors)) {
$flashBag->add('warning', $listOfErrors[$noticeCode]);
} elseif (array_key_exists($noticeCode, $listOfNotices)) {
$flashBag->add('notice', $listOfNotices[$noticeCode]);
}
}
Expand Down Expand Up @@ -258,6 +240,21 @@ protected function makeSubmissionForm($udi, Dataset $dataset = null, DatasetSubm
$datasetSubmissionStatus = $datasetSubmission->getStatus();
}

//Tidy GML.
$gml = tidy_parse_string(
$datasetSubmission->getSpatialExtent(),
array(
'input-xml' => true,
'output-xml' => true,
'indent' => true,
'indent-spaces' => 4,
'wrap' => 0,
),
'utf8'
);

$datasetSubmission->setSpatialExtent($gml);

$form = $this->get('form.factory')->createNamed(
null,
DatasetSubmissionType::class,
Expand All @@ -274,6 +271,16 @@ protected function makeSubmissionForm($udi, Dataset $dataset = null, DatasetSubm
),
)
);

// Overwrite the spatial extent field which is normally a hidden type.
$form->add('spatialExtent', TextareaType::class, array(
'label' => 'Spatial Extent GML',
'required' => false,
'attr' => array(
'rows' => '10',
'readonly' => 'true'
),
));

// Add file name, hash and filesize.
$form->add('datasetFileName', TextType::class, array(
Expand Down Expand Up @@ -358,7 +365,6 @@ function ($researchGroup) {
'mode' => $this->mode,
)
);

}

/**
Expand Down Expand Up @@ -393,7 +399,6 @@ private function createNewDatasetSubmission(DatasetSubmission $datasetSubmission
);

return $datasetSubmission;

}

/**
Expand Down Expand Up @@ -441,7 +446,6 @@ public function postAction(Request $request, $id = null)
$form->handleRequest($request);

if ($form->isSubmitted() and $form->isValid()) {

$this->processDatasetFileTransferDetails($form, $datasetSubmission);

if ($this->getUser()->isPosix()) {
Expand Down Expand Up @@ -512,7 +516,6 @@ public function postAction(Request $request, $id = null)
'reviewedBy' => $reviewedBy
)
);

}
// This should not normally happen.
return new Response((string) $form->getErrors(true, false));
Expand Down Expand Up @@ -592,58 +595,4 @@ private function filerStatus(DatasetSubmission $datasetSubmission)
}
return true;
}

/**
* Loads the appropriate dataset submission based on which mode is selected.
*
* @param Request $request The Symfony request object.
* @param DatasetSubmission $datasetSubmission A dataset submission instance.
* @param Dataset $dataset A dataset instance..
* @param string $udi The UDI entered by the user.
*
* @return DatasetSubmission A dataset submission instance.
*/
private function reviewMode(Request $request, DatasetSubmission $datasetSubmission, Dataset $dataset, $udi)
{
$datasetSubmissionStatus = (($datasetSubmission) ? $datasetSubmission->getStatus() : null);
$datasetSubmissionDatasetStatus = $dataset->getDatasetStatus();
if ('view' === $this->mode) {
// IFF the event we're viewing a BACK_TO_SUBMITTER dataset, use the one pointed referenced by Dataset
// as this will be the user's most recent submission, not a possible reviewer's version.
if ($datasetSubmissionDatasetStatus == Dataset::DATASET_STATUS_BACK_TO_SUBMITTER) {
$datasetSubmission = $dataset->getDatasetSubmission();
}
return $datasetSubmission;
} elseif ('review' === $this->mode) {
if ($datasetSubmissionDatasetStatus === $datasetSubmission->getDatasetStatus()) {
switch (true) {
case ($datasetSubmissionStatus === DatasetSubmission::STATUS_COMPLETE and $datasetSubmissionDatasetStatus !== Dataset::DATASET_STATUS_BACK_TO_SUBMITTER):
$datasetSubmission = $this->createNewDatasetSubmission($datasetSubmission);
break;
case ($datasetSubmissionStatus === DatasetSubmission::STATUS_IN_REVIEW
and ($datasetSubmissionDatasetStatus === Dataset::DATASET_STATUS_IN_REVIEW
or $datasetSubmissionDatasetStatus === Dataset::DATASET_STATUS_SUBMITTED)):
$datasetSubmissionReview = $datasetSubmission->getDatasetSubmissionReview();
switch (true) {
case (empty($datasetSubmissionReview) || $datasetSubmissionReview->getReviewEndDateTime()):
$datasetSubmission = $this->createNewDatasetSubmission($datasetSubmission);
break;
case (empty($datasetSubmissionReview->getReviewEndDateTime())
and $datasetSubmissionReview->getReviewedBy() !== $this->getUser()->getPerson()):
$reviewerUserName = $this->entityHandler->get(Account::class, $datasetSubmissionReview->getReviewedBy())->getUserId();
$this->addToWarningDisplayQueue($request, $udi, 'locked', $reviewerUserName);
break;
}
break;
}
} else {
if ($datasetSubmissionDatasetStatus === Dataset::DATASET_STATUS_IN_REVIEW
and $datasetSubmissionDatasetStatus !== $datasetSubmission->getDatasetStatus()
and $datasetSubmission->getDatasetStatus() === Dataset::DATASET_STATUS_BACK_TO_SUBMITTER) {
$datasetSubmission = $this->createNewDatasetSubmission($dataset->getDatasetSubmission());
}
}
}
return $datasetSubmission;
}
}
18 changes: 18 additions & 0 deletions src/Pelagos/Entity/Dataset.php
Original file line number Diff line number Diff line change
Expand Up @@ -772,4 +772,22 @@ public function setAcceptedDate(\DateTime $acceptedDate)
{
$this->acceptedDate = $acceptedDate;
}

/**
* Getter for the latest dataset submission review copy.
*
* @return DatasetSubmission
*/
public function getLatestDatasetReview()
{
$datasetSubmission = ($this->getDatasetSubmissionHistory()->first() ? $this->getDatasetSubmissionHistory()->first() : null);

if ($this->getDatasetStatus() === self::DATASET_STATUS_IN_REVIEW
and $this->getDatasetStatus() !== $datasetSubmission->getDatasetStatus()
and $datasetSubmission->getDatasetStatus() === self::DATASET_STATUS_BACK_TO_SUBMITTER) {
$datasetSubmission = $this->getDatasetSubmission();
}

return $datasetSubmission;
}
}

0 comments on commit 65b5340

Please sign in to comment.