synergy/server/controller/ReviewCtrl.php (130 lines of code) (raw):

<?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ namespace Synergy\Controller; use Synergy\App\Synergy; use Synergy\DB\ReviewDAO; use Synergy\Model\Review\ReviewAssignment; use Synergy\Model\Review\ReviewComment; /** * Description of TutorialCtrl * * @author vriha */ class ReviewCtrl { public static $latestRemovalType; private $userCtrl; private $reviewDao; function __construct() { $this->reviewDao = new ReviewDAO(); } private function getUserCtrl() { if (is_null($this->userCtrl)) { $this->userCtrl = new UserCtrl(); } return $this->userCtrl; } /** * Fetches given URL * @param type $url * @return type */ public function getReviewPage($url) { $rawPage = file_get_contents($url); $formatter = Synergy::getProvider("review"); $base = "<base href='" . $url . "'></base>"; // to resolve relative links correctly $content = $formatter->prepare($rawPage, $url); $content = preg_replace("/<\/body>/", "<script src=\"http://netbeans-vm.apache.org/synergy/client/app/js/excl/inspectx.js\"></script><script src=\"http://netbeans-vm.apache.org/synergy/client/app/js/excl/wgxpath.install.js\"></script>wgxpath.install();<script></script></body>", $content); // scripts $content = preg_replace("/body{display:none !important;}/", "", $content); // scripts $content = preg_replace("/<\/head>/", "<style>.sn_selected { background: #99ccff; border: 1px solid red;} * { cursor:pointer}</style>" . $base . "</head>", $content); // scripts return $content; } /** * Creates new review assignment * @param int $testRunId test run ID * @param string $username username * @param string $reviewUrl tribe ID * @param int $createdBy flag to indicate who created this assignment (in order to allow to delete assignment by user/tribe leader if he created it), possible values: 1 (for admin/manager), 2 (for volunteer), 3 (for tribe leader) * @return boolean true if successful */ public function createAssignment($testRunId, $username, $reviewUrl, $createdBy, $title, $owner) { $userId = $this->getUserCtrl()->getUserIDbyUsername($username); if ($userId < 0) { return false; } return $this->reviewDao->createAssignment(intval($testRunId), $userId, $reviewUrl, $createdBy, $title, $owner); } public function getBasicAssignment($assignmentId) { return $this->reviewDao->getBasicAssignment($assignmentId); } public function countAssignmentsForRun($testRunId) { return $this->reviewDao->countAssignmentsForRun($testRunId); } public function getAssignments($testRunId) { return $this->reviewDao->getAssignments($testRunId); } public function getAssignees($testRunId) { return $this->reviewDao->getAssignees($testRunId); } /** * Returns true if logged in user can delete assignment with ID assignmentId. User can delete assignment if: * <ul> * <li>User is admin or manager</li> * <li>given assignment was created as voluntarily and assignee === userId</li> * <li>assignment was created by tribe leader and specification belongs to the same tribe and assignee is member of the same tribe</li> * </ul> * @param int $assignmentId * @return boolean */ public function userCanDeleteAssignmentById($assignmentId) { $assignmentMeta = $this->reviewDao->getAssignmentInfo($assignmentId); switch ($assignmentMeta["createdBy"]) { case ReviewAssignment::CREATED_BY_MANAGER_ADMIN: ReviewCtrl::$latestRemovalType = ReviewAssignment::CREATED_BY_MANAGER_ADMIN; return ReviewAssignment::canDelete() || Synergy::getSessionProvider()->getUserId() === $assignmentMeta["userId"]; case ReviewAssignment::CREATED_BY_TESTER: ReviewCtrl::$latestRemovalType = ReviewAssignment::CREATED_BY_TESTER; return ReviewAssignment::canDelete() || Synergy::getSessionProvider()->getUserId() === $assignmentMeta["userId"]; default: return false; } return false; } public function deleteAssignment($assignmentId) { $this->deleteComments($assignmentId); return $this->reviewDao->deleteAssignment($assignmentId); } public function deleteComments($assignmentId) { return $this->reviewDao->deleteComments($assignmentId); } public function getAssignment($assignmentId) { $assignment = $this->reviewDao->getAssignment($assignmentId, $escapeEmail); $assignment->comments = $this->getComments($assignmentId); return $assignment; } public function getAssignmentWithoutComments($assignmentId, $escapeEmail = true) { $assignment = $this->reviewDao->getAssignment($assignmentId, $escapeEmail); return $assignment; } public function getComments($assignmentId) { return $this->reviewDao->getComments($assignmentId); } public function setLastUpdated($localTime, $assignmentId) { $this->reviewDao->setLastUpdated($localTime, $assignmentId); } public function isRequestUpToDate($assignmentId, $requestedTimestamp) { return $this->reviewDao->isRequestUpToDate($assignmentId, $requestedTimestamp); } public function checkUserIsAssigned($assignmentId, $username) { return $this->reviewDao->checkUserIsAssigned($assignmentId, $username); } public function getRunIdByAssignmentId($assignmentId) { return $this->reviewDao->getRunIdByAssignmentId($assignmentId); } public function saveAssignmentProgress($data, $assignmentId) { $this->deleteComments($assignmentId); date_default_timezone_set('UTC'); $timeInMinutes = round(intval($data->timeTaken) / 60000); if ($timeInMinutes < 1) { $timeInMinutes = 1; } $this->updateStatus($assignmentId, date('Y-m-d H:i:s'), $data->isFinished, $timeInMinutes, $data->weight); $this->reviewDao->insertComments($this->getCommentsFromProgress($assignmentId, $data), $assignmentId); if ($data->isFinished) { Mediator::emit("reviewFinished", $assignmentId); } } /** * Returns array of comments from submitted progress * @return ReviewComment[] */ private function getCommentsFromProgress($assignmentId, $progressData) { $comments = array(); foreach ($progressData->comments as $c) { $r = new ReviewComment(Synergy::getSessionProvider()->getUsername(), "", $c->text, -1, $c->elements); $r->setAssignmentId($assignmentId); array_push($comments, $r); } return $comments; } public function restartAssignment($assignmentId) { $this->deleteComments($assignmentId); $this->reviewDao->setTimeTaken($assignmentId, 0); } public function updateStatus($assignmentId, $localTime, $isFinished, $timeTaken, $pageValue = 0) { $pageValue = $isFinished ? $pageValue : 0; // #254707 $this->reviewDao->updateStatus($assignmentId, $localTime, $isFinished, $timeTaken, $pageValue); } public function getAssignmentsInPeriod($testRunId, $from, $to) { return $this->reviewDao->getAssignmentsInPeriod($testRunId, $from, $to); } public function createReviewPage($reviewPage){ return $this->reviewDao->createReviewPage($reviewPage); } }