310 lines
7.7 KiB
PHP
Executable File
310 lines
7.7 KiB
PHP
Executable File
<?php
|
|
/*
|
|
Copyright 2010-2012 Grégory Soutadé
|
|
|
|
This file is part of KissCount.
|
|
|
|
KissCount 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.
|
|
|
|
KissCount 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 KissCount. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
$BDD_FILE = '/var/nfs/kc.bdd';
|
|
|
|
try {
|
|
$db = new SQLite3($BDD_FILE, SQLITE3_OPEN_READONLY);
|
|
}
|
|
catch(Exception $e)
|
|
{
|
|
die('Unable to load BDD');
|
|
}
|
|
|
|
function GetUsers()
|
|
{
|
|
global $db;
|
|
|
|
$res = array();
|
|
|
|
$result = $db->query("SELECT name FROM user ORDER BY name");
|
|
|
|
while ($row = $result->fetchArray())
|
|
array_push($res, $row['name']);
|
|
|
|
return $res;
|
|
}
|
|
|
|
function IsUserValid($user, $password)
|
|
{
|
|
global $db;
|
|
|
|
$result = $db->query("SELECT id FROM user WHERE name='" . $db->escapeString($user) . "' AND password='" . sha1($db->escapeString($password)) . "'");
|
|
|
|
return $result->fetchArray();
|
|
}
|
|
|
|
function ExtractStyle(&$category)
|
|
{
|
|
$s = "background-color:" . $category["backcolor"] . ";";
|
|
$s .= "color:" . $category["forecolor"] . ";";
|
|
|
|
if ($category["font"] != "")
|
|
{
|
|
$params = explode(";", $category["font"]);
|
|
|
|
// size ; xx ; 93 italic ; 92 bold ; face name
|
|
|
|
$s .= "font-size:" . $params[0] . "px;";
|
|
if ($params[2] == "93")
|
|
$s .= "font-style:italic;";
|
|
if ($params[3] == "92")
|
|
$s .= "font-weight:bold;";
|
|
$s .= "font-family:" . $params[4] . ";";
|
|
}
|
|
|
|
$category["style"] = $s;
|
|
}
|
|
|
|
function LoadUser($name)
|
|
{
|
|
global $db;
|
|
|
|
$user = new User();
|
|
|
|
$name = $db->escapeString($name);
|
|
|
|
$result = $db->query("SELECT * FROM user WHERE name='$name'");
|
|
|
|
if (!($row = $result->fetchArray()))
|
|
return NULL;
|
|
|
|
$user->id = $row["id"];
|
|
|
|
$result = $db->query("SELECT * FROM account WHERE user='$user->id' ORDER BY default_account DESC, virtual, blocked, name ASC");
|
|
|
|
$user->accounts = array();
|
|
|
|
while ($row = $result->fetchArray())
|
|
array_push($user->accounts, $row);
|
|
|
|
// Shared accounts
|
|
$result = $db->query("SELECT * FROM account WHERE id IN (SELECT account FROM shared_account WHERE user='$user->id') ORDER BY name, blocked, virtual ASC");
|
|
|
|
while ($row = $result->fetchArray())
|
|
array_push($user->accounts, $row);
|
|
|
|
$result = $db->query("SELECT * FROM category WHERE user='$user->id' ORDER by name");
|
|
|
|
$user->categories = array();
|
|
|
|
while ($row = $result->fetchArray())
|
|
{
|
|
ExtractStyle($row);
|
|
array_push($user->categories, $row);
|
|
}
|
|
|
|
$result = $db->query("SELECT * FROM preference WHERE user='$user->id' ORDER by name");
|
|
|
|
$user->preferences = array();
|
|
|
|
$user->preferences["operation_order"] = "ASC";
|
|
|
|
while ($row = $result->fetchArray())
|
|
array_push($user->preferences, $row);
|
|
|
|
return $user;
|
|
}
|
|
|
|
function LoadCategory(&$user, $id)
|
|
{
|
|
$result = $db->query("SELECT * FROM category WHERE id='$id'");
|
|
|
|
if ($row = $result->fetchArray())
|
|
{
|
|
ExtractStyle($row);
|
|
array_push($user->categories, $row);
|
|
|
|
return $row;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
function GetAccountAmount($id, $month, $year)
|
|
{
|
|
global $db;
|
|
|
|
$req = "SELECT amount FROM account_amount WHERE account='$id' AND month='$month' AND year='$year'";
|
|
|
|
$result = $db->query($req);
|
|
|
|
if ($row = $result->fetchArray())
|
|
return $row["amount"];
|
|
|
|
return 0;
|
|
}
|
|
|
|
function array_insert($array,$pos,$val)
|
|
{
|
|
$array2 = array_splice($array,$pos);
|
|
$array[] = $val;
|
|
$array = array_merge($array,$array2);
|
|
|
|
return $array;
|
|
}
|
|
|
|
function LoadMonth($user, $month, $year)
|
|
{
|
|
global $db;
|
|
$res = array();
|
|
|
|
if (!isset($user->accounts[0])) return;
|
|
|
|
$req = "SELECT * FROM operation WHERE (account IN('" . $user->accounts[0]["id"] ;
|
|
foreach($user->accounts as $i => $account)
|
|
{
|
|
$req .= "', '" . $account["id"];
|
|
}
|
|
|
|
$req .= "')";
|
|
$req .= " OR user='$user->id')";
|
|
$req .= " AND year='$year' AND month='$month'";
|
|
$req .= " ORDER BY fix_cost DESC, year, month ASC, day ";
|
|
$req .= $user->preferences["operation_order"];
|
|
|
|
$result = $db->query($req);
|
|
|
|
// Pack operations and their sub operations
|
|
while ($row = $result->fetchArray())
|
|
{
|
|
$inserted = 0;
|
|
foreach($res as $i => $value)
|
|
{
|
|
if ($value["parent"] == $row["id"])
|
|
{
|
|
$res = array_insert($res, $i, $row);
|
|
$inserted = 1;
|
|
break;
|
|
}
|
|
|
|
if ($row["parent"] == $value["id"])
|
|
{
|
|
$res = array_insert($res, $i+1, $row);
|
|
$inserted = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Append
|
|
if ($inserted == 0)
|
|
{
|
|
$res = array_insert($res, $i+1, $row);
|
|
}
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
|
|
function MetaPositiveAmount($id)
|
|
{
|
|
global $db;
|
|
|
|
$req = "SELECT SUM(amount) as amount FROM operation WHERE amount > 0 AND parent='$id'";
|
|
|
|
$result = $db->query($req);
|
|
|
|
if ($row = $result->fetchArray())
|
|
return $row["amount"];
|
|
else
|
|
return 0.0;
|
|
}
|
|
|
|
function GetAllOperations($user, &$last_year, &$last_month)
|
|
{
|
|
$res;
|
|
global $db;
|
|
|
|
if (!isset($user->accounts[0])) return $res;
|
|
|
|
$req = "SELECT DISTINCT year FROM account_amount WHERE account IN('" . $user->accounts[0]["id"] ;
|
|
foreach($user->accounts as $i => $account)
|
|
{
|
|
$req .= "', '" . $account["id"];
|
|
}
|
|
$req .= "')";
|
|
|
|
$req2 = "SELECT DISTINCT year FROM operation WHERE account IN('" .$user->accounts[0]["id"] ;
|
|
foreach($user->accounts as $i => $account)
|
|
{
|
|
$req2 .= "', '" . $account["id"];
|
|
}
|
|
$req2 .= "')";
|
|
$req2 .= " OR user='" . $user->id . "'";
|
|
$req2 .= " ORDER BY year ASC";
|
|
|
|
$reqUnion = $req . " UNION " . $req2;
|
|
|
|
$result = $db->query($reqUnion);
|
|
|
|
while ($row = $result->fetchArray())
|
|
{
|
|
$last_year = $year = $row["year"];
|
|
|
|
$req = "SELECT DISTINCT month FROM account_amount WHERE account IN('" . $user->accounts[0]["id"] ;
|
|
foreach($user->accounts as $i => $account)
|
|
{
|
|
$req .= "', '" . $account["id"];
|
|
}
|
|
$req .= "')";
|
|
$req .= " AND year='" . $year . "'";
|
|
|
|
$req2 = "SELECT DISTINCT month FROM operation WHERE (account IN('" . $user->accounts[0]["id"] ;
|
|
foreach($user->accounts as $i => $account)
|
|
{
|
|
$req2 .= "', '" . $account["id"];
|
|
}
|
|
$req2 .= "')";
|
|
$req2 .= " OR user='" . $user->id . "')";
|
|
$req2 .= " AND year='" . $year . "'";
|
|
$req2 .= " ORDER BY month ASC";
|
|
|
|
$reqUnion = $req . " UNION " . $req2;
|
|
|
|
$result2 = $db->query($reqUnion);
|
|
|
|
while ($row = $result2->fetchArray())
|
|
{
|
|
if (!isset($res[$year])) $res[$year] = array();
|
|
array_push($res[$year], $row["month"]);
|
|
$last_month = $row["month"];
|
|
}
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
function GetSubOperations($parent)
|
|
{
|
|
$res = "[";
|
|
global $db;
|
|
|
|
$req = "SELECT id FROM operation WHERE parent=\"" . $parent . "\"";
|
|
|
|
$result = $db->query($req);
|
|
|
|
while ($row = $result->fetchArray())
|
|
$res .= $row["id"] . ", ";
|
|
|
|
if (strlen($res) > 1)
|
|
$res = substr($res, 0, strlen($res)-2);
|
|
|
|
return $res . "]";
|
|
}
|
|
?>
|