Enrique Cruzado 4 年之前
父節點
當前提交
d2b4b7e432
共有 15 個文件被更改,包括 440 次插入293 次删除
  1. 0
    61
      Admin backend/editMembers.php
  2. 0
    45
      Admin backend/login.php
  3. 0
    2
      Admin backend/php.ini
  4. 0
    22
      Admin backend/tables.sql
  5. 0
    0
      admin/logo.png
  6. 53
    135
      admin/members.php
  7. 88
    0
      admin/style.css
  8. 0
    0
      api/db.php
  9. 90
    0
      api/editMembers.php
  10. 76
    0
      api/login.php
  11. 68
    0
      api/member.php
  12. 34
    28
      api/signup.php
  13. 0
    0
      favicon.ico
  14. 3
    0
      php.ini
  15. 28
    0
      tables.sql

+ 0
- 61
Admin backend/editMembers.php 查看文件

@@ -1,61 +0,0 @@
1
-<?php
2
-if ($_SERVER["REQUEST_METHOD"] == "POST") {
3
-    include 'db.php';
4
-    
5
-    $userid = $_POST["userid"];
6
-    $username = $_POST["username"];
7
-    $nombre = $_POST["nombre"];
8
-    $organizacion = $_POST["organizacion"];
9
-    $puesto = $_POST["puesto"];
10
-    $urbanizacion = $_POST["urbanizacion"];
11
-    $calle = $_POST["calle"];
12
-    $pueblo = $_POST["pueblo"];
13
-    $cpostal = $_POST["cpostal"];
14
-    $telefono = $_POST["telefono"];
15
-    $correo = $_POST["correo"];
16
-
17
-    # Checks if necessary data is empty
18
-    if(strlen($username) == 0 or strlen($nombre) == 0 or strlen($urbanizacion) == 0 or strlen($calle) == 0 or  strlen($pueblo) == 0 or strlen($cpostal) == 0 or strlen($telefono) == 0 or strlen($correo) == 0){
19
-        $conn->close();
20
-        header("400 Bad Request", true, 400);
21
-        exit();
22
-    }
23
-
24
-    # Starts a transaction
25
-    $conn->autocommit(FALSE);
26
-    $conn->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
27
-
28
-    $sql = "UPDATE login SET username = \"%s\" WHERE userid = %d;";
29
-    $sql = sprintf($sql, $username, $userid);
30
-
31
-    if($conn->query($sql) === FALSE){
32
-        $conn->rollback();
33
-        $conn->close();
34
-        header("500 Internal Server Error", true, 500);
35
-        exit();
36
-    }
37
-
38
-    # miembros (userid, nombre, organizacion, puesto, urbanizacion, calle, pueblo, cpostal, telefono, correo) 
39
-    $sql = "UPDATE miembros SET nombre = \"%s\", organizacion = \"%s\", puesto = \"%s\", urbanizacion = \"%s\", 
40
-            calle = \"%s\", pueblo = \"%s\", cpostal = \"%s\", telefono = \"%s\", correo = \"%s\" WHERE userid = %d;";
41
-    $sql = sprintf($sql, $nombre, $organizacion, $puesto, $urbanizacion, $calle, $pueblo, $cpostal, $telefono, $correo, $userid);
42
-    # Commits changes
43
-
44
-    if($conn->query($sql) === FALSE){
45
-        $conn->rollback();
46
-        $conn->close();
47
-        header("500 Internal Server Error", true, 500);
48
-        exit();
49
-    }
50
-
51
-    $conn->commit();
52
-    $conn->close();
53
-
54
-    header("200 OK", true, 200);
55
-    exit(); 
56
-
57
-} else {
58
-    header($_SERVER["SERVER_PROTOCOL"]." 405 Method Not Allowed", true, 405);
59
-    exit();
60
-}
61
-?>

+ 0
- 45
Admin backend/login.php 查看文件

@@ -1,45 +0,0 @@
1
-<?php
2
-header('Content-type: application/json');
3
-if ($_SERVER["REQUEST_METHOD"] == "POST") {
4
-    # Gets json from POST
5
-    $json = json_decode(file_get_contents('php://input'), true);
6
-
7
-    # Input validation for username y password
8
-    $username = $json["username"];
9
-    $password = $json["password"];
10
-    if(strlen($username) == 0 or strlen($password) == 0){
11
-        header("400 Bad Request", true, 400);
12
-        exit();
13
-    }
14
-
15
-    include 'db.php';
16
-
17
-    # Select username row
18
-    $sql = "SELECT hash FROM login WHERE username = '".$username."'";
19
-    $result = $conn->query($sql);
20
-    if($result->num_rows){
21
-        $result = $result->fetch_assoc();
22
-        $hash = $result["hash"];
23
-    } else {
24
-        $conn->close();
25
-        header("400 Bad Request", true, 400);
26
-        exit();
27
-    }
28
-
29
-    # Verifies password
30
-    if(!password_verify($password, $hash)){
31
-        $conn->close();
32
-        header("400 Bad Request", true, 400);
33
-        exit();
34
-    }
35
-
36
-    # Returns 200
37
-    $conn->close();
38
-    header("200 OK", true, 200);
39
-    exit();
40
-    
41
-} else {
42
-    header($_SERVER["SERVER_PROTOCOL"]." 405 Method Not Allowed", true, 405);
43
-    exit();
44
-}
45
-?>

+ 0
- 2
Admin backend/php.ini 查看文件

@@ -1,2 +0,0 @@
1
-extension=php_mysqli.dll
2
-extension=php_pdo_mysql.dll

+ 0
- 22
Admin backend/tables.sql 查看文件

@@ -1,22 +0,0 @@
1
-CREATE TABLE login (
2
-    userid INTEGER PRIMARY KEY AUTO_INCREMENT,
3
-    username VARCHAR(16),
4
-    hash VARBINARY(255),
5
-    UNIQUE(username)
6
-);
7
-
8
-CREATE TABLE miembros (
9
-  userid INTEGER,
10
-  nombre VARCHAR(64),
11
-  organizacion TINYTEXT,
12
-  puesto VARCHAR(64),
13
-  urbanizacion TINYTEXT,
14
-  calle TINYTEXT,
15
-  pueblo VARCHAR(32),
16
-  cpostal CHAR(5),
17
-  telefono CHAR(10),
18
-  correo VARCHAR(64),
19
-  membresia VARCHAR(16),
20
-  vigencia DATE,
21
-  FOREIGN KEY (userid) REFERENCES login(userid) ON DELETE CASCADE
22
-);

Admin backend/logo.png → admin/logo.png 查看文件


Admin backend/members.php → admin/members.php 查看文件

@@ -2,127 +2,33 @@
2 2
 <html>
3 3
     <head>
4 4
         <title>Miembros</title>
5
-        <style>
6
-        body { 
7
-            margin:0px;
8
-        }
9
-
10
-        .container {
11
-            height:100%;
12
-            width:100%;
13
-            position: fixed;
14
-            z-index: -1
15
-        }
16
-
17
-        .members {
18
-            margin-top: 8px;
19
-            margin-left: 1em;
20
-            margin-right: 1em;
21
-        }
22
-
23
-        /* Add a black background color to the top navigation */
24
-        .topnav {
25
-            background-color: #ED7D31;
26
-            overflow: hidden;
27
-            box-shadow: 0 4px 2px 0px gray;
28
-        }
29
-
30
-        /* Style the links inside the navigation bar */
31
-        .topnav a {
32
-            float: left;
33
-            color: black;
34
-            text-align: center;
35
-            padding: 14px 16px;
36
-            text-decoration: none;
37
-            font-size: 23px;
38
-        }
39
-
40
-        .topnav a:hover {
41
-            background-color: #BA6127;
42
-        }
43
-
44
-        .logo {
45
-            padding: 0px 0px ! important;
46
-        }
47
-        
48
-        .logo img {
49
-            float: left;
50
-            height: 54px;
51
-        }
52
-
53
-        /* The Modal (background) */
54
-            .modal {
55
-            display: none; /* Hidden by default */
56
-            position: fixed; /* Stay in place */
57
-            z-index: 1; /* Sit on top */
58
-            padding-top: 100px; /* Location of the box */
59
-            left: 0;
60
-            top: 0;
61
-            width: 100%; /* Full width */
62
-            height: 100%; /* Full height */
63
-            overflow: auto; /* Enable scroll if needed */
64
-            background-color: rgb(0,0,0); /* Fallback color */
65
-            background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
66
-        }
67
-
68
-        /* Modal Content */
69
-        .modal-content {
70
-            background-color: #fefefe;
71
-            margin: auto;
72
-            padding: 20px;
73
-            border: 1px solid #888;
74
-            max-width: 10%;
75
-        }
76
-
77
-        /* The Close Button */
78
-        .close {
79
-            color: #aaaaaa;
80
-            float: right;
81
-            font-size: 28px;
82
-            font-weight: bold;
83
-        }
84
-
85
-        .close:hover, .close:focus {
86
-            color: #000;
87
-            text-decoration: none;
88
-            cursor: pointer;
89
-        }
90
-
91
-        table.dataTable tbody th, table.dataTable tbody td {
92
-            text-align: center;
93
-        }
94
-}
95
-
96
-        </style>
5
+        <link rel="stylesheet" type="text/css" href="style.css" />
97 6
         <link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css"/>
98 7
         <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
99
-        <script type="text/javascript" src="//cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js">
100
-        </script>
8
+        <script type="text/javascript" src="//cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
9
+
101 10
         <script>
102 11
             $(document).ready(function() {
103 12
                 $('#membersTable').DataTable({
104 13
                     "columnDefs": [ {
105 14
                         "targets": 0,
106 15
                         "orderable": false
107
-                    }, {
108
-                        "targets": 11,
109
-                        "orderable": false
110
-                    }, {
111
-                        "targets": 12,
112
-                        "orderable": false
113
-                    } ],
114
-                    "order": [[ 1, "asc" ]]
16
+                    }],
17
+                    "order": [[ 1, "asc" ]],
18
+                    language: {
19
+                        url: '//cdn.datatables.net/plug-ins/1.10.22/i18n/Spanish.json'
20
+                    }
115 21
                 });
116 22
 
117 23
                 $('.editor').click(function(e) {
118 24
                     e.preventDefault();
119 25
 
120 26
                     $.ajax({
121
-                        url: '/editMembers.php',
27
+                        url: '/api/editMembers.php',
122 28
                         type: 'POST',
123 29
                         data: {
124 30
                             userid: $('#rowID').val(),
125
-                            username: $('#username').val(),
31
+                            correo: $('#correo').val(),
126 32
                             nombre: $('#nombre').val(),
127 33
                             organizacion: $('#organizacion').val(),
128 34
                             puesto: $('#puesto').val(),
@@ -131,17 +37,19 @@
131 37
                             pueblo: $('#pueblo').val(),
132 38
                             cpostal: $('#cpostal').val(),
133 39
                             telefono: $('#telefono').val(),
134
-                            correo: $('#correo').val()
40
+                            membresia: $('#membresia').val(),
41
+                            vigencia: $('#vigencia').val(),
42
+                            horasTrabajadas: $('#horasTrabajadas').val()
135 43
                         },
136 44
 
137 45
                         success: function(msg) {
138 46
                             alert("Usuario editado");
139 47
 
140
-                            document.getElementById("myModal").style.display = "none";
48
+                            document.getElementById("editModal").style.display = "none";
141 49
 
142 50
                             var id = $('#rowID').val();
143 51
                             
144
-                            document.getElementById(id).childNodes[1].innerText = $('#username').val();
52
+                            document.getElementById(id).childNodes[1].innerText = $('#correo').val();
145 53
                             document.getElementById(id).childNodes[2].innerText = $('#nombre').val();
146 54
                             document.getElementById(id).childNodes[3].innerText = $('#organizacion').val();
147 55
                             document.getElementById(id).childNodes[4].innerText = $('#puesto').val();
@@ -150,11 +58,13 @@
150 58
                             document.getElementById(id).childNodes[7].innerText = $('#pueblo').val();
151 59
                             document.getElementById(id).childNodes[8].innerText = $('#cpostal').val();
152 60
                             document.getElementById(id).childNodes[9].innerText = $('#telefono').val();
153
-                            document.getElementById(id).childNodes[10].innerText = $('#correo').val();
61
+                            document.getElementById(id).childNodes[10].innerText = $('#membresia').val();
62
+                            document.getElementById(id).childNodes[11].innerText = $('#vigencia').val();
63
+                            document.getElementById(id).childNodes[12].innerText = $('#horasTrabajadas').val();
154 64
                         },
155 65
 
156 66
                         error: function(request, status, error) {
157
-                            alert(status + ": " + error);
67
+                            alert(JSON.parse(request.responseText)["error"]);
158 68
                         }
159 69
                     });
160 70
                 });
@@ -162,20 +72,20 @@
162 72
             });
163 73
 
164 74
             function openModal(id){ 
165
-                document.getElementById("myModal").style.display = "block";
75
+                document.getElementById("editModal").style.display = "block";
166 76
 
167 77
                 document.getElementsByClassName("close")[0].onclick = function() {
168
-                    document.getElementById("myModal").style.display = "none";
78
+                    document.getElementById("editModal").style.display = "none";
169 79
                 }
170 80
 
171 81
                 window.onclick = function(event) {
172
-                    if (event.target == document.getElementById("myModal")) {
173
-                        document.getElementById("myModal").style.display = "none";
82
+                    if (event.target == document.getElementById("editModal")) {
83
+                        document.getElementById("editModal").style.display = "none";
174 84
                      }
175 85
                 } 
176 86
                 
177 87
                 document.getElementById("rowID").value = id;
178
-                document.getElementById("username").value = document.getElementById(id).childNodes[1].innerText;
88
+                document.getElementById("correo").value = document.getElementById(id).childNodes[1].innerText;
179 89
                 document.getElementById("nombre").value = document.getElementById(id).childNodes[2].innerText;
180 90
                 document.getElementById("organizacion").value = document.getElementById(id).childNodes[3].innerText;
181 91
                 document.getElementById("puesto").value = document.getElementById(id).childNodes[4].innerText;
@@ -184,7 +94,11 @@
184 94
                 document.getElementById("pueblo").value = document.getElementById(id).childNodes[7].innerText;
185 95
                 document.getElementById("cpostal").value = document.getElementById(id).childNodes[8].innerText;
186 96
                 document.getElementById("telefono").value = document.getElementById(id).childNodes[9].innerText;
187
-                document.getElementById("correo").value = document.getElementById(id).childNodes[10].innerText;
97
+
98
+                document.getElementById("membresia").value = document.getElementById(id).childNodes[10].innerText;
99
+                document.getElementById("vigencia").value = document.getElementById(id).childNodes[11].innerText;
100
+
101
+                document.getElementById("horasTrabajadas").value = document.getElementById(id).childNodes[12].innerText;        
188 102
             }
189 103
         </script>
190 104
     </head>
@@ -199,19 +113,18 @@
199 113
     <?php
200 114
     
201 115
     if ($_SERVER["REQUEST_METHOD"] == "GET") {
202
-        include 'db.php';
116
+        include '../api/db.php';
203 117
 
204 118
         # Select username row
205
-        $sql = "SELECT userid, username, nombre, organizacion, puesto, urbanizacion, calle, 
206
-        pueblo, cpostal, telefono, correo, membresia, vigencia FROM login NATURAL JOIN miembros;";
119
+        $sql = "SELECT userid, correo, nombre, organizacion, puesto, urbanizacion, calle, 
120
+        pueblo, cpostal, telefono, membresia, vigencia, horasTrabajadas FROM Login NATURAL JOIN Miembro;";
207 121
         
208
-
209 122
         if($result = $conn->query($sql)){
210 123
             ?>
211 124
             <table id="membersTable" style="width:100%">
212 125
                 <thead>
213 126
                     <th></th>
214
-                    <th>Username</th>
127
+                    <th>Correo</th>
215 128
                     <th>Nombre</th>
216 129
                     <th>Organizacion</th>
217 130
                     <th>Puesto</th>
@@ -220,17 +133,17 @@
220 133
                     <th>Pueblo</th>
221 134
                     <th>Codigo Posta</th>
222 135
                     <th>Telefono</th>
223
-                    <th>Correo</th>
224 136
                     <th>Membresia</th>
225 137
                     <th>Vigencia</th>
138
+                    <th>Horas Trabajadas</th>
226 139
                 </thead>
227 140
                 <tbody>
228 141
             <?php
229 142
             while($row = $result->fetch_assoc()){
230
-                echo "<tr id=\"".$row["userid"]."\"><td><button onClick=\"openModal(".$row["userid"].")\">Editar</button></td><td>".$row["username"]."</td><td>".$row["nombre"]."</td><td>".$row["organizacion"].
231
-                "</td><td>".$row["puesto"]."</td><td>". $row["urbanizacion"]."</td><td>".$row["calle"].
232
-                "</td><td>".$row["pueblo"]."</td><td>".$row["cpostal"]."</td><td>".$row["telefono"]."</td><td>"
233
-                .$row["correo"]."</td><td>".$row["membresia"]."</td><td>".$row["vigencia"]."</tr>";
143
+                echo "<tr id=\"".$row["userid"]."\"><td><button onClick=\"openModal(".$row["userid"].")\">Editar</button></td><td>"
144
+                .$row["correo"]."</td><td>".$row["nombre"]."</td><td>".$row["organizacion"]."</td><td>".$row["puesto"]."</td><td>"
145
+                .$row["urbanizacion"]."</td><td>".$row["calle"]."</td><td>".$row["pueblo"]."</td><td>".$row["cpostal"]."</td><td>"
146
+                .$row["telefono"]."</td><td>".$row["membresia"]."</td><td>".$row["vigencia"]."</td><td>".$row["horasTrabajadas"]."</td></tr>";
234 147
             }
235 148
             ?>
236 149
                 </tbody>
@@ -253,16 +166,14 @@
253 166
             </div>
254 167
         </div>
255 168
 
256
-        <!-- The Modal -->
257
-        <div id="myModal" class="modal">
169
+        <div id="editModal" class="modal">
258 170
 
259
-        <!-- Modal content -->
260 171
         <div class="modal-content">
261 172
             <span class="close">&times;</span>
262 173
             <form method="post" action="" id="editform">
263 174
                 <input type="hidden" id="rowID">
264
-                <label>Username:</label><br>
265
-                <input type="text" id="username"><br><br>
175
+                <label>Correo:</label><br>
176
+                <input type="text" id="correo"><br><br>
266 177
                 <label>Nombre:</label><br>
267 178
                 <input type="text" id="nombre"><br><br>
268 179
                 <label>Organizacion</label><br>
@@ -279,14 +190,21 @@
279 190
                 <input type="text" id="cpostal"><br><br>
280 191
                 <label>Telefono:</label><br>
281 192
                 <input type="text" id="telefono"><br><br>
282
-                <label>Correo:</label><br>
283
-                <input type="text" id="correo"><br><br>
193
+                <label>Membresia:</label><br>
194
+                <select id="membresia">
195
+                    <option value="Persona">Persona</option>
196
+                    <option value="Comunidad">Comunidad</option>
197
+                    <option value="Donante">Donante</option>
198
+                    <option value="Productor">Productor</option>
199
+                </select><br><br>
200
+                <label>Vigencia:</label><br>
201
+                <input type="date" id="vigencia"><br><br>
202
+                <label>Horas Trabajadas:</label><br>
203
+                <input type="text" id="horasTrabajadas"><br><br>
284 204
                 <input type="submit" class="editor" value="Editar Usiario">
285 205
             </form> 
286 206
         </div>
287 207
 
288
-</div>
208
+        </div>
289 209
     </body>
290
-
291
-
292 210
 </html>

+ 88
- 0
admin/style.css 查看文件

@@ -0,0 +1,88 @@
1
+body { 
2
+    margin:0px;
3
+}
4
+
5
+.container {
6
+    height:100%;
7
+    width:100%;
8
+    position: fixed;
9
+    z-index: -1
10
+}
11
+
12
+.members {
13
+    margin-top: 8px;
14
+    margin-left: 1em;
15
+    margin-right: 1em;
16
+}
17
+
18
+/* Add a black background color to the top navigation */
19
+.topnav {
20
+    background-color: #ED7D31;
21
+    overflow: hidden;
22
+    box-shadow: 0 4px 2px 0px gray;
23
+}
24
+
25
+/* Style the links inside the navigation bar */
26
+.topnav a {
27
+    float: left;
28
+    color: black;
29
+    text-align: center;
30
+    padding: 14px 16px;
31
+    text-decoration: none;
32
+    font-size: 23px;
33
+}
34
+
35
+.topnav a:hover {
36
+    background-color: #BA6127;
37
+}
38
+
39
+.logo {
40
+    padding: 0px 0px ! important;
41
+}
42
+
43
+.logo img {
44
+    float: left;
45
+    height: 54px;
46
+}
47
+
48
+/* The Modal (background) */
49
+    .modal {
50
+    display: none; /* Hidden by default */
51
+    position: fixed; /* Stay in place */
52
+    z-index: 1; /* Sit on top */
53
+    padding-top: 100px; /* Location of the box */
54
+    left: 0;
55
+    top: 0;
56
+    width: 100%; /* Full width */
57
+    height: 100%; /* Full height */
58
+    overflow: auto; /* Enable scroll if needed */
59
+    background-color: rgb(0,0,0); /* Fallback color */
60
+    background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
61
+}
62
+
63
+/* Modal Content */
64
+.modal-content {
65
+    background-color: #fefefe;
66
+    margin: auto;
67
+    padding: 20px;
68
+    border: 1px solid #888;
69
+    max-width: 10%;
70
+}
71
+
72
+/* The Close Button */
73
+.close {
74
+    color: #aaaaaa;
75
+    float: right;
76
+    font-size: 28px;
77
+    font-weight: bold;
78
+}
79
+
80
+.close:hover, .close:focus {
81
+    color: #000;
82
+    text-decoration: none;
83
+    cursor: pointer;
84
+}
85
+
86
+table.dataTable tbody th, table.dataTable tbody td {
87
+    text-align: center;
88
+}

Admin backend/db.php → api/db.php 查看文件


+ 90
- 0
api/editMembers.php 查看文件

@@ -0,0 +1,90 @@
1
+<?php
2
+if ($_SERVER["REQUEST_METHOD"] == "POST") {
3
+    
4
+    $userid = $_POST["userid"];
5
+    $correo = $_POST["correo"];
6
+    $nombre = $_POST["nombre"];
7
+    $organizacion = $_POST["organizacion"];
8
+    $puesto = $_POST["puesto"];
9
+    $urbanizacion = $_POST["urbanizacion"];
10
+    $calle = $_POST["calle"];
11
+    $pueblo = $_POST["pueblo"];
12
+    $cpostal = $_POST["cpostal"];
13
+    $telefono = $_POST["telefono"];
14
+    $membresia = $_POST["membresia"];
15
+    $vigencia = $_POST["vigencia"];
16
+    $horas = $_POST["horasTrabajadas"];
17
+
18
+    # Checks if necessary data is empty
19
+    if(strlen($correo) == 0 or strlen($nombre) == 0 or strlen($urbanizacion) == 0 or strlen($calle) == 0 or 
20
+        strlen($pueblo) == 0 or strlen($cpostal) == 0 or strlen($telefono) == 0){
21
+
22
+        http_response_code(400);
23
+        echo json_encode(array("error" => "Informacion necesaria vacia."));
24
+
25
+        exit();
26
+    }
27
+
28
+    # Ignores not properly formatted emails
29
+    if (!filter_var($correo, FILTER_VALIDATE_EMAIL)) {
30
+        http_response_code(400);
31
+        echo json_encode(array("error" => "Email no valido."));
32
+
33
+        exit();
34
+    }
35
+
36
+    include 'db.php';
37
+
38
+    # Starts a transaction
39
+    $conn->autocommit(FALSE);
40
+    $conn->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
41
+
42
+    $sql = "UPDATE Login SET correo = \"%s\" WHERE userid = %d;";
43
+    $sql = sprintf($sql, $correo, $userid);
44
+
45
+    if($conn->query($sql) === FALSE){
46
+        http_response_code(500);
47
+        echo json_encode(array("error" => "Error actualizando el correo (".$conn->error.")"));
48
+
49
+        $conn->rollback();
50
+        $conn->close();;
51
+
52
+        exit();
53
+    }
54
+
55
+    if(strlen($vigencia) == 0){
56
+        $sql = "UPDATE Miembro SET nombre = \"%s\", organizacion = \"%s\", puesto = \"%s\", urbanizacion = \"%s\", 
57
+        calle = \"%s\", pueblo = \"%s\", cpostal = \"%s\", telefono = \"%s\", membresia = \"%s\", vigencia = NULL, 
58
+        horasTrabajadas = %d WHERE userid = %d;";
59
+
60
+        $sql = sprintf($sql, $nombre, $organizacion, $puesto, $urbanizacion, $calle, $pueblo, $cpostal, $telefono, $membresia, $horas, $userid);
61
+    } else {
62
+        $sql = "UPDATE Miembro SET nombre = \"%s\", organizacion = \"%s\", puesto = \"%s\", urbanizacion = \"%s\", 
63
+        calle = \"%s\", pueblo = \"%s\", cpostal = \"%s\", telefono = \"%s\", membresia = \"%s\", vigencia = \"%s\", 
64
+        horasTrabajadas = %d WHERE userid = %d;";
65
+
66
+        $sql = sprintf($sql, $nombre, $organizacion, $puesto, $urbanizacion, $calle, $pueblo, $cpostal, $telefono, $membresia, $vigencia, $horas, $userid);
67
+    }
68
+    
69
+    if($conn->query($sql) === FALSE){
70
+        http_response_code(500);
71
+        echo json_encode(array("error" => "Error actualizando informacion del miembro (".$conn->error.")"));
72
+
73
+        $conn->rollback();
74
+        $conn->close();
75
+        
76
+        exit();
77
+    }
78
+
79
+    # Commits changes
80
+    $conn->commit();
81
+    $conn->close();
82
+
83
+    header("200 OK", true, 200);
84
+    exit(); 
85
+
86
+} else {
87
+    header($_SERVER["SERVER_PROTOCOL"]." 405 Method Not Allowed", true, 405);
88
+    exit();
89
+}
90
+?>

+ 76
- 0
api/login.php 查看文件

@@ -0,0 +1,76 @@
1
+<?php
2
+header('Content-type: application/json');
3
+
4
+if ($_SERVER["REQUEST_METHOD"] == "POST") {
5
+    # Gets json from POST
6
+    $json = json_decode(file_get_contents('php://input'), true);
7
+
8
+    # Input validation for username y password
9
+    $correo = $json["correo"];
10
+    $password = $json["password"];
11
+
12
+    if(strlen($correo) == 0 or strlen($password) == 0){
13
+        http_response_code(400);
14
+        echo json_encode(array("error" => "Correo o password vacio."));
15
+
16
+        exit();
17
+    }
18
+
19
+    include 'db.php';
20
+
21
+    # Select username row
22
+    $sql = "SELECT userid, hash FROM Login WHERE correo = '".$correo."'";
23
+    $result = $conn->query($sql);
24
+
25
+    if($result === FALSE){
26
+        http_response_code(500);
27
+        echo json_encode(array("error" => "Error de base de datos 1."));
28
+
29
+        $conn->close();
30
+        exit();
31
+    }
32
+
33
+    if($result->num_rows){
34
+        # Grabs password hash
35
+        $result = $result->fetch_assoc();
36
+        $hash = $result["hash"];
37
+        $userid = $result["userid"];
38
+
39
+    } else {
40
+        http_response_code(401);
41
+        echo json_encode(array("error" => "Correo o password incorrecto."));
42
+
43
+        $conn->close();
44
+        exit();
45
+    }
46
+
47
+    # Verifies password
48
+    if(!password_verify($password, $hash)){
49
+        $conn->close();
50
+
51
+        http_response_code(401);
52
+        echo json_encode(array("error" => "Correo o password incorrecto."));
53
+
54
+        exit();
55
+    }
56
+
57
+    $token = bin2hex(random_bytes(16));
58
+
59
+    # Insert Token
60
+    $sql = "INSERT INTO Token (token, userid) VALUES (\"".$token."\", ".$userid.") ON DUPLICATE KEY UPDATE token = \"".$token."\";";
61
+    if($conn->query($sql) === FALSE){
62
+        http_response_code(500);
63
+        echo json_encode(array("error" => "Error de base de datos 2."));
64
+
65
+        $conn->close();
66
+        exit();
67
+    }
68
+
69
+    http_response_code(200);
70
+    echo json_encode(array("token" => $token));    
71
+
72
+} else {
73
+    header($_SERVER["SERVER_PROTOCOL"]." 405 Method Not Allowed", true, 405);
74
+    exit();
75
+}
76
+?>

+ 68
- 0
api/member.php 查看文件

@@ -0,0 +1,68 @@
1
+<?php
2
+header('Content-type: application/json');
3
+
4
+if ($_SERVER["REQUEST_METHOD"] == "POST") {
5
+    # Gets json from POST
6
+    $json = json_decode(file_get_contents('php://input'), true);
7
+
8
+    # Input validation for username y password
9
+    $token = $json["token"];
10
+    if(strlen($token) == 0){
11
+        http_response_code(400);
12
+        echo json_encode(array("error" => "Ningun token."));
13
+
14
+        exit();
15
+    }
16
+
17
+
18
+    include 'db.php';
19
+
20
+    $sql = "SELECT token FROM Token WHERE token = \"".$token."\";";
21
+    $result = $conn->query($sql);
22
+    
23
+    if($result === FALSE){
24
+        http_response_code(500);
25
+        echo json_encode(array("error" => "Error de base de datos 1."));
26
+
27
+        $conn->close();
28
+        exit();
29
+    }
30
+
31
+    if($result->num_rows == 0){
32
+        http_response_code(401);
33
+        echo json_encode(array("error" => "Token invalido."));
34
+
35
+        $conn->close();
36
+        exit();
37
+    }
38
+
39
+
40
+    $sql = "SELECT correo, nombre, organizacion, puesto, urbanizacion, calle, pueblo,
41
+    cpostal, telefono, membresia, vigencia, horasTrabajadas FROM Token NATURAL JOIN Miembro NATURAL JOIN 
42
+    Login WHERE token = '".$token."'";
43
+    
44
+    $result = $conn->query($sql);
45
+    if($result === FALSE){
46
+        http_response_code(500);
47
+        echo json_encode(array("error" => "Error de base de datos 2."));
48
+
49
+        $conn->close();
50
+        exit();
51
+    } else if ($result->num_rows == 0) {
52
+        http_response_code(500);
53
+        echo json_encode(array("error" => "Error de base de datos 3."));
54
+
55
+        $conn->close();
56
+        exit();
57
+    }    
58
+
59
+    $result = $result->fetch_assoc();
60
+    
61
+    http_response_code(200);
62
+    echo json_encode($result);    
63
+
64
+} else {
65
+    header($_SERVER["SERVER_PROTOCOL"]." 405 Method Not Allowed", true, 405);
66
+    exit();
67
+}
68
+?>

Admin backend/signup.php → api/signup.php 查看文件

@@ -5,10 +5,30 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
5 5
     $json = json_decode(file_get_contents('php://input'), true);
6 6
     
7 7
     # Input validation for username y password
8
-    $username = $json["username"];
8
+    $correo = $json["correo"];
9 9
     $password = $json["password"];
10
-    if(strlen($username) == 0 or strlen($password) == 0){
11
-        header("400 Bad Request", true, 400);
10
+    $nombre = $json["nombre"];
11
+    $organizacion = $json["organizacion"];
12
+    $puesto = $json["puesto"];
13
+    $urbanizacion = $json["urbanizacion"];
14
+    $calle = $json["calle"];
15
+    $pueblo = $json["pueblo"];
16
+    $cpostal = $json["cpostal"];
17
+    $telefono = $json["telefono"];
18
+
19
+    # Ignores not properly formatted emails
20
+    if (!filter_var($correo, FILTER_VALIDATE_EMAIL)) {
21
+        http_response_code(400);
22
+        echo json_encode(array("error" => "Email no valido."));
23
+
24
+        exit();
25
+    }
26
+
27
+    if(strlen($correo) == 0 or strlen($password) == 0 or strlen($nombre) == 0 or strlen($urbanizacion) == 0
28
+    or strlen($calle) == 0  or strlen($pueblo) == 0 or strlen($cpostal) == 0 or strlen($telefono) == 0){
29
+        http_response_code(400);
30
+        echo json_encode(array("error" => "Campos requeridos vacio."));
31
+
12 32
         exit();
13 33
     }
14 34
     
@@ -22,44 +42,30 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
22 42
     $conn->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
23 43
 
24 44
     # Inserts into login
25
-    $sql = "INSERT INTO login (username, hash) VALUES ('".$username."', '".$hash."')";
45
+    $sql = "INSERT INTO Login (correo, hash) VALUES ('".$correo."', '".$hash."')";
26 46
     if($conn->query($sql) === FALSE){
47
+        http_response_code(500);
48
+        echo json_encode(array("error" =>  "Correo en uso."));
49
+
27 50
         $conn->rollback();
28 51
         $conn->close();
29
-        header("500 Internal Server Error", true, 500);
52
+        
30 53
         exit();
31 54
     }
32 55
 
33
-    # Grabs all data
34 56
     $userid = $conn->insert_id;
35
-    $nombre = $json["nombre"];
36
-    $organizacion = $json["organizacion"];
37
-    $puesto = $json["puesto"];
38
-    $urbanizacion = $json["urbanizacion"];
39
-    $calle = $json["calle"];
40
-    $pueblo = $json["pueblo"];
41
-    $cpostal = $json["cpostal"];
42
-    $telefono = $json["telefono"];
43
-    $correo = $json["correo"];
44
-
45
-    # Checks if necessary data is empty
46
-    if(strlen($nombre) == 0 or strlen($urbanizacion) == 0 or strlen($calle) == 0 or strlen($pueblo) == 0 or 
47
-        strlen($cpostal) == 0 or strlen($telefono) == 0 or strlen($correo) == 0 ){
48
-        $conn->rollback();
49
-        $conn->close();
50
-        header("400 Bad Request", true, 400);
51
-        exit();
52
-    }
53 57
 
54 58
     # Inserts into miembros
55
-    $sql = "INSERT INTO miembros (userid, nombre, organizacion, puesto, urbanizacion, calle, pueblo, cpostal, telefono, correo) VALUES "
56
-            ."('".$userid."', '".$nombre."', '".$organizacion."', '".$puesto."', '".$urbanizacion.
57
-            "', '".$calle."', '".$pueblo."', '".$cpostal."', '".$telefono."', '".$correo."')";
59
+    $sql = "INSERT INTO Miembro (userid, nombre, organizacion, puesto, urbanizacion, calle, pueblo, cpostal, telefono) VALUES "
60
+            ."('".$userid."', '".$nombre."', '".$organizacion."', '".$puesto."', '".$urbanizacion
61
+            ."', '".$calle."', '".$pueblo."', '".$cpostal."', '".$telefono."')";
58 62
             
59 63
     if($conn->query($sql) === FALSE){
64
+        http_response_code(500);
65
+        echo json_encode(array("error" =>  "Error de base de datos."));
66
+
60 67
         $conn->rollback();
61 68
         $conn->close();
62
-        header("500 Internal Server Error", true, 500);
63 69
         exit();
64 70
     }
65 71
 

Admin backend/favicon.ico → favicon.ico 查看文件


+ 3
- 0
php.ini 查看文件

@@ -0,0 +1,3 @@
1
+extension=php_mysqli.dll
2
+extension=php_pdo_mysql.dll
3
+extension=php_curl.dll

+ 28
- 0
tables.sql 查看文件

@@ -0,0 +1,28 @@
1
+CREATE TABLE Login (
2
+    userID INTEGER PRIMARY KEY AUTO_INCREMENT,
3
+    correo VARCHAR(64),
4
+    hash VARBINARY(255),
5
+    UNIQUE(correo)
6
+);
7
+
8
+CREATE TABLE Miembro (
9
+  userID INTEGER,
10
+  nombre TINYTEXT,
11
+  organizacion TINYTEXT,
12
+  puesto TINYTEXT,
13
+  urbanizacion TINYTEXT,
14
+  calle TINYTEXT,
15
+  pueblo VARCHAR(32),
16
+  cpostal CHAR(5),
17
+  telefono CHAR(14),
18
+  membresia VARCHAR(32),
19
+  vigencia DATE,
20
+  horasTrabajadas INTEGER,
21
+  FOREIGN KEY (userID) REFERENCES Login(userID) ON DELETE CASCADE
22
+);
23
+
24
+CREATE TABLE Token (
25
+  userID INTEGER PRIMARY KEY,
26
+  token CHAR(32),
27
+  FOREIGN KEY (userID) REFERENCES Login(userID) ON DELETE CASCADE
28
+);