synergy/server/db/SuiteDAO.php (270 lines of code) (raw):

<?php namespace Synergy\DB; use PDO; use Synergy\Controller\Mediator; use Synergy\Misc\Util; use Synergy\Model\Suite; use Synergy\Model\TestCase; /** * Description of SuiteDAO * * @author vriha */ class SuiteDAO { //put your code here /** * Deletes all suites for given specification * @param int $spec_id */ public function deleteSuitesForSpecification($spec_id) { DB_DAO::connectDatabase(); $handler2 = DB_DAO::getDB()->prepare("DELETE FROM suite WHERE specification_id=:id "); $handler2->bindParam(':id', $spec_id); if (!$handler2->execute()) { DB_DAO::throwDbError($handler2->errorInfo()); } } public function deleteSuiteRefFromSpec($obsolete) { DB_DAO::connectDatabase(); $handler3 = DB_DAO::getDB()->prepare("DELETE FROM suite_has_case WHERE " . $obsolete); if (!$handler3->execute()) { DB_DAO::throwDbError($handler3->errorInfo()); } } public function getSuite($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT s.id, s.title, s.description, s.product,s.component, s.specification_id, s.order, sp.title as stitle, v.version FROM specification sp, suite s, version v WHERE s.id=:id AND s.specification_id=sp.id AND sp.is_active=1 AND v.id=sp.version_id"); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $s = new Suite(intval($row['id']), $row['description'], $row['title'], $row['product'], $row['component'], $row['specification_id'], $row['order']); $s->version = $row['version']; $s->specificationTitle = $row['stitle']; return $s; } return null; } /** * Returns only basic information about cases (no steps or result) * @param type $id * @return array */ public function getTestCases($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT c.id, c.duration, c.duration_count, c.title, c.order, GROUP_CONCAT(k.keyword SEPARATOR '|') as keywords FROM (`case` c, suite_has_case sc) LEFT JOIN (case_has_keyword ck, keyword k) ON (ck.case_id = c.id AND k.id=ck.keyword_id) WHERE c.id=sc.case_id AND sc.suite_id=:id GROUP BY c.id ORDER BY c.order, c.id ASC"); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $cases = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $duration = round(intval($row['duration']) / intval($row['duration_count'])); $t = new TestCase($row['title'], $duration, $row['id'], $row['order']); $t->setKeywords($row['keywords'], '|'); $t->suiteId = intval($id); array_push($cases, $t); } return $cases; } /** * Returns full test cases (including steps and result) * @param type $id * @return array */ public function getTestCasesDetailed($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT c.id, c.duration, c.duration_count, c.title, c.steps, c.result, c.order, GROUP_CONCAT(k.keyword SEPARATOR '|') as keywords FROM (`case` c, suite_has_case sc) LEFT JOIN (case_has_keyword ck, keyword k) ON (ck.case_id = c.id AND k.id=ck.keyword_id) WHERE c.id=sc.case_id AND sc.suite_id=:id GROUP BY c.id ORDER BY c.order, c.id ASC"); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $cases = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $duration = round(intval($row['duration']) / intval($row['duration_count'])); $t = new TestCase($row['title'], $duration, $row['id'], $row['order']); $t->setKeywords($row['keywords'], '|'); $t->steps = $row['steps']; $t->result = $row['result']; array_push($cases, $t); } return $cases; } public function getTestCasesDetailedByLabel($id, $label) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT c.id, c.duration, c.duration_count, c.title, c.steps, c.result, c.order, GROUP_CONCAT(k.keyword SEPARATOR '|') as keywords FROM (`case` c, suite_has_case sc) JOIN (case_has_keyword ck, keyword k) ON (ck.case_id = c.id AND k.id=ck.keyword_id) WHERE c.id=sc.case_id AND sc.suite_id=:id AND k.keyword=:l GROUP BY c.id ORDER BY c.order, c.id ASC"); $handler->bindParam(':id', $id); $handler->bindParam(':l', $label); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $cases = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $duration = round(intval($row['duration']) / intval($row['duration_count'])); $t = new TestCase($row['title'], $duration, $row['id'], $row['order']); $t->setKeywords($row['keywords'], '|'); $t->steps = $row['steps']; $t->result = $row['result']; array_push($cases, $t); } return $cases; } public function getTestCasesIds($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT case_id FROM suite_has_case sc WHERE sc.suite_id=:id"); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $cases = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { array_push($cases, intval($row['case_id'])); } return $cases; } public function updateSuite($id, $title, $desc, $product, $component, $order) { DB_DAO::connectDatabase(); if (is_null($order)) { $handler = DB_DAO::getDB()->prepare("UPDATE suite SET title=:title, description=:desc, product=:pid, component=:cid WHERE id=:id "); } else { $handler = DB_DAO::getDB()->prepare("UPDATE suite SET title=:title, description=:desc, product=:pid, component=:cid, `order`=:ord WHERE id=:id "); $handler->bindValue(':ord', $order); } $handler->bindParam(':id', $id); $handler->bindValue(':title', Util::purifyHTML($title)); $handler->bindValue(':desc', Util::purifyHTML($desc)); $handler->bindValue(':pid', Util::purifyHTML($product)); $handler->bindValue(':cid', Util::purifyHTML($component)); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); return false; } return true; } public function deleteSuite($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM suite WHERE id=:id "); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } Mediator::emit("suiteDeleted", $id); return true; } public function deleteReferencesToCases($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM suite_has_case WHERE suite_id=:id "); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } } public function getSuiteTitle($suiteId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT title FROM suite WHERE id=:id"); $handler->bindParam(':id', $suiteId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return $row['title']; } return ""; } /** * Creates a new test suite for given specification * @param type $specificationId * @param type $title * @param type $description * @param type $product * @param type $component */ public function createSuite($specificationId, $title, $description, $product, $component, $order) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("INSERT INTO suite (title, description, product, component, specification_id, `order`) VALUES (:title, :desc, :pid, :cid, :specid, :or)"); $handler->bindValue(':title', Util::purifyHTML($title)); $handler->bindValue(':desc', Util::purifyHTML($description)); $handler->bindValue(':pid', Util::purifyHTML($product)); $handler->bindValue(':cid', Util::purifyHTML($component)); $handler->bindValue(':specid', intval($specificationId)); $handler->bindValue(':or', intval($order)); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $newid = DB_DAO::getDB()->lastInsertId(); Mediator::emit("suiteAddedToSpecification", array("specificationId" => $specificationId, "suiteId" => $newid)); return $newid; ; } /** * Adds case to suite * @param type $caseId * @param type $suiteId * @return boolean true if successful */ public function addCaseToSuite($caseId, $suiteId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("INSERT INTO suite_has_case (suite_id, case_id) VALUES (:sid, :cid)"); $handler->bindParam(':sid', $suiteId); $handler->bindParam(':cid', $caseId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } Mediator::emit("caseAddedToSuite", array("caseId" => $caseId, "suiteId" => $suiteId)); return true; } /** * Returns true if given suite already has given case * @param type $caseId * @param type $suiteId * @return boolean */ public function suiteAlreadyHasCase($caseId, $suiteId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT suite_id FROM suite_has_case WHERE suite_id=:sid AND case_id=:id"); $handler->bindParam(':id', $caseId); $handler->bindParam(':sid', $suiteId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return true; } return false; } /** * Returns true if no other suite has this case * @param type $id * @param type $suiteId * @return boolean */ public function onlySuiteHasCase($id, $suiteId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT count(suite_id) as suites FROM suite_has_case WHERE case_id=:cid AND suite_id!=:sid"); $handler->bindParam(':cid', $id); $handler->bindParam(':sid', $suiteId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { if (intval($row['suites']) === 0) { return true; } else { return false; } } return false; } public function cloneSpecificationSuite($newSpecId, $suite) { if(is_null($suite->order) || !isset($suite->order)){ $suite->order = 0; } DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("INSERT INTO suite (title, description, product, component, specification_id, `order`) VALUES (:t, :d, :p, :c, :s, :o)"); $handler->bindParam(':c', $suite->component); $handler->bindParam(':p', $suite->product); $handler->bindValue(':t', $suite->title); $handler->bindValue(':d', $suite->desc); $handler->bindValue(':o', $suite->order); $handler->bindParam(':s', $newSpecId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); return -1; } return intval(DB_DAO::getDB()->lastInsertId()); } /** * Returns total number of suites * @return int */ public function getSuitesCount() { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT count(id) as id FROM suite"); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return intval($row['id']); } return 0; } public function findMatchingSuites($title, $limit = 15) { DB_DAO::connectDatabase(); $title = strtolower($title); $handler = DB_DAO::getDB()->prepare("SELECT id,title,specification_id FROM suite WHERE LOWER(title) LIKE :t ORDER BY title ASC LIMIT 0,".$limit); $title = "%" . $title . "%"; $handler->bindParam(':t', $title, PDO::PARAM_STR); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $results = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { array_push($results, new Suite($row['id'], '', $row['title'], '', '', $row['specification_id'])); } return $results; } public function getSpeficiationId($suiteId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT specification_id FROM suite WHERE id=:id"); $handler->bindParam(':id', $suiteId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return intval($row['specification_id']); } return -1; } } ?>