| 
									
										
										
										
											2010-09-10 21:58:34 +02:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2010-08-31 21:36:07 +02:00
										 |  |  | /* | 
					
						
							|  |  |  |   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(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-10 21:58:34 +02:00
										 |  |  | 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; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-31 21:36:07 +02:00
										 |  |  | 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); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $result = $db->query("SELECT * FROM category WHERE user='$user->id' ORDER by name"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $user->categories = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     while ($row = $result->fetchArray()) | 
					
						
							| 
									
										
										
										
											2010-09-10 21:58:34 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |         ExtractStyle($row); | 
					
						
							| 
									
										
										
										
											2010-08-31 21:36:07 +02:00
										 |  |  |         array_push($user->categories, $row); | 
					
						
							| 
									
										
										
										
											2010-09-10 21:58:34 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-08-31 21:36:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $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 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 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; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ?>
 |