<?php
/**
* Provides the contact class, an interface to the contact table in the database
*
* @author Camil Staps
*
* BusinessAdmin: administrative software for small companies
* Copyright (C) 2015 Camil Staps (ViviSoft)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* 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
*
* @param string $language The new language for the contact
*
* @throws PDOException If something went wrong with the database
*
* @return bool True on succes, false on failure
*/
public function setLanguage($language) {
$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]);
}
}
}