2013-09-23 23:08:01 +02:00
|
|
|
<?php
|
|
|
|
require_once('data/config.php');
|
|
|
|
require_once('Storage.class.php');
|
|
|
|
|
|
|
|
class UsersInGlobalPayback extends Storage {
|
|
|
|
protected $payback_id = 0, $users_list;
|
|
|
|
//users_list is a 2D array of users_id and amount between them
|
|
|
|
//user1 owes amount to user2
|
2013-09-23 23:43:53 +02:00
|
|
|
protected $TABLE_NAME = "Users_in_GlobalPaybacks";
|
2013-09-23 23:08:01 +02:00
|
|
|
protected $fields = array(
|
|
|
|
'global_payback_id'=>'int',
|
|
|
|
'user1_id'=>'int',
|
|
|
|
'user2_id'=>'int',
|
2013-09-23 23:43:53 +02:00
|
|
|
'amount'=>'int'
|
2013-09-23 23:08:01 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
public function __construct() {
|
|
|
|
parent::__construct();
|
|
|
|
$users_list = array();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Getters
|
|
|
|
// =======
|
|
|
|
public function getPaybackId() {
|
|
|
|
return $this->payback_id;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function get() {
|
2013-11-04 21:12:22 +01:00
|
|
|
// Note : store amounts as int in database
|
|
|
|
$display = array();
|
|
|
|
foreach($this->users_list as $key1=>$temp) {
|
|
|
|
foreach($temp as $key2=>$amount) {
|
|
|
|
$display[$key1][$key2] = (float) ($amount / 100);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $display;
|
2013-09-23 23:08:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Setters
|
|
|
|
// =======
|
|
|
|
public function setPaybackId($id) {
|
|
|
|
$this->payback_id = (int) $id;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function set($users_in) {
|
2013-11-04 21:12:22 +01:00
|
|
|
// Note : store amounts as int in database
|
|
|
|
$store = array();
|
|
|
|
foreach($users_in as $key1=>$temp) {
|
|
|
|
foreach($temp as $key2=>$amount) {
|
|
|
|
$store[$key1][$key2] = (int) ($amount * 100);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->users_list = $store;
|
2013-09-23 23:08:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Maps htmlspecialchars on the class before display
|
|
|
|
// =================================================
|
|
|
|
public function secureDisplay() {
|
|
|
|
$this->payback_id = (int) $this->payback_id;
|
|
|
|
|
|
|
|
$temp_array = array();
|
|
|
|
foreach($this->users_list as $user1=>$temp) {
|
|
|
|
foreach($temp as $user2=>$amount) {
|
|
|
|
$temp_array[(int) $user1][(int) [$user2]] = (float) $amount;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$this->users_list = $temp_array;
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-09-25 20:28:09 +02:00
|
|
|
// Test if the payback should be closed
|
|
|
|
// ====================================
|
|
|
|
public function isEmpty() {
|
|
|
|
foreach($this->users_list as $user1=>$temp) {
|
|
|
|
foreach($temp as $user2=>$amount) {
|
|
|
|
if($amount != 0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2013-09-23 23:08:01 +02:00
|
|
|
// Override load() method
|
|
|
|
// ======================
|
|
|
|
public function load() {
|
|
|
|
$query = 'SELECT ';
|
|
|
|
|
|
|
|
$i = false;
|
|
|
|
foreach($this->fields as $field=>$type) {
|
|
|
|
if($i) { $query .= ','; } else { $i = true; }
|
|
|
|
|
|
|
|
$query .= $field;
|
|
|
|
}
|
|
|
|
|
2013-09-24 14:28:31 +02:00
|
|
|
$query .= ' FROM '.MYSQL_PREFIX.$this->TABLE_NAME.' WHERE global_payback_id=:global_payback_id';
|
2013-09-23 23:08:01 +02:00
|
|
|
|
|
|
|
$query = $this->getConnection()->prepare($query);
|
2013-09-24 14:28:31 +02:00
|
|
|
$query->bindParam(':global_payback_id', $this->payback_id);
|
2013-09-23 23:08:01 +02:00
|
|
|
$query->execute();
|
|
|
|
|
|
|
|
$results = $query->fetchAll();
|
|
|
|
$this->users_list = array();
|
|
|
|
foreach($results as $result) {
|
|
|
|
$this->users_list[(int) $result['user1_id']][(int) $result['user2_id']] = (float) $result['amount'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Override save() method
|
|
|
|
// ======================
|
|
|
|
public function save() {
|
|
|
|
// TODO : Optimize ?
|
|
|
|
|
2013-09-25 20:28:09 +02:00
|
|
|
$query = 'SELECT COUNT(global_payback_id) FROM '.MYSQL_PREFIX.$this->TABLE_NAME.' WHERE global_payback_id=:payback_id';
|
2013-09-23 23:08:01 +02:00
|
|
|
$query = $this->getConnection()->prepare($query);
|
|
|
|
$query->bindParam(':payback_id', $this->payback_id);
|
|
|
|
$query->execute();
|
|
|
|
|
|
|
|
$count = $query->fetchColumn(0);
|
|
|
|
|
|
|
|
if($count != 0) {
|
|
|
|
// If there are already some records, delete them first
|
2013-09-25 20:28:09 +02:00
|
|
|
$query = $this->getConnection()->prepare('DELETE FROM '.MYSQL_PREFIX.$this->TABLE_NAME.' WHERE global_payback_id=:payback_id');
|
2013-09-23 23:08:01 +02:00
|
|
|
$query->bindParam(':payback_id', $this->payback_id);
|
|
|
|
$query->execute();
|
|
|
|
}
|
|
|
|
|
|
|
|
$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(:payback_id, :user1_id, :user2_id, :amount)';
|
|
|
|
|
|
|
|
$query = $this->getConnection()->prepare($query);
|
|
|
|
|
|
|
|
$query->bindParam(':payback_id', $this->payback_id);
|
|
|
|
|
|
|
|
foreach($this->users_list as $user1=>$temp) {
|
|
|
|
foreach($temp as $user2=>$amount) {
|
2013-09-23 23:43:53 +02:00
|
|
|
$query->bindValue(':user1_id', intval($user1));
|
|
|
|
$query->bindValue(':user2_id', intval($user2));
|
|
|
|
$query->bindValue(':amount', floatval($amount));
|
2013-09-23 23:08:01 +02:00
|
|
|
$query->execute();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Override delete() method
|
|
|
|
// ========================
|
|
|
|
public function delete() {
|
|
|
|
$query = $this->getConnection()->prepare('DELETE FROM '.MYSQL_PREFIX.$this->TABLE_NAME.' WHERE payback_id=:payback_id');
|
|
|
|
$query->bindParam(':payback_id', $this->payback_id);
|
|
|
|
$query->execute();
|
|
|
|
}
|
|
|
|
}
|