bouffeatulm/inc/Storage.class.php

277 lines
7.4 KiB
PHP
Raw Normal View History

2013-08-07 23:29:57 +02:00
<?php
2013-08-12 09:52:50 +02:00
require_once('data/config.php');
2013-08-07 23:29:57 +02:00
class Storage {
private $connection = null;
public function __construct() {
$this->connect();
2013-08-07 23:29:57 +02:00
}
public function __destruct() {
2013-08-07 23:29:57 +02:00
$this->disconnect();
}
2013-08-26 09:52:04 +02:00
// Connection functions
// ====================
2013-08-07 23:29:57 +02:00
public function connect() {
$this->connection = new PDO('mysql:host='.MYSQL_HOST.';dbname='.MYSQL_DB, MYSQL_LOGIN, MYSQL_PASSWORD);
$this->connection->query('SET NAMES utf8');
}
public function disconnect() {
$this->connection = null;
}
2013-08-26 09:52:04 +02:00
// Getters
// =======
2013-08-07 23:29:57 +02:00
public function getHost() {
return $this->host;
}
public function getLogin() {
return $this->login;
}
public function getPassword() {
return $this->password;
}
public function getDb() {
return $this->db;
}
2013-09-08 00:41:49 +02:00
public function getConnection() {
return $this->connection;
}
2013-08-26 09:52:04 +02:00
// Setters
// =======
2013-08-07 23:29:57 +02:00
public function setHost($host) {
$this->host = host;
}
public function setLogin($login) {
$this->login = $login;
}
public function setPassword($password) {
$this->password = $password;
}
public function setDb($db) {
$this->db = $db;
2013-08-07 23:29:57 +02:00
}
2013-08-26 09:52:04 +02:00
// Translates types in class to SQL types
// ======================================
2013-08-07 23:29:57 +02:00
public function typeToSQL($type) {
$return = false;
switch($type) {
case 'int':
2013-08-30 20:07:52 +02:00
$return = 'INT(11)';
break;
case 'key':
$return = 'INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY';
2013-08-07 23:29:57 +02:00
break;
2013-08-30 20:07:52 +02:00
case 'float':
$return = 'FLOAT';
break;
2013-08-07 23:29:57 +02:00
case 'string':
$return = 'VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci';
2013-08-07 23:29:57 +02:00
break;
2013-08-22 23:14:14 +02:00
case 'date':
$return = 'DATETIME NOT NULL';
break;
2013-08-07 23:29:57 +02:00
case 'bool':
$return = 'TINYINT(1)';
break;
case 'password':
$return = 'VARCHAR(130)';
2013-08-07 23:29:57 +02:00
break;
case 'text':
2013-08-07 23:29:57 +02:00
default:
$return = 'TEXT CHARACTER SET utf8 COLLATE utf8_general_ci';
2013-08-07 23:29:57 +02:00
break;
}
}
2013-08-26 09:52:04 +02:00
// Load function
// =============
2013-08-27 15:51:04 +02:00
public function load($fields = NULL, $first_only = false) {
2013-08-09 00:44:43 +02:00
$query = 'SELECT ';
$i = false;
foreach($this->fields as $field=>$type) {
if($i) { $query .= ','; } else { $i = true; }
$query .= $field;
}
$query .= ' FROM '.MYSQL_PREFIX.$this->TABLE_NAME;
if(!empty($fields) && is_array($fields)) {
$i = true;
foreach($fields as $field=>$value) {
if($i) { $query .= ' WHERE '; $i = false; } else { $query .= ' AND '; }
if(!is_array($value)) {
$value = array($value);
}
foreach($value as $value_array) {
2013-09-06 18:09:19 +02:00
if($value_array == 'AND' || $value_array == 'OR') {
$query .= ' '.$value_array.' ';
continue;
}
if(substr($value_array, 0, 1) == "<")
$query .= $field.'<:'.$field;
elseif(substr($value_array, 0, 1) == ">")
$query .= $field.'>:'.$field;
else
$query .= $field.'=:'.$field;
}
2013-08-09 00:44:43 +02:00
}
}
$query = $this->connection->prepare($query);
if(!empty($fields) && is_array($fields)) {
foreach($fields as $field=>$value) {
if(!is_array($value))
$value = array($value);
2013-08-30 20:07:52 +02:00
if($fields[$field] == 'date')
$value = $value->format('Y-m-d H:i:s');
foreach($value as $value_array) {
if($value_array == 'AND' || $value_array == 'OR')
continue;
2013-09-06 18:09:19 +02:00
if(substr($value_array, 0, 1) == ">" || substr($value_array, 0, 1) == "<")
$query->bindParam(':'.$field, substr($value_array, 0, 1));
else
2013-09-06 18:09:19 +02:00
$query->bindParam(':'.$field, $value_array);
}
2013-08-09 00:44:43 +02:00
}
}
$query->execute();
2013-08-27 15:51:04 +02:00
$results = $query->fetchAll();
if(count($results) > 0) {
$return = array();
$class = get_class($this);
foreach($results as $result) {
$return[$result['id']] = new $class();
$return[$result['id']]->sessionRestore($result);
}
if($first_only)
return $return[$result['id']];
2013-08-27 15:51:04 +02:00
else
return $return;
}
else {
return false;
}
2013-08-09 00:44:43 +02:00
}
2013-08-26 09:52:04 +02:00
// Storing function
// ================
public function save() {
if(!empty($this->id)) {
2013-08-09 00:44:43 +02:00
$query = 'UPDATE '.MYSQL_PREFIX.$this->TABLE_NAME.' SET ';
2013-08-07 23:29:57 +02:00
$i = false;
foreach($this->fields as $field=>$type) {
if(isset($this->$field))
{
if($i) { $query .= ','; } else { $i = true; }
$query .= $field.'=:'.$field;
}
}
2013-08-07 23:29:57 +02:00
2013-08-10 22:33:39 +02:00
$query .= ' WHERE id='.$this->id;
}
else {
$query = 'INSERT INTO '.MYSQL_PREFIX.$this->TABLE_NAME.'(';
$i = false;
foreach($this->fields as $field=>$type) {
if($i) { $query .= ','; } else { $i = true; }
$query .= $field;
}
$query .= ') VALUES(';
$i = false;
foreach($this->fields as $field=>$type) {
if(isset($this->$field)) {
if($i) { $query .= ','; } else { $i = true; }
$query .= ':'.$field;
}
}
$query .= ')';
}
2013-08-09 00:44:43 +02:00
2013-08-10 22:33:39 +02:00
$this->connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$query = $this->connection->prepare($query);
foreach($this->fields as $field=>$type) {
if(isset($this->$field)) {
if($type == 'date')
$value = $this->$field->format('Y-m-d H:i:s');
else
$value = $this->$field;
2013-08-30 20:07:52 +02:00
2013-09-08 15:54:44 +02:00
$query->bindValue(':'.$field, $value);
}
}
$query->execute();
2013-09-08 15:54:44 +02:00
(empty($this->id) ? $this->setId($this->connection->lastInsertId()) : $this->setId($this->id));
}
2013-08-11 22:34:39 +02:00
2013-08-26 09:52:04 +02:00
// Delete function
// ===============
2013-08-11 22:34:39 +02:00
public function delete() {
$query = 'DELETE FROM '.MYSQL_PREFIX.$this->TABLE_NAME.' WHERE ';
$i = false;
foreach($this->fields as $field=>$type) {
if(!empty($this->$field)) {
if($i) { $query .= ' AND '; } else { $i = true; }
$query .= $field.'=:'.$field;
}
}
$query = $this->connection->prepare($query);
foreach($this->fields as $field=>$type) {
if(!empty($this->$field)) {
2013-08-30 20:07:52 +02:00
if($fields[$field] == 'date')
$value = $value->format('Y-m-d H:i:s');
2013-08-11 22:34:39 +02:00
$query->bindParam(':'.$field, $this->$field);
}
}
$query->execute();
}
2013-08-07 23:29:57 +02:00
}