. */ /** * An interface to the contact table in the database */ class Contact { /** * @var PDO $pdo The PDO class for database communication * @var int $id The id of the contact * @var int $clientId The id of the client the contact is linked to * @var string $name The name of the contact * @var string $email The email address of the contact * @var string $address The first address line (normally street and house number) of the contact * @var string $address_2 The second address line (can be null) * @var string $postal_code The postal code of the contact * @var string $city The city of the contact * @var string $country The country of the contact * @var string $language The language of the contact */ protected $pdo, $id, $clientId, $name, $email, $address, $postal_code, $city, $country, $language; /** * Create a new instance * * @param PDO $pdo The PDO class, to access the database * @param int $id The id of the contact to fetch * * @throws PDOException If something went wrong with the database * @throws Exception If the contact could not be found */ public function __construct($pdo, $id) { $this->pdo = $pdo; $stmt = $this->pdo->prepare("SELECT * FROM `".Constants::db_prefix."contact` WHERE `id`=?"); $stmt->execute(array($id)); if ($stmt->rowCount() == 0) { throw new Exception("The contact with id '$id' could not be found."); } $contact = $stmt->fetch(PDO::FETCH_ASSOC); $this->id = $contact['id']; $this->clientId = $contact['clientId']; $this->name = $contact['name']; $this->email = $contact['email']; $this->address = $contact['address']; $this->address_2 = $contact['address_2']; $this->postal_code = $contact['postal_code']; $this->city = $contact['city']; $this->country = $contact['country']; $this->language = $contact['language']; } //------------------------------------------------------------------------------ // Getters and setters //------------------------------------------------------------------------------ /** * Get the ID of the contact * * @return int The ID */ public function getId() { return $this->id; } /** * Get the ID of the client that this contact is linked to * * @return int The ID */ public function getClientId() { return $this->clientId; } /** * Get the client that this contact is linked to * * @return client The client */ public function getClient() { return new Client($this->pdo, $this->clientId); } /** * Get the name of the contact * * @return string The name */ public function getName() { return $this->name; } /** * Set the name of the contact * * @param string $name The new name for the contact * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setName($name) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."contact` SET `name`=? WHERE `id`=?"); $stmt->execute(array($name, $this->id)); if ($stmt->rowCount() == 1) { $this->name = $name; return true; } else { return false; } } /** * Get the email of the contact * * @return string The email */ public function getEmail() { return $this->email; } /** * Set the email of the contact * * @param string $email The new email for the contact * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setEmail($email) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."contact` SET `email`=? WHERE `id`=?"); $stmt->execute(array($email, $this->id)); if ($stmt->rowCount() == 1) { $this->email = $email; return true; } else { return false; } } /** * Get the first address line of the contact * * @return string The address */ public function getAddress() { return $this->address; } /** * Set the first address line of the contact * * @param string $address The new address for the contact * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setAddress($address) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."contact` SET `address`=? WHERE `id`=?"); $stmt->execute(array($address, $this->id)); if ($stmt->rowCount() == 1) { $this->address = $address; return true; } else { return false; } } /** * Get the second address line of the contact * * @return string The address */ public function getAddress_2() { return $this->address_2; } /** * Set the second address line of the contact * * @param string $address_2 The new address for the contact * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setAddress_2($address_2) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."contact` SET `address_2`=? WHERE `id`=?"); $stmt->execute(array($address_2, $this->id)); if ($stmt->rowCount() == 1) { $this->address_2 = $address_2; return true; } else { return false; } } /** * Get the postal_code of the contact * * @return string The postal_code */ public function getPostalCode() { return $this->postal_code; } /** * Set the postal code of the contact * * @param $postal_code string The new postal code for the contact * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setPostalCode($postal_code) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."contact` SET `postal_code`=? WHERE `id`=?"); $stmt->execute(array($postal_code, $this->id)); if ($stmt->rowCount() == 1) { return true; $this->postal_code = $postal_code; } else { return false; } } /** * Get the city of the contact * * @return string The city */ public function getCity() { return $this->city; } /** * Set the city of the contact * * @param string $city The new city for the contact * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setCity($city) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."contact` SET `city`=? WHERE `id`=?"); $stmt->execute(array($city, $this->id)); if ($stmt->rowCount() == 1) { $this->city = $city; return true; } else { return false; } } /** * Get the country of the contact * * @return string The country */ public function getCountry() { return $this->country; } /** * Set the country of the contact * * @param string $country The new country for the contact * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setCountry($country) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."contact` SET `country`=? WHERE `id`=?"); $stmt->execute(array($country, $this->id)); if ($stmt->rowCount() == 1) { $this->country = $country; return true; } else { return false; } } /** * Get the language of the contact * * @return string The language */ public function getLanguage() { return $this->language; } /** * Set the language of the contact * * @see correspondence::LANGUAGES The available languages * * @param string $language The new language for the contact * * @throws PDOException If something went wrong with the database * @throws Exception If the language is unknown * * @return bool True on succes, false on failure */ public function setLanguage($language) { if (!in_array($language, correspondence::LANGUAGES)) { throw new Exception("Language $language not available."); } $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."contact` SET `language`=? WHERE `id`=?"); $stmt->execute(array($language, $this->id)); if ($stmt->rowCount() == 1) { $this->language = $language; return true; } else { return false; } } //------------------------------------------------------------------------------ // Other functions //------------------------------------------------------------------------------ /** * Remove this contact from the database * * If this doesn't succeed (i.e. false is returned), that means the contact was removed manually or by another instance of this class * * @throws PDOException If something went wrong with the database * * @return bool True on success, false on failure */ public function delete() { $stmt = $this->pdo->prepare("DELETE FROM `".Constants::db_prefix."contact` WHERE `id`=?"); $stmt->execute(array($this->id)); if ($stmt->rowCount() != 1) { return false; } else { return true; } } /** * Make a new offer for this contact * * @throws PDOException If something went wrong with the database * @throws Exception If there was a problem with the input * * @return offer A new instance of the offer class containing the new offer */ public function createOffer() { $stmt = $this->pdo->prepare("INSERT INTO `".Constants::db_prefix."offer` (`contactId`) VALUES (?)"); $stmt->execute(array($this->id)); if ($stmt->rowCount() == 1) { return new Offer($this->pdo, $this->pdo->lastInsertId()); } else { $error = $stmt->errorInfo(); throw new Exception($error[2]); } } }