synergy/server/db/UserDAO.php (355 lines of code) (raw):

<?php namespace Synergy\DB; use PDO; use Synergy\Controller\Mediator; use Synergy\Misc\Util; use Synergy\Model\User; use Synergy\Model\UsersResult; /** * Description of UserDAO * * @author vriha */ class UserDAO { /** * Removes specification from list of favorites * @param type $id specification ID */ public function deleteFavoriteSpecification($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM user_has_favorite WHERE specification_id=:id "); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } } /** * Returns user's id based on his username * @param String $username username * @return int User's ID or -1 if user was not found */ public function getUserIDbyUsername($username) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT id FROM user WHERE username=:username"); $handler->bindParam(':username', $username); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return intval($row['id']); } return -1; } /** * Returns array of users with username matching %username% * @param type $username * @return User[] */ public function findMatchingUsers($username) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT username FROM user WHERE username LIKE :username ORDER BY username ASC LIMIT 0,15"); $username = "%" . $username . "%"; $handler->bindParam(':username', $username, PDO::PARAM_STR); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $results = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { array_push($results, new User($row['username'])); } return $results; } /** * Returns true if user is member of tribe * @param int $uid User id * @param int $id Tribe id * @return boolean */ public function isMemberOfTribe($uid, $id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT user_id FROM user_is_member_of WHERE user_id=:uid AND tribe_id=:tid"); $handler->bindParam(':uid', $uid); $handler->bindParam(':tid', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return true; } return false; } /** * Add given specification to user's favorite list * @param type $userId * @param type $specificationId */ public function addFavorite($userId, $specificationId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("INSERT INTO user_has_favorite (specification_id, user_id) VALUES (:sid, :uid)"); $handler->bindParam(':uid', $userId); $handler->bindParam(':sid', $specificationId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } } /** * Removes favorite specification for given user * @param type $userId * @param type $specificationId */ public function removeFavorite($userId, $specificationId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM user_has_favorite WHERE specification_id=:sid AND user_id=:uid"); $handler->bindParam(':uid', $userId); $handler->bindParam(':sid', $specificationId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } } /** * Returns username for user given by id * @param type $id * @return string */ public function getUsernameById($id) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT username FROM user WHERE id=:id"); $handler->bindParam(':id', $id); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return $row['username']; } return ''; } /** * Returns list of users * @param type $page * @return UsersResult Description */ public function findUsers($page) { $start = intval((($page - 1) * USERS_PAGE)); $stop = intval((USERS_PAGE)); DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT username, first_name, last_name, role FROM user ORDER BY first_name ASC LIMIT " . $start . "," . $stop); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $result = new UsersResult($page); $users = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $u = new User($row['username']); $u->firstName = $row['first_name']; $u->lastName = $row['last_name']; $u->role = $row['role']; array_push($users, $u); } $result->users = $users; if (count($result->users) < USERS_PAGE) { $result->nextUrl = ""; } return $result; } /** * Removes all favorite specifications for given user * @param int $userId */ public function deleteFavorites($userId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM user_has_favorite WHERE user_id=:uid"); $handler->bindParam(':uid', $userId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } } public function deleteUser($userId, $username) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM user WHERE username=:uid"); $handler->bindParam(':uid', $username); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } Mediator::emit("userDeleted", array("username" => $username, "userId" => $userId)); } /** * Updates user * @param type $firstName * @param type $lastName * @param type $role * @param type $username */ public function editUser($firstName, $lastName, $role, $username, $oldUsername, $emailNotifications, $email, $password) { DB_DAO::connectDatabase(); if (isset($password) && !is_null($password)) { $handler = DB_DAO::getDB()->prepare("UPDATE user SET first_name=:f, last_name=:l,username=:u, role=:r,email=:m, email_notifications=:e, passwd=:p WHERE username=:o"); $md5psw = md5($password . SALT); $handler->bindValue(':p', $md5psw); } else { $handler = DB_DAO::getDB()->prepare("UPDATE user SET first_name=:f, last_name=:l,username=:u, role=:r,email=:m, email_notifications=:e WHERE username=:o"); } $handler->bindParam(':u', Util::purifyHTML($username)); $handler->bindParam(':o', $oldUsername); $handler->bindValue(':f', Util::purifyHTML($firstName)); $handler->bindValue(':m', Util::purifyHTML($email)); $handler->bindValue(':l', Util::purifyHTML($lastName)); $handler->bindValue(':e', ($emailNotifications ? 1 : 0)); $handler->bindValue(':r', Util::purifyHTML($role)); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); return false; } Mediator::emit("userUpdated", $username); return true; } /** * Creates new user * @param type $firstName * @param type $lastName * @param type $role * @param type $username * @return int new userID */ public function createUser($firstName, $lastName, $role, $username, $email, $emailNotifications, $password) { DB_DAO::connectDatabase(); if (isset($password) && !is_null($password)) { $handler = DB_DAO::getDB()->prepare("INSERT INTO user (first_name, last_name, role, username, email, email_notifications, passwd) VALUES (:f, :l, :r, :u, :m, :e, :p)"); $md5psw = md5($password . SALT); $handler->bindValue(':p', $md5psw); } else { $handler = DB_DAO::getDB()->prepare("INSERT INTO user (first_name, last_name, role, username, email, email_notifications) VALUES (:f, :l, :r, :u, :m, :e)"); } $handler->bindValue(':u', Util::purifyHTML($username)); $handler->bindValue(':f', Util::purifyHTML($firstName)); $handler->bindValue(':l', Util::purifyHTML($lastName)); $handler->bindValue(':r', Util::purifyHTML($role)); $handler->bindValue(':e', ($emailNotifications ? 1 : 0)); $handler->bindValue(':m', Util::purifyHTML($email)); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $newid = DB_DAO::getDB()->lastInsertId(); Mediator::emit("userCreated", $username); return $newid; } /** * Returns user * @param type $username * @return \User|null */ public function getUser($username) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT role, first_name, last_name, user.id, email_notifications, image_path, email FROM user LEFT JOIN user_image ON user_image.user_id=user.id WHERE username=:u"); $handler->bindParam(':u', $username); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $u = new User($username); $u->firstName = $row['first_name']; $u->lastName = $row['last_name']; $u->role = $row['role']; $u->email = $row['email']; $u->id = intval($row['id']); // FIXME $u->emailNotifications = (intval($row['email_notifications']) === 1 ? true : false); if (!is_null($row["image_path"])) { $u->profileImg = IMAGE_BASE . $row["image_path"]; } return $u; } return null; } /** * Returns all users * @return \User|null */ public function getAllUsers() { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT username, first_name, last_name, role FROM user ORDER BY first_name ASC "); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $result = new UsersResult(1); $users = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $u = new User($row['username']); $u->firstName = $row['first_name']; $u->lastName = $row['last_name']; $u->role = $row['role']; array_push($users, $u); } $result->users = $users; if (count($result->users) !== USERS_PAGE) { $result->nextUrl = ""; } return $result; } /** * Returns total number of users * @return int */ public function getUsersCount() { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT count(id) as id FROM user"); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return intval($row['id']); // FIXME } return 0; } /** * Edits username - only first and last name * @param type $firstName * @param type $lastName * @param type $username * @return boolean true if OK */ public function editUserSimple($firstName, $lastName, $username, $emailNotifications, $email, $password) { DB_DAO::connectDatabase(); if (isset($password) && !is_null($password)) { $handler = DB_DAO::getDB()->prepare("UPDATE user SET first_name=:f, last_name=:l, email_notifications=:e, email=:m, passwd=:p WHERE username=:u"); $md5psw = md5($password . SALT); $handler->bindValue(':p', $md5psw); } else { $handler = DB_DAO::getDB()->prepare("UPDATE user SET first_name=:f, last_name=:l, email_notifications=:e, email=:m WHERE username=:u"); } $handler->bindParam(':u', $username); $handler->bindValue(':f', Util::purifyHTML($firstName)); $handler->bindValue(':l', Util::purifyHTML($lastName)); $handler->bindValue(':e', ($emailNotifications ? 1 : 0)); $handler->bindValue(':m', Util::purifyHTML($email)); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); return false; } Mediator::emit("userUpdated", $username); return true; } public function getUserById($userId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT role, first_name, last_name, username FROM user WHERE id=:u"); $handler->bindParam(':u', $userId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $u = new User($row['username']); $u->firstName = $row['first_name']; $u->lastName = $row['last_name']; $u->role = $row['role']; $u->id = intval($userId); // FIXME return $u; } return null; } public function getManagers() { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT username, first_name, last_name, role,email FROM user WHERE role='manager' LIMIT 0, 10"); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } $users = array(); while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { $u = new User($row['username']); $u->firstName = $row['first_name']; $u->lastName = $row['last_name']; $u->role = $row['role']; $u->email = $row['email']; array_push($users, $u); } return $users; } public function removeProfileImg($userId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("DELETE FROM user_image WHERE user_id=:uid"); $handler->bindParam(':uid', $userId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } } public function getProfileImgPath($userId) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT image_path FROM user_image WHERE user_id=:id"); $handler->bindParam(':id', $userId); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return $row["image_path"]; } return ""; } public function addProfileImg($userId, $path) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("INSERT INTO user_image (image_path, user_id) VALUES (:p, :i)"); $handler->bindParam(':i', $userId); $handler->bindParam(':p', $path); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } } public function getUserIdByEmail($email) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("SELECT id FROM user WHERE email=:e"); $handler->bindParam(':e', $email); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); } while ($row = $handler->fetch(PDO::FETCH_ASSOC)) { return intval($row['id']); } return -1; } public function retireUsers($roleToRetire) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("UPDATE user SET role='formerUser' WHERE role=:r"); $handler->bindParam(':r', $roleToRetire); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); return false; } return true; } public function setRole($username, $role) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("UPDATE user SET role=:r WHERE username=:u"); $handler->bindParam(':u', $username); $handler->bindParam(':r', $role); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); return false; } return true; } public function changePassword($username, $password) { DB_DAO::connectDatabase(); $handler = DB_DAO::getDB()->prepare("UPDATE user SET passwd=:p WHERE username=:u"); $handler->bindParam(':u', $username); $md5psw = md5($password . SALT); $handler->bindValue(':p', $md5psw); if (!$handler->execute()) { DB_DAO::throwDbError($handler->errorInfo()); return false; } return true; } } ?>