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