KissCount/www/database.php

253 lines
6.4 KiB
PHP

<?php
/*
Copyright 2010 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, 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 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 LoadMonth($user, $month, $year)
{
global $db;
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"];
return $db->query($req);
}
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;
}
?>