synergy/server/db/ProjectDAO.php (185 lines of code) (raw):
<?php
namespace Synergy\DB;
use PDO;
use Synergy\Controller\Mediator;
use Synergy\Misc\Util;
use Synergy\Model\Project\Project;
/**
* Description of ProjectDAO
*
*/
class ProjectDAO {
public function getProjects() {
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("SELECT id, name,report_link,display_link,multi_display_link FROM project ORDER BY name");
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
$results = array();
while ($row = $handler->fetch(PDO::FETCH_ASSOC)) {
$p = new Project(intval($row["id"], 10), $row["name"]);
$p->reportLink = $row["report_link"];
$p->viewLink = $row["display_link"];
$p->multiViewLink = $row["multi_display_link"];
$results[] = $p;
}
return $results;
}
public function getProjectsForSpecification($specificationId) {
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("SELECT p.id, p.name,p.bug_tracking_system FROM specification_has_project sp, project p WHERE sp.specification_id=:id AND sp.project_id=p.id ORDER BY id ASC");
$handler->bindParam(':id', $specificationId);
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
$results = array();
while ($row = $handler->fetch(PDO::FETCH_ASSOC)) {
$p = new Project(intval($row["id"], 10), $row["name"]);
$p->setBugTrackingSystem($row["bug_tracking_system"]);
$results[] = $p;
}
return $results;
}
public function removeProjectsForSpecification($deletedId) {
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("DELETE FROM specification_has_project WHERE specification_id=:id");
$handler->bindParam(':id', $deletedId);
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
return true;
}
public function isNameUsed($name, $excludeID) {
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("SELECT name FROM project WHERE name=:v AND id!=:i");
$handler->bindValue(":v", Util::purifyHTML($name));
$handler->bindValue(":i", $excludeID);
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
while ($row = $handler->fetch(PDO::FETCH_ASSOC)) {
return true;
}
return false;
}
public function updateProject($id, $newname, $reportLink, $viewLink, $multiViewLink, $bugTrackingSystem) {
if (is_null($reportLink)) {
$reportLink = "";
}
if (is_null($viewLink)) {
$viewLink = "";
}
if (is_null($multiViewLink)) {
$multiViewLink = "";
}
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("UPDATE project v SET v.name=:v, report_link=:r, display_link=:d,multi_display_link=:m,bug_tracking_system=:t WHERE id=:id");
$handler->bindValue(":v", Util::purifyHTML($newname));
$handler->bindParam(":id", $id);
$handler->bindParam(":d", $viewLink);
$handler->bindParam(":r", $reportLink);
$handler->bindParam(":m", $multiViewLink);
$handler->bindParam(":t", $bugTrackingSystem);
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
Mediator::emit("ProjectUpdated", $id);
return true;
}
public function createProject($projectName) {
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("INSERT INTO project (name) VALUES (:v)");
$handler->bindValue(":v", Util::purifyHTML($projectName));
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
$pid = DB_DAO::getDB()->lastInsertId();
Mediator::emit("ProjectCreated", $pid);
return $pid;
}
/**
* Removes project but leaves all specifications
* @param type $projectId
* @return boolean
*/
public function deleteProject($projectId) {
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("DELETE FROM project WHERE id=:id ");
$handler->bindParam(':id', $projectId);
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
$this->deleteProjectFromSpecs($projectId);
Mediator::emit("versionDeleted", $projectId);
return true;
}
private function deleteProjectFromSpecs($projectId) {
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("DELETE FROM specification_has_project WHERE project_id=:id ");
$handler->bindParam(':id', $projectId);
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
}
public function deleteProjectForSpecification($specificationId) {
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("DELETE FROM specification_has_project WHERE specification_id=:id ");
$handler->bindParam(':id', $specificationId);
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
return true;
}
public function addProjectToSpecification($specificationId, $projectId) {
error_log($specificationId . " " . $projectId);
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("INSERT INTO specification_has_project (specification_id, project_id) VALUES (:s, :p)");
$handler->bindValue(":s", $specificationId);
$handler->bindValue(":p", $projectId);
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
return true;
}
public function getProjectsForSpecifications($latestSpecs) {
$sqlString = Util::arrayToSQLOR($latestSpecs, "sp.specification_id");
DB_DAO::connectDatabase();
// https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
$handler = DB_DAO::getDB()->prepare("SELECT sp.specification_id, GROUP_CONCAT(p.id SEPARATOR ';') AS pids , GROUP_CONCAT(p.name SEPARATOR ';') as pnames FROM specification_has_project sp, project p WHERE sp.project_id=p.id AND " . $sqlString . " GROUP BY sp.specification_id ORDER BY sp.specification_id ASC");
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
$results = array();
$projects = array();
while ($row = $handler->fetch(PDO::FETCH_ASSOC)) {
$projects = array();
$pids = explode(";", $row["pids"]);
$pnames = explode(";", $row["pnames"]);
foreach ($pids as $index => $value) {
$projects[] = new Project($value, $pnames[$index]);
}
$results["id" . $row["specification_id"]] = $projects;
}
return $results;
}
public function getProjectDetailed($projectId) {
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("SELECT name,id,report_link,display_link,multi_display_link,bug_tracking_system FROM project WHERE id=:i");
$handler->bindValue(":i", $projectId);
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
while ($row = $handler->fetch(PDO::FETCH_ASSOC)) {
$p = new Project($row["id"], $row["name"]);
$p->setBugTrackingSystem($row["bug_tracking_system"]);
$p->viewLink = $row["display_link"];
$p->multiViewLink = $row["multi_display_link"];
$p->reportLink = $row["report_link"];
return $p;
}
return null;
}
public function getSpecificationsIds($projectId) {
DB_DAO::connectDatabase();
$handler = DB_DAO::getDB()->prepare("SELECT DISTINCT specification_id FROM specification_has_project WHERE project_id=:i GROUP BY specification_id");
$handler->bindValue(":i", $projectId);
if (!$handler->execute()) {
DB_DAO::throwDbError($handler->errorInfo());
}
$ids = array();
while ($row = $handler->fetch(PDO::FETCH_ASSOC)) {
$ids["id" . $row["specification_id"]] = intval($row["specification_id"], 10);
}
return $ids;
}
}