synergy/server/model/Specification.php (198 lines of code) (raw):

<?php namespace Synergy\Model; use Synergy\App\Synergy; use Synergy\Misc\Util; use Synergy\Controller\SpecRelationCtrl; use Synergy\Model\Project\ProjectListItem; /** * Description of Specification * * @author lada */ class Specification { //put your code here public $id; public $desc; public $title; public $simpleName = ""; public $versionId; public $controls; public $authorId; public $author; public $authorName; public $ownerId; public $owner; public $ownerName; public $version; public $similar; public $isUsed; /** * * @var Suite[] */ public $testSuites; public $attachments; public $estimation; public $url; public $isFavorite = 0; public $lastUpdated; public $userIsRelated; public $ownerRole; /** * Associative array that holds information for extensions * @var array */ public $ext; function __construct($id, $desc, $title, $version, $author, $ownerId) { $this->url = BASER_URL . "specification.php?id=" . $id; $this->id = intval($id); $this->desc = $desc; $this->title = $title; $this->versionId = intval($version); $this->testSuites = array(); //$this->simpleName = $this->stringToSimpleName($this->title); $this->similar = array(); $this->authorId = intval($author); if (intval($ownerId) === -1) {// why 0?? $this->ownerId = $this->authorId; } else { $this->ownerId = intval($ownerId); } $this->controls = array(); $this->ext = array(); $this->isUsed = false; } function addControls($role) { $this->controls = array(); $this->userIsRelated = false; switch ($role) { case "tester": $ctrl = new SpecRelationCtrl(); if ($ctrl->isUserRelatedToSpec($this->id, Synergy::getSessionProvider()->getUsername())) { array_push($this->controls, new Action("Edit", "edit", "icon-pencil")); array_push($this->controls, new Action("Delete", "delete", "icon-trash")); array_push($this->controls, new Action("Clone", "clone", "icon-repeat")); $this->userIsRelated = true; } break; case "privilegedTester": case "admin": case "manager": case "leader": array_push($this->controls, new Action("Edit", "edit", "icon-pencil")); array_push($this->controls, new Action("Delete", "delete", "icon-trash")); array_push($this->controls, new Action("Clone", "clone", "icon-repeat")); $this->userIsRelated = true; break; default: break; } } public function setIsUsed($isUsed) { $this->isUsed = ($isUsed === 1) ? true : false; if ($this->isUsed) { // disable actions for ($i = 0, $max = count($this->controls); $i < $max; $i++) { switch ($this->controls[$i]->onClick) { case "delete": $this->controls[$i]->isEnabled = false; break; default: break; } } $this->disableSuiteEditActions(); } } private function disableSuiteEditActions() { for ($i = 0, $max = count($this->testSuites); $i < $max; $i++) { $this->testSuites[$i]->disableEditActions(); } } public function stringToSimpleName($title) { $title = preg_replace("/\s/", "_", trim($title)); $title = preg_replace("/\"/", "", ($title)); $title = preg_replace("/'/", "", ($title)); $title = strtolower($title); return $title; } public static function canEdit($specificationId = -1) { $role = Synergy::getSessionProvider()->getUserRole(); switch ($role) { case "tester" : $ctrl = new SpecRelationCtrl(); return $ctrl->isUserRelatedToSpec($specificationId, Synergy::getSessionProvider()->getUsername()); case "privilegedTester": case "manager" : case "admin" : return true; default : return false; } } public static function canDelete($specificationId = -1) { $role = Synergy::getSessionProvider()->getUserRole(); switch ($role) { case "tester" : $ctrl = new SpecRelationCtrl(); return $ctrl->isUserRelatedToSpec($specificationId, Synergy::getSessionProvider()->getUsername()); case "privilegedTester": case "manager" : case "admin" : return true; default : return false; } } public static function canCreate() { $role = Synergy::getSessionProvider()->getUserRole(); switch ($role) { case "tester" : case "privilegedTester": case "manager" : case "admin" : return true; default : return false; } } public function setLastUpdated($lastUpdated) { $this->lastUpdated = ""; if (isset($lastUpdated) && !is_null($lastUpdated)) { date_default_timezone_set('UTC'); $str = strtotime($lastUpdated); $this->lastUpdated = gmdate("d M Y H:i:s", $str) . " UTC"; } } public function toString() { $s = $this->title . Util::$NEW_LINE; $s .= "Description: " . $this->desc . Util::$NEW_LINE; $s .= "Author: " . $this->author . Util::$NEW_LINE; $s .= "Owner: " . $this->owner . Util::$NEW_LINE; $s .= "Version: " . $this->version . Util::$NEW_LINE; $s.= Util::$NEW_LINE; for ($i = 0, $max = count($this->testSuites); $i < $max; $i++) { $s .= $this->testSuites[$i]->toString() . Util::$NEW_LINE; } return $s; } public function getRemovalEmailSubject() { return "Request to remove specification from Synergy"; } public function removalRequestBody($users) { return "Specification " . $this->title . " (see [1]) has been requested to be removed by following users: " . $users . "\r\n [1] " . SYNERGY_URL . "client/app/#/specification/" . $this->id; } public function removalRequestBodyHTML($users) { return "Specification <strong>" . $this->title . "</strong> (see [1]) has been requested to be removed by following users: " . $users . "<br/><br/> [1] <a href='" . SYNERGY_URL . "synergy/client/app/#/specification/" . $this->id . "'>" . SYNERGY_URL . "client/app/#/specification/" . $this->id . "</a>"; } public function ownershipRequestBodyHTML($msg, $displayName, $username) { return "User <strong>" . $displayName . "</strong> (" . $username . ") has requested to be owner of specification <code>" . $this->title . "</code> (see [1]). To change owner, please go to edit specification page and change Owner field.<br/><br/> Request message:<br/><i>" . $msg . "</i><br/><br/>[1] <a href='" . SYNERGY_URL . "client/app/#/specification/" . $this->id . "'>" . SYNERGY_URL . "client/app/#/specification/" . $this->id . "</a>"; } public function ownershipRequestBody($msg, $displayName, $username) { return "User " . $displayName . " (" . $username . ") has requested to be owner of specification " . $this->title . " (see [1]). To do so, please go to edit specification page and change Owner field.\r\n \r\n Request message:\r\n " . $msg . " \r\n \r\n [1] " . SYNERGY_URL . "client/app/#/specification/" . $this->id; } public function getOwnershipRequestSubject() { return "Request to change specification ownership in Synergy"; } public function getSingleProject() { if (count($this->ext["projects"]) > 0) { return $this->ext["projects"][0]->name; } return null; } public function setProjects($ids, $names) { if ($ids !== NULL && strlen($ids) > 0) { $this->ext["projects"] = array(); $idsA = explode(";", $ids); $namesA = explode(";", $names); foreach ($idsA as $index => $value) { $this->ext["projects"][] = new ProjectListItem($namesA[$index], intval($value, 10)); } } } } ?>