added user registration confirmation, email "from" setting, lots of
[gwvp-mini.git] / gwvpmini / gwvpmini_db.php
1 <?php
2
3
4 global $DB_CONNECTION;\r
5 $DB_CONNECTION = false;\r
6 \r
7 \r
8 global $db_url, $db_type;\r
9 error_log("in include for database, $db_type, $db_name");
10
11
12 function gwvpmini_DBExists()
13 {
14         global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name;
15         
16         // oh this isnt working. poo.
17         error_log("checking for $db_name, $db_type");
18         
19         if($db_type == "sqlite") {
20                 if(file_exists($db_name)) {
21                         error_log("Exists");
22                         return true;
23                 }
24                 else {
25                         error_log("no exists");
26                         return false;
27                 }
28         }
29 }\r
30
31 function gwvpmini_getUser($username=null, $email=null, $id=null)\r
32 {\r
33         $conn = gwvpmini_ConnectDB();\r
34 \r
35         if($username != null) {\r
36                 $res = $conn->query("select * from users where user_username='$username'");\r
37         } else if($email != null) {\r
38                 $res = $conn->query("select * from users where user_email='$email'");\r
39         } else if($id != null) {\r
40                 $res = $conn->query("select * from users where users_id='$id'");\r
41         } else return false;\r
42 \r
43         $returns = false;\r
44         foreach($res as $u_res) {\r
45                 $returns["id"] = $u_res["user_id"];\r
46                 $returns["fullname"] = $u_res["user_full_name"];\r
47                 $returns["password"] = $u_res["user_password"];\r
48                 $returns["username"] = $u_res["user_username"];\r
49                 $returns["email"] = $u_res["user_email"];\r
50                 $returns["desc"] = $u_res["user_desc"];\r
51                 $returns["status"] = $u_res["user_status"];\r
52         }\r
53 \r
54         return $returns;\r
55 \r
56 }
57
58 function gwvpmini_RemoveUser($uid)
59 {
60         $conn = gwvpmini_ConnectDB();\r
61         
62         if($uid < 0) return;
63         
64         $sql = "delete from users where user_id='$uid'";
65         
66         return $conn->query($sql);
67 }\r
68
69 function gwvpmini_ConnectDB()\r
70 {\r
71         global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $DB_CONNECTION;\r
72 \r
73         // first check if $DB_CONNECTION IS live\r
74         error_log("in connection $db_type, $db_name");\r
75 \r
76         if($DB_CONNECTION != false) return $DB_CONNECTION;\r
77 \r
78         if($db_type == "sqlite") {\r
79                 $db_url = $db_name;\r
80                 if(!file_exists($db_name)) {\r
81                         error_log("$db_name does not exist - problem");
82                         // TODO: NEED A SETUP AGENT!
83                         gwvpmini_dbCreateSQLiteStructure($db_name);
84                         gwvpmini_setConfigVal("repodir", "$data_directory/repos");\r
85                 }\r
86         }\r
87 \r
88         // and here we go with pdo.\r
89         error_log("attmpting to open db, $db_type:$db_url");\r
90         try {\r
91                 $DB_CONNECTION = new PDO("$db_type:$db_url");\r
92         } catch(PDOException $exep) {\r
93                 error_log("execpt on db open");\r
94                 return false;\r
95         }\r
96 \r
97         return $DB_CONNECTION;\r
98 }
99
100 function gwvpmini_UpdateStatusFromConfirm($confirmhash)
101 {
102         $conn = gwvpmini_ConnectDB();\r
103         \r
104         $sql = "select count(*) from users where user_status='2:$confirmhash'";
105         
106         $res = $conn->query($sql);
107         
108         if(!$res) return false;
109         
110         foreach($res as $row) {
111                 $retval = $row[0];
112         }
113         
114         if($retval > 0) {
115                 $sql = "update users set user_status='0' where user_status='2:$confirmhash'";
116                 return $conn->query($sql);
117         } else return false;
118 }
119
120
121 function gwvpmini_AddUser($username, $password, $fullname, $email, $desc, $level, $status)
122 {
123         \r
124         
125         \r
126         $conn = gwvpmini_ConnectDB();\r
127         \r
128         $sql = "insert into 'users' values ( null, '$fullname', '".sha1($password)."', '$username', '$email', '$desc', '$level', '$status')";\r
129         \r
130         $res = $conn->query($sql);
131         if(!$res) return -1;
132         
133         $sql = "select user_id from users where user_username='$username'";\r
134         $res = $conn->query($sql);\r
135         if(!$res) return -1;\r
136         
137         $retval = -1;
138         foreach($res as $row) {
139                 $retval = $row[0];
140         }
141         
142         return $retval;
143 }\r
144
145
146 function gwvpmini_dbCreateSQLiteStructure($dbloc)\r
147 {\r
148         $usersql = '\r
149         CREATE TABLE "users" (\r
150         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
151         "user_full_name" TEXT,\r
152         "user_password" TEXT,\r
153         "user_username" TEXT,\r
154         "user_email" TEXT,\r
155         "user_desc" TEXT,
156         "user_level" TEXT,\r
157         "user_status" TEXT,
158         UNIQUE(user_username)\r
159         )';\r
160 \r
161         $initialuser_admin = '
162         insert into "users" values ( null, "Administrator", "'.sha1("password").'", "admin", "admin@localhost", "the admin", "1", "0");\r
163         ';\r
164
165         $initialuser_user = '\r
166         insert into "users" values ( null, "User", "'.sha1("password").'", "user", "user@localhost", "the user", "0", "0");\r
167         ';\r
168         \r
169         $reposql = '\r
170         CREATE TABLE "repos" (\r
171         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
172         "repos_name" TEXT,\r
173         "repos_description" TEXT,\r
174         "repos_owner" INTEGER,
175         "repos_readperms" TEXT,
176         UNIQUE(repos_name)\r
177         )';\r
178 \r
179         // this looks like null, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|authed|anon\r
180         // where authed = any authenticated user, anon = everyone (logged in, not logged in, etc)\r
181         // read|visible|write = can clone from repo|can see repo exists and see description but not clone from it|can push to repo\r
182         // TODO: is this sufficient? i have to think about it\r
183 \r
184         $configsql = '\r
185         CREATE TABLE "config" (\r
186         "config_name" TEXT,\r
187         "config_value" TEXT\r
188         )';\r
189 \r
190         try {\r
191                 $DB_CONNECTION = new PDO("sqlite:$dbloc");\r
192         } catch(PDOException $exep) {\r
193                 error_log("execpt on db open");\r
194                 return false;\r
195         }\r
196
197         $DB_CONNECTION->query($usersql);\r
198         $DB_CONNECTION->query($initialuser_admin);
199         $DB_CONNECTION->query($initialuser_user);
200         $DB_CONNECTION->query($reposql);\r
201         $DB_CONNECTION->query($configsql);\r
202 }
203
204 function gwvpmini_getConfigVal($confname)\r
205 {\r
206         /*\r
207          *      $configsql = '\r
208         CREATE TABLE "config" (\r
209                         "config_name" TEXT,\r
210                         "config_value" TEXT\r
211         )';\r
212 \r
213         */\r
214 \r
215         $conn = gwvpmini_ConnectDB();\r
216 \r
217         $sql = "select config_value from config where config_name='$confname'";\r
218 \r
219         $res = $conn->query($sql);\r
220 \r
221         $return = null;\r
222         foreach($res as $val) {\r
223                 $return = $val["config_value"];\r
224         }\r
225 \r
226         return $return;\r
227 }\r
228 \r
229 function gwvpmini_eraseConfigVal($confname)\r
230 {\r
231         /*\r
232          *      $configsql = '\r
233         CREATE TABLE "config" (\r
234                         "config_name" TEXT,\r
235                         "config_value" TEXT\r
236         )';\r
237 \r
238         */\r
239 \r
240         $conn = gwvpmini_ConnectDB();\r
241 \r
242         $sql = "delete from config where config_name='$confname'";\r
243 \r
244         return $conn->query($sql);\r
245 }
246
247 function gwvpmini_GetRepoId($reponame)
248 {
249
250         /*
251          *      $reposql = '
252         CREATE TABLE "repos" (
253         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
254         "repos_name" TEXT,
255         "repos_description" TEXT,
256         "repos_owner" INTEGER
257         )';
258
259          */
260         
261         $conn = gwvpmini_ConnectDB();
262         
263         $sql = "select repos_id from repos where repos_name='$reponame'";
264         
265         $res = $conn->query($sql);
266         
267         $retval = -1;
268         if(!$res) return -1;
269         foreach($res as $row) {
270                 $reval = (int)$row[0];
271         }
272         
273         return $retval;
274 }
275
276 function gwvpmini_GetRepoDescFromName($reponame)\r
277 {\r
278 \r
279         /*\r
280          *      $reposql = '\r
281         CREATE TABLE "repos" (\r
282                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
283                         "repos_name" TEXT,\r
284                         "repos_description" TEXT,\r
285                         "repos_owner" INTEGER\r
286         )';\r
287 \r
288         */\r
289 \r
290         $conn = gwvpmini_ConnectDB();\r
291 \r
292         $sql = "select repos_description from repos where repos_name='$reponame'";
293         error_log("desc for name sql: $sql");\r
294 \r
295         $res = $conn->query($sql);\r
296 \r
297         $retval = -1;\r
298         if(!$res) return -1;\r
299         foreach($res as $row) {\r
300                 $retval = $row[0];\r
301         }\r
302 \r
303         return $retval;\r
304 }
305 \r
306 function gwvpmini_GetRepoOwnerDetailsFromName($reponame)\r
307 {\r
308 \r
309         /*\r
310          *      $reposql = '\r
311         CREATE TABLE "repos" (\r
312                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
313                         "repos_name" TEXT,\r
314                         "repos_description" TEXT,\r
315                         "repos_owner" INTEGER\r
316         )';
317         
318                 "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
319         "user_full_name" TEXT,
320         "user_password" TEXT,
321         "user_username" TEXT,
322         "user_email" TEXT,
323         "user_desc" TEXT,
324         "user_level" TEXT,
325         "user_status" TEXT,
326         UNIQUE(user_username)\r
327 \r
328         */\r
329 \r
330         $conn = gwvpmini_ConnectDB();\r
331 \r
332         $sql = "select users.* from repos,users where repos_name='$reponame' and repos_owner=user_id";\r
333 \r
334         $res = $conn->query($sql);\r
335 \r
336         $retval = -1;\r
337         if(!$res) return -1;\r
338         foreach($res as $row) {
339                 $retval = array();
340                 error_log("STUFF2: ".print_r($row,true));\r
341                 $retval["id"] = $row["user_id"];
342                 $retval["fullname"] = $row["user_full_name"];
343                 $retval["username"] = $row["user_username"];
344                 $retval["email"] = $row["user_email"];
345                 $retval["desc"] = $row["user_desc"];
346                 $retval["level"] = $row["user_level"];
347                 $retval["status"] = $row["user_status"];\r
348         }\r
349 \r
350         return $retval;\r
351 }\r
352 \r
353 function gwvpmini_setConfigVal($confname, $confval)\r
354 {\r
355         /*\r
356          *      $configsql = '\r
357         CREATE TABLE "config" (\r
358                         "config_name" TEXT,\r
359                         "config_value" TEXT\r
360         )';\r
361 \r
362         */\r
363         gwvpmini_eraseConfigVal($confname);\r
364 \r
365         $conn = gwvpmini_ConnectDB();
366         
367         $sql = "delete from config where config_name='$confname'";
368         $conn->query($sql);\r
369 \r
370         $sql = "insert into config values('$confname', '$confval')";\r
371 \r
372         return $conn->query($sql);\r
373 }
374
375 function gwvpmini_AddRepo($name, $desc, $ownerid, $perms = "perms-public")
376 {
377         
378         error_log("addrepo in db for $name, $desc, $ownerid");
379         $conn = gwvpmini_ConnectDB();\r
380         \r
381         $sql = "insert into repos values (null, '$name', '$desc', '$ownerid', '$perms')";\r
382         \r
383         $conn->query($sql);\r
384 }
385
386 function gwvpmini_GetUserId($username)
387 {
388         $conn = gwvpmini_ConnectDB();\r
389         
390         $sql = "select user_id from users where user_username='$username'";
391
392         error_log("userid sql $sql");\r
393         
394         $res = $conn->query($sql);
395         
396         $retval = false;
397         foreach($res as $row) {
398                 $retval = $row[0];
399         }
400         
401         return $retval;
402 }
403
404 function gwvpmini_GetUserNameFromEmail($email)\r
405 {\r
406         $conn = gwvpmini_ConnectDB();\r
407 \r
408         $sql = "select user_username from users where user_email='$email'";\r
409 \r
410         error_log("username sql $sql");\r
411 \r
412         $res = $conn->query($sql);\r
413 \r
414         $retval = false;\r
415         foreach($res as $row) {\r
416                 $retval = $row[0];\r
417         }\r
418 \r
419         return $retval;\r
420 }
421 function gwvpmini_GetOwnedRepos($username)\r
422 {
423         /*
424          *      CREATE TABLE "repos" (
425         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
426         "repos_name" TEXT,
427         "repos_description" TEXT,
428         "repos_owner" INTEGER
429         )';
430
431          */
432         $conn = gwvpmini_ConnectDB();
433         
434         $uid = gwvpmini_GetUserId($username);
435         $sql = "select * from repos where repos_owner='$uid'";
436         error_log("owned repos sql $sql");
437         $res = $conn->query($sql);
438         
439         $retval = false;
440         foreach($res as $row) {
441                 $id = $row["repos_id"];
442                 $retval[$id]["name"] = $row["repos_name"];
443                 $retval[$id]["desc"] = $row["repos_description"];
444                 error_log(print_r($row, true));
445         }
446         
447         error_log(print_r($retval, true));\r
448         return $retval;\r
449 }
450
451 function gwvpmini_userLevel($id)
452 {
453         $conn = gwvpmini_ConnectDB();
454         
455         $sql = "select user_level from users where user_id='$id'";
456         
457         $res = $conn->query($sql);
458         
459         $lev = -1;
460         if(!$res) return -1;
461         foreach($res as $row) {
462                 $lev = (int)$row[0];
463         }
464         
465         return $lev;
466 }
467
468 function gwvpmini_GetUsers($startat = 0, $num = 10)
469 {
470         $conn = gwvpmini_ConnectDB();
471         
472         /*
473          *      CREATE TABLE "users" (
474         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
475         "user_full_name" TEXT,
476         "user_password" TEXT,
477         "user_username" TEXT,
478         "user_email" TEXT,
479         "user_desc" TEXT,
480         "user_level" TEXT,
481         "user_status" TEXT
482
483          */\r
484         \r
485         $sql = "select * from users where user_id>='$startat' order by user_id asc limit $num";
486         
487         $res = $conn->query($sql);
488         
489         $retval = false;
490         foreach($res as $row) {
491                 $id = $row["user_id"];
492                 $retval[$id]["fullname"] = $row["user_full_name"];
493                 $retval[$id]["username"] = $row["user_username"];
494                 $retval[$id]["email"] = $row["user_email"];
495                 $retval[$id]["desc"] = $row["user_desc"];
496                 $retval[$id]["level"] = $row["user_level"];
497                 $retval[$id]["status"] = $row["user_status"];
498         }
499         
500         return $retval;
501 }\r
502
503 function gwvpmini_GetRepos($startat=0, $num=200)\r
504 {\r
505         $conn = gwvpmini_ConnectDB();\r
506         \r
507         /*\r
508          *      CREATE TABLE "repos" (
509         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
510         "repos_name" TEXT,
511         "repos_description" TEXT,
512         "repos_owner" INTEGER
513         )';
514         \r
515                         */\r
516         \r
517         $sql = "select * from repos where repos_id > '$startat' order by repos_id asc limit $num";\r
518         \r
519         $res = $conn->query($sql);\r
520         \r
521         $retval = false;\r
522         foreach($res as $row) {\r
523                 $id = $row["repos_id"];\r
524                 $retval[$id]["name"] = $row["repos_name"];\r
525                 $retval[$id]["desc"] = $row["repos_description"];\r
526                 $retval[$id]["owner"] = $row["repos_owner"];\r
527         }\r
528         \r
529         return $retval;\r
530         \r
531         \r
532 }\r
533
534 function gwvpmini_GetNRepos()
535 {
536         $conn = gwvpmini_ConnectDB();
537
538         $sql = "select count(*) from repos";
539         
540         $res = $conn->query($sql);
541         
542         $retval = -1;
543         foreach($res as $row) {
544                 $retval = $row[0];
545         }
546         
547         return $retval;
548 }
549
550 \r
551 function gwvpmini_GetNUsers()\r
552 {\r
553         $conn = gwvpmini_ConnectDB();\r
554 \r
555         $sql = "select count(*) from users";\r
556 \r
557         $res = $conn->query($sql);\r
558 \r
559         $retval = -1;\r
560         foreach($res as $row) {\r
561                 $retval = $row[0];\r
562         }\r
563 \r
564         return $retval;\r
565 }\r
566
567
568 ?>