added numerous database components
[gwvp.git] / gwvplib / gwvpdatabase.php
1 <?php
2
3 global $DB_CONNECTION;
4 $DB_CONNECTION = false;
5
6 // i need to figure out how i do data encapsulation here. We'll support mysql and sqlite3 off the bat if we can - sqlite3 comes first tho
7 function gwvp_dbCreateMysqlStructure()
8 {
9         
10 }
11
12 function gwvp_dbCreateSQLiteStructure($dbloc)
13 {
14         $usersql = '
15                 CREATE TABLE "users" (
16             "users_id" INTEGER PRIMARY KEY AUTOINCREMENT,
17             "user_full_name" TEXT,
18             "user_password" TEXT,
19             "user_nickname" TEXT,
20             "user_email" TEXT,
21             "user_desc" TEXT,
22             "user_status" INTEGER
23                 )';
24         
25         $groupsql = '
26                 CREATE TABLE groups (
27             "groups_id" INTEGER PRIMARY KEY AUTOINCREMENT,
28             "groups_name" TEXT,
29             "groups_is_admin" INTEGER,
30                 "groups_owner_id" INTEGER
31                 )';
32         
33         $reposql = '
34                 CREATE TABLE "repos" (
35             "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
36             "repos_name" TEXT,
37             "repos_description" TEXT,
38             "repos_owner" INTEGER
39                 )';
40         
41         $configsql = '
42                 CREATE TABLE "config" (
43             "config_name" TEXT,
44             "config_value" TEXT
45                 )';
46         
47         $groupmemsql = '
48                 CREATE TABLE "group_membership" (
49             "groupmember_id" INTEGER PRIMARY KEY AUTOINCREMENT,
50             "groupmember_groupid" INTEGER,
51             "groupmember_userid" INTEGER
52                 )';
53         
54         try {
55                 $DB_CONNECTION = new PDO("sqlite:$dbloc");
56         } catch(PDOException $exep) {
57                 error_log("execpt on db open");
58                 return false;
59         }
60         
61         
62         $DB_CONNECTION->query($usersql);
63         $DB_CONNECTION->query($groupsql);
64         $DB_CONNECTION->query($reposql);
65         $DB_CONNECTION->query($configsql);
66         $DB_CONNECTION->query($groupmemsql);
67 }
68
69 function gwvp_isDBSetup()
70 {
71         // for sqlite, we just check if the db exists, for everyone else, we check for a conneciton and go yay or nay
72         global $WEB_ROOT_FS, $BASE_URL, $repo_base, $data_directory, $db_type, $db_url;
73         
74         if($db_type == "sqlite") {
75                 if(file_exists($db_url)) return true;
76                 else return false;
77         }
78         
79         // TODO now for the connectables
80         // gwvp_ConnectDB();
81 }
82
83 function gwvp_ConnectDB()
84 {
85         global $WEB_ROOT_FS, $BASE_URL, $repo_base, $data_directory, $db_type, $db_url, $DB_CONNECTION;
86         
87         // first check if $DB_CONNECTION IS live
88         if($DB_CONNECTION != false) return $DB_CONNECTION;
89         
90         // and here we go with pdo.
91         try {
92                 $DB_CONNECTION = new PDO("$db_type:$db_url");
93         } catch(PDOException $exep) {
94                 error_log("execpt on db open");
95                 return false;
96         }
97 }
98
99 function gwvp_createUser($email, $fullname, $password, $nick, $desc, $status)
100 {
101         $conn = gwvp_ConnectDB();
102         
103         // TODO: change from sha1
104         $shapass = sha1($password);
105         $conn->query("insert into users values (null, '$fullname', '$shapass', '$nick', '$email', '$desc', '$status')");
106         /*
107          *          "users_id" INTEGER PRIMARY KEY AUTOINCREMENT,
108             "user_full_name" TEXT,
109             "user_password" TEXT,
110             "user_nickname" TEXT,
111             "user_email" TEXT,
112             "user_desc" TEXT,
113             "user_status" INTEGER
114
115          */
116 }
117
118 function gwvp_getUsers()
119 {
120         $conn = gwvp_ConnectDB();
121         
122         $res = $conn->query("select * from users");
123         
124         $returns = false;
125         $rn = 0;
126         foreach($res as $u_res) {
127                 $returns[$rn]["id"] = $u_res["users_id"];
128                 $returns[$rn]["fullname"] = $u_res["user_full_name"];
129                 $returns[$rn]["password"] = $u_res["user_password"];
130                 $returns[$rn]["nickname"] = $u_res["user_nickname"];
131                 $returns[$rn]["email"] = $u_res["user_email"];
132                 $returns[$rn]["desc"] = $u_res["user_desc"];
133                 $returns[$rn]["status"] = $u_res["user_status"];
134                 $rn++;
135         }
136         
137         return $returns;
138 }
139
140 function gwvp_deleteUser($email)
141 {
142         $conn = gwvp_ConnectDB();
143         
144         $sql = "delete from users where user_email='$email'";
145         
146         $conn->query($sql);
147 }
148
149 function gwvp_createGroup($group_name, $is_admin, $owner_id)
150 {
151         $conn = gwvp_ConnectDB();
152         
153         /*
154          *              CREATE TABLE groups (
155             "groups_id" INTEGER,
156             "groups_name" TEXT,
157             "groups_is_admin" INTEGER,
158                 "groups_owner_id" INTEGER
159                 )';
160
161          */
162         if($is_admin) {
163                 $is_admin_t = 1;
164         } else {
165                 $is_admin_t = 0;
166         }
167         $sql = "insert into groups values( null, '$group_name', '$is_admin_t', '$owner_id')";
168         
169         $conn->query($sql);
170         
171 }
172
173 function gwvp_deleteGroup($groupname)
174 {
175         $conn = gwvp_ConnectDB();
176         
177         $sql = "delete from groups where groups_name='$groupname'";
178         
179         $conn->query($sql);
180 }
181
182
183 function gwvp_getGroups()
184 {
185         $conn = gwvp_ConnectDB();
186         
187         $res = $conn->query("select * from groups");
188         
189         $returns = false;
190         $rn = 0;
191         foreach($res as $u_res) {
192                 $returns[$rn]["id"] = $u_res["groups_id"];
193                 $returns[$rn]["name"] = $u_res["groups_name"];
194                 if($u_res["groups_is_admin"]=="1") $return[$rn]["admin"] = true;
195                 else $return[$rn]["admin"] = false;
196                 $returns[$rn]["admin"] = $u_res["groups_is_admin"];
197                 $returns[$rn]["ownerid"] = $u_res["groups_owner_id"];
198                 $rn++;
199         }
200         
201         return $returns;
202 }
203
204 function gwvp_getGroupId($groupname)
205 {
206         $conn = gwvp_ConnectDB();
207         
208         $sql = "select groups_id from groups where groups_name='$groupname'";
209         
210         $res = $conn->query($sql);
211         $return = false;
212         foreach($res as $u_res) {
213                 $return = $u_res["groups_id"];
214         }
215         
216         return $return;
217 }
218
219 function gwvp_getUserId($useremail)
220 {
221         $conn = gwvp_ConnectDB();
222         
223         $sql = "select users_id from users where user_email='$useremail'";
224         
225         $res = $conn->query($sql);
226         $return = false;
227         foreach($res as $u_res) {
228                 $return = $u_res["users_id"];
229         }
230         
231         return $return;
232 }
233
234 function gwvp_addGroupMember($email, $groupname)
235 {
236         
237 }
238 /* functions we'll need to access data:
239  * 
240  * getUsers(pattern)
241  * getUserData(username)
242  * getGroups(pattern)
243  * getGroupData(groupname)
244  * modifyGroup(...)
245  * addGroupMember(...)
246  * deleteGroupMember(...)
247  * 
248  * createUser(...)
249  * deleteUser(...)
250  * modifyUser(...)
251  * createRepo(...)
252  * deleteRepo(...)
253  * getRepos()
254  */
255
256
257
258 ?>