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

<?php namespace Synergy\DB; use PDO; use Synergy\App\Synergy; use Synergy\Controller\Mediator; use Synergy\Misc\Util; use Synergy\Model\Membership; use Synergy\Model\Tribe; use Synergy\Model\User; /** * Description of TribeDAO * * @author lada */ class TribeDAO { public function getUserMembership($username) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT t.id, t.name, t.leader_id, u.id AS uid FROM tribe t, user_is_member_of m, user u WHERE u.username=:username AND m.user_id=u.id AND t.id=m.tribe_id"); $handler->bindParam(':username', $username); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $data = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $m = new Membership($row['id'], $row['name']); $m->role = "Member"; array_push($data, $m); } return $data; } /** * Returns instance of Tribe (information + list of members) * @param int $id * @return Tribe */ public function getTribe($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT name, t.id as tid, leader_id, description, username, first_name, last_name FROM tribe t, user WHERE t.id=:id AND user.id=t.leader_id"); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $m = new Tribe($row['tid'], $row['name'], $row['description'], $row['leader_id']); $m->leaderUsername = $row['username']; $m->leaderDisplayName = $row['first_name'] . " " . $row['last_name']; return $m; } return null; } /** * Returns array of users that are members of tribe given by ID * @param int $id * @return User[] */ public function getTribeMembers($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT user.username, user.first_name, user.last_name, user.id, user_image.image_path FROM (user, user_is_member_of u) LEFT JOIN user_image ON user_image.user_id=user.id WHERE user.id=u.user_id AND u.tribe_id=:id ORDER BY username ASC"); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $data = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $u = new User($row['username']); $u->id = intval($row['id']); $u->firstName = $row['first_name']; $u->lastName = $row['last_name']; if (!is_null($row["image_path"])) { $u->profileImg = IMAGE_BASE . $row["image_path"]; } array_push($data, $u); } return $data; } /** * Removes user from tribe * @param String $username * @param int $id Tribe ID */ public function removeMember($username, $id, $user_id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM user_is_member_of WHERE user_id=:id AND tribe_id=:tid"); $handler->bindParam(':id', $user_id); $handler->bindParam(':tid', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } Mediator::emit("tribeMemberDeleted", array("tribeId" => $id, "userId" => $user_id)); } /** * Returns leader * @param int $id tribe id * @return User */ public function getLeader($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT username, user.id FROM user, tribe WHERE user.id=tribe.leader_id AND tribe.id=:id"); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $u = new User($row['username']); $u->id = intval($row['id']); return $u; } return null; } public function editTribe($name, $desc, $id, $uid) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("UPDATE tribe SET name=:name, description=:desc, leader_id=:lid WHERE id=:id "); $handler->bindParam(':id', $id); $handler->bindParam(':lid', $uid); $handler->bindValue(':name', Util::purifyHTML($name)); $handler->bindValue(':desc', Util::purifyHTML($desc)); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); return false; } Mediator::emit("tribeUpdated", $id); return true; } /** * Add user to tribe * @param String $username * @param int $id tribe id * @return boolean true if successful */ public function addMember($uid, $id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("INSERT INTO user_is_member_of (user_id, tribe_id) VALUES (:uid, :tid)"); $handler->bindParam(':tid', $id); $handler->bindParam(':uid', $uid); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); return false; } Mediator::emit("tribeMemberAdded", array("tribeId" => $id, "userId" => $uid)); return true; } /** * Returns basic information about all tribes (no information about members) * @return Tribe[] */ public function getTribes() { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT name, t.id, t.description, t.leader_id FROM tribe t ORDER BY name DESC LIMIT 0,100"); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $data = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $t = new Tribe($row['id'], $row['name'], $row['description'], $row['leader_id']); array_push($data, $t); } return $data; } /** * Removes given tribe and all membership * @param type $id */ public function removeTribe($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM tribe WHERE id=:id"); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } Mediator::emit("tribeDeleted", $id); return true; } public function removeMembersOfTribe($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM user_is_member_of WHERE tribe_id=:tid"); $handler->bindParam(':tid', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } } public function removeMembersOfAllTribes() { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM user_is_member_of"); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } } /** * Creates a new tribe * @param type $leaderUsername * @param type $description * @param type $name * @return int ID of a new tribe, 0 otherwise */ public function createTribe($uid, $description, $name) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("INSERT INTO tribe (name, description, leader_id) VALUES (:name, :desc, :lid)"); $handler->bindValue(':name', Util::purifyHTML($name)); $handler->bindValue(':desc', Util::purifyHTML($description)); $handler->bindValue(':lid', intval($uid)); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $newid = DB_DAO::getDB()->lastInsertId(); Mediator::emit("tribeCreated", $newid); return $newid; } /** * Removes user from all tribes * @param int $userId */ public function removeAllMemberships($userId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM user_is_member_of WHERE user_id=:id"); $handler->bindParam(':id', $userId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } Mediator::emit("tribeMemberDeleted", array("tribeId" => -1, "userId" => $userId)); } /** * Removes tribe leader and replace it with current user * @param type $userId * @return boolean */ public function removeLeader($userId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("UPDATE tribe SET leader_id=:nid WHERE leader_id=:id "); $handler->bindParam(':id', $userId); $handler->bindValue(':nid', Synergy::getSessionProvider()->getUserId()); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); return false; } return true; } /** * Returns total number of tribes * @return int */ public function getTribesCount() { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT count(id) as id FROM tribe"); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return $row['id']; } return 0; } public function getUserLeadership($userId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT t.id, t.name FROM tribe t WHERE t.leader_id=:id"); $handler->bindParam(':id', $userId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $data = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $m = new Membership($row['id'], $row['name']); $m->role = "Leader"; array_push($data, $m); } return $data; } public function tribeExists($tribeName) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT t.id FROM tribe t WHERE t.name=:n"); $handler->bindParam(':n', $tribeName); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return true; } return false; } public function getTribeIdByName($tribeName) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT t.id FROM tribe t WHERE t.name=:n"); $handler->bindParam(':n', $tribeName); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return intval($row['id']); } return -1; } /** * * @return Tribe[] */ public function getTribesNameAndLeaders() { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT t.name, u.username, t.id FROM tribe t, user u WHERE t.leader_id=u.id"); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $results = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $t = new Tribe(intval($row["id"]), $row["name"], "", -1); $t->leaderUsername = $row["username"]; array_push($results, $t); } return $results; } public function getTribeAndSpecifications($tribeSqlString) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT t.id, GROUP_CONCAT(s.specification_id SEPARATOR ';') AS specs FROM tribe t, tribe_has_specification s WHERE s.tribe_id=t.id AND " . $tribeSqlString . " GROUP BY t.id"); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $results = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { array_push($results, new TribeOverview(intval($row["id"]), $row["specs"])); } return $results; } } class TribeOverview { public $id; public $specificationIds; function __construct($id, $specsString) { $this->id = intval($id); $this->specificationIds = array(); if (!is_null($specsString) && strlen($specsString) > 0) { $this->specificationIds = explode(";", $specsString); } } } ?>