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