├── .env-example ├── LICENSE ├── README.md ├── asset ├── img │ └── logo1.png └── js │ └── data.js ├── cerdas.sql ├── composer.json ├── core ├── Database │ ├── Connection.php │ ├── IQuery.php │ └── QueryBuilder.php └── helper │ └── function.php ├── index.php ├── input.php ├── logs └── stelinlog.log ├── partial ├── footer.php ├── head.php └── nav.php └── rekap.php /.env-example: -------------------------------------------------------------------------------- 1 | DRIVER="" 2 | HOST="" 3 | DBNAME="" 4 | USERDB="" 5 | PASSWORD="" 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 stelin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DISCLAIMER 2 | Repo ini sudah tidak dimaintenance lagi, pindah ke sini dengan menggunakan laravel https://github.com/lintangtimur/rfid-absensi-v2 3 |
4 |
5 |
6 |
7 |
8 | 9 | ![RFID Absensi Img](https://image.ibb.co/eE6ewG/rfid_web_absen.png "RFID Absensi") 10 | 11 | [![Maintainability](https://api.codeclimate.com/v1/badges/7d1766b82a643c2d1e34/maintainability)](https://codeclimate.com/github/lintangtimur/RFID-absensi/maintainability) 12 | [![Coverage Status](https://coveralls.io/repos/github/lintangtimur/RFID-absensi/badge.svg?branch=master)](https://coveralls.io/github/lintangtimur/RFID-absensi?branch=master) 13 | # RFID-absensi 14 | Sistem absensi mahasiswa dengan menggunakan RFID 15 | 16 | # SystemSpec 17 | - PDOMysql 18 | - PHP v7 19 | - Bootstrap 20 | # Usage[Testing] 21 | 1. Buat database dengan nama cerdas 22 | 2. Import file cerdas.sql 23 | 3. Lakukan input norfid berdasarkan table siswa di database 24 | 25 | ## LICENSE MIT 26 | MIT License 27 | 28 | Copyright (c) 2017 stelin 29 | 30 | Permission is hereby granted, free of charge, to any person obtaining a copy 31 | of this software and associated documentation files (the "Software"), to deal 32 | in the Software without restriction, including without limitation the rights 33 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 34 | copies of the Software, and to permit persons to whom the Software is 35 | furnished to do so, subject to the following conditions: 36 | 37 | The above copyright notice and this permission notice shall be included in all 38 | copies or substantial portions of the Software. 39 | 40 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 41 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 42 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 43 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 44 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 45 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 46 | SOFTWARE. 47 | -------------------------------------------------------------------------------- /asset/img/logo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lintangtimur/RFID-absensi/c4d0681b200a9f098858b08e6be143199b5c6517/asset/img/logo1.png -------------------------------------------------------------------------------- /asset/js/data.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | 3 | // Input field langsung fokus 4 | $('#inputs').focus(); 5 | 6 | // jika ada perubahan di input field [ENTER], akan mentrigger 7 | $("input").change(function() { 8 | var id = $('#inputs').val(); 9 | 10 | $.ajax({ 11 | url: 'input.php', 12 | type: 'post', 13 | data: { 14 | id: id 15 | } 16 | }) 17 | .done(function(data) { 18 | console.log(data); 19 | 20 | // hapus alert danger dan sukses agar bisa bergantian class 21 | // $('.alert').removeClass('alert-danger alert-success'); 22 | $('#tampilMessage').removeClass('bg-danger bg-success'); 23 | 24 | if (data == "err") { 25 | // $('.alert').addClass('alert-danger').html("RFID belum terdaftar di dalam system kami: " + "{ " + id + " }"); 26 | $('#classInformation').html("Whoops, there was an error").addClass('display-4'); 27 | $('#tampilMessage').addClass('bg-danger').html("RFID is not yet registered in our system: " + "{ " + id + " }"); 28 | } else { 29 | // $('.alert').addClass('alert-success').html(data); 30 | $('#classInformation').html("Class Information").addClass('display-4'); 31 | $('#tampilMessage').addClass('bg-success').html(data); 32 | } 33 | 34 | $('#inputs').val(""); //Mengkosongkan input field 35 | $('#inputs').focus(); //mengembalikan cursor ke input field 36 | 37 | }) 38 | .fail(function(data) { 39 | console.log(data); 40 | }); 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /cerdas.sql: -------------------------------------------------------------------------------- 1 | -- phpMyAdmin SQL Dump 2 | -- version 4.6.5.2 3 | -- https://www.phpmyadmin.net/ 4 | -- 5 | -- Host: 127.0.0.1 6 | -- Generation Time: Oct 10, 2017 at 06:06 PM 7 | -- Server version: 10.1.21-MariaDB 8 | -- PHP Version: 7.1.1 9 | 10 | SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 11 | SET time_zone = "+00:00"; 12 | 13 | 14 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 15 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 16 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 17 | /*!40101 SET NAMES utf8mb4 */; 18 | 19 | -- 20 | -- Database: `cerdas` 21 | -- 22 | 23 | -- -------------------------------------------------------- 24 | 25 | -- 26 | -- Table structure for table `jadwal` 27 | -- 28 | 29 | CREATE TABLE `jadwal` ( 30 | `id` int(5) NOT NULL, 31 | `hari` varchar(20) NOT NULL, 32 | `jam_mulai` time NOT NULL, 33 | `jam_akhir` time NOT NULL, 34 | `makul` varchar(200) NOT NULL 35 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 36 | 37 | -- 38 | -- Dumping data for table `jadwal` 39 | -- 40 | 41 | INSERT INTO `jadwal` (`id`, `hari`, `jam_mulai`, `jam_akhir`, `makul`) VALUES 42 | (1, 'Senin', '08:00:00', '12:00:00', 'Perencanaan Sumber Daya Perusahaan (ERP)'), 43 | (2, 'Senin', '12:00:00', '14:00:00', 'Multimedia Bisnis'), 44 | (3, 'Selasa', '13:00:00', '17:00:00', 'Perangkat Cerdas'), 45 | (4, 'Rabu', '08:00:00', '11:00:00', 'Interaksi Manusia dan Komputer'), 46 | (5, 'Selasa', '08:00:00', '12:00:00', 'Kecerdasan Buatan'), 47 | (6, 'Kamis', '08:00:00', '10:00:00', 'Multimedia Bisnis'), 48 | (7, 'Kamis', '10:00:00', '12:00:00', 'Etika Profesi'), 49 | (8, 'Kamis', '13:00:00', '17:00:00', 'Sistem Financial Perusahaan'), 50 | (9, 'Jumat', '08:00:00', '11:00:00', 'Statistika'); 51 | 52 | -- -------------------------------------------------------- 53 | 54 | -- 55 | -- Table structure for table `rekap_absen` 56 | -- 57 | 58 | CREATE TABLE `rekap_absen` ( 59 | `id` int(5) NOT NULL, 60 | `norf` int(20) NOT NULL, 61 | `makul_absen` varchar(200) NOT NULL, 62 | `tanggal_absen` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 63 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 64 | 65 | -- 66 | -- Dumping data for table `rekap_absen` 67 | -- 68 | 69 | INSERT INTO `rekap_absen` (`id`, `norf`, `makul_absen`, `tanggal_absen`) VALUES 70 | (2, 1235350, 'Kecerdasan Buatan', '2017-10-10 03:28:29'), 71 | (3, 1236367, 'Perangkat Cerdas', '2017-10-10 09:33:52'), 72 | (4, 1235350, 'Perangkat Cerdas', '2017-10-10 09:38:40'), 73 | (6, 1236367, 'Perangkat Cerdas', '2017-10-10 10:38:33'), 74 | (9, 5704694, 'Perangkat Cerdas', '2017-10-10 11:49:16'), 75 | (10, 5708185, 'Tidak ada kelas', '2017-10-10 14:24:39'), 76 | (11, 5815403, 'Tidak ada kelas', '2017-10-10 14:33:01'), 77 | (12, 1236367, 'Tidak ada kelas', '2017-10-10 14:44:20'), 78 | (13, 5704694, 'Tidak ada kelas', '2017-10-10 15:43:27'); 79 | 80 | -- -------------------------------------------------------- 81 | 82 | -- 83 | -- Table structure for table `rfid` 84 | -- 85 | 86 | CREATE TABLE `rfid` ( 87 | `id` int(5) NOT NULL, 88 | `norf` int(15) NOT NULL, 89 | `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 90 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 91 | 92 | -- 93 | -- Dumping data for table `rfid` 94 | -- 95 | 96 | INSERT INTO `rfid` (`id`, `norf`, `created_at`) VALUES 97 | (1, 1, '2017-09-19 16:28:55'), 98 | (3, 23, '2017-09-28 16:28:55'), 99 | (5, 2, '2017-09-28 16:28:55'), 100 | (14, 1111111, '2017-09-28 17:18:20'); 101 | 102 | -- -------------------------------------------------------- 103 | 104 | -- 105 | -- Table structure for table `siswa` 106 | -- 107 | 108 | CREATE TABLE `siswa` ( 109 | `id` int(5) NOT NULL, 110 | `norf` int(10) NOT NULL, 111 | `nama` varchar(100) NOT NULL, 112 | `NIM` varchar(100) NOT NULL, 113 | `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 114 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 115 | 116 | -- 117 | -- Dumping data for table `siswa` 118 | -- 119 | 120 | INSERT INTO `siswa` (`id`, `norf`, `nama`, `NIM`, `last_update`) VALUES 121 | (1, 5708185, 'Stefanus Lintang', '15.N1.0020', '2017-10-10 14:11:05'), 122 | (2, 5815403, 'Daniel Aditama', '15.N1.0015', '2017-10-10 14:11:16'), 123 | (3, 1236367, 'Richard Juan', '15.N1.0011', '2017-10-10 14:11:21'), 124 | (4, 1235350, 'Ricard Simon', '15.N1.0017', '2017-10-10 14:11:25'), 125 | (5, 1230583, 'MIkael Duhantatya', '15.N1.0006', '2017-10-10 14:11:30'), 126 | (6, 5704694, 'Edwin Leonardo', '15.N1.0005', '2017-10-10 11:45:20'); 127 | 128 | -- 129 | -- Indexes for dumped tables 130 | -- 131 | 132 | -- 133 | -- Indexes for table `jadwal` 134 | -- 135 | ALTER TABLE `jadwal` 136 | ADD PRIMARY KEY (`id`); 137 | 138 | -- 139 | -- Indexes for table `rekap_absen` 140 | -- 141 | ALTER TABLE `rekap_absen` 142 | ADD PRIMARY KEY (`id`); 143 | 144 | -- 145 | -- Indexes for table `rfid` 146 | -- 147 | ALTER TABLE `rfid` 148 | ADD PRIMARY KEY (`id`); 149 | 150 | -- 151 | -- Indexes for table `siswa` 152 | -- 153 | ALTER TABLE `siswa` 154 | ADD PRIMARY KEY (`id`); 155 | 156 | -- 157 | -- AUTO_INCREMENT for dumped tables 158 | -- 159 | 160 | -- 161 | -- AUTO_INCREMENT for table `jadwal` 162 | -- 163 | ALTER TABLE `jadwal` 164 | MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10; 165 | -- 166 | -- AUTO_INCREMENT for table `rekap_absen` 167 | -- 168 | ALTER TABLE `rekap_absen` 169 | MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=14; 170 | -- 171 | -- AUTO_INCREMENT for table `rfid` 172 | -- 173 | ALTER TABLE `rfid` 174 | MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15; 175 | -- 176 | -- AUTO_INCREMENT for table `siswa` 177 | -- 178 | ALTER TABLE `siswa` 179 | MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; 180 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 181 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 182 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 183 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "autoload":{ 3 | "files" :[ 4 | "core/helper/function.php" 5 | ], 6 | "psr-4" :{ 7 | "StelinDB\\":"core/" 8 | } 9 | }, 10 | "require": { 11 | "monolog/monolog": "^1.23", 12 | "nesbot/carbon": "^1.22", 13 | "vlucas/phpdotenv": "^2.4" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/Database/Connection.php: -------------------------------------------------------------------------------- 1 | getMessage()); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /core/Database/IQuery.php: -------------------------------------------------------------------------------- 1 | pdo = $pdo; 74 | $this->logger = new Logger('StelinDB_Database'); 75 | $this->logger->pushHandler(new StreamHandler('logs/stelinlog.log', Logger::DEBUG)); 76 | } 77 | 78 | /** 79 | * [selectAll description] 80 | * @param string $table nama table 81 | * @return object PDO::FETCH_CLASS 82 | */ 83 | public function selectAll($table) 84 | { 85 | $result = $this->pdo->prepare("SELECT * FROM {$table}"); 86 | $result->execute(); 87 | $result = $result->fetchAll(PDO::FETCH_CLASS); 88 | $this->logger->info('selectAll() errorCode: '.$result->errorCode()); 89 | 90 | return $result; 91 | } 92 | 93 | /** 94 | * INSERT ke dalam table 95 | * @param string $table nama table 96 | * @param array $parameter parameter table berupa [kolom => value] 97 | * @return object 98 | */ 99 | public function insert($table, array $parameter) 100 | { 101 | // $sql = "INSERT INTO rfid (id, norf) values ('',:id)"; 102 | $sql = sprintf( 103 | 'insert into %s (%s) values (%s)', 104 | $table, 105 | implode(', ', array_keys($parameter)), 106 | ':'.implode(', :', array_keys($parameter)) 107 | ); 108 | 109 | // "insert into rfid (id, norf) values :id, :norf 110 | $stmt = $this->pdo->prepare($sql); 111 | 112 | $stmt->execute($parameter); 113 | $this->logger->info('insert() errorCode: '.$result->errorCode()); 114 | $this->logger->info('insert parameter: ', $parameter); 115 | 116 | return $stmt; 117 | } 118 | 119 | /** 120 | * select clause 121 | * @param string $select select * clause 122 | * @return $this this object 123 | */ 124 | public function select($select) 125 | { 126 | $this->selectables = func_get_args(); 127 | 128 | return $this; 129 | } 130 | 131 | /** 132 | * from clause 133 | * @param string $table memilih dari table mana 134 | * @return $this from clause 135 | */ 136 | public function from($table) 137 | { 138 | $this->table = $table; 139 | 140 | return $this; 141 | } 142 | 143 | /** 144 | * where clause 145 | * @param string $where condition 146 | * @return $this 147 | */ 148 | public function where($where) 149 | { 150 | $this->whereClause = $where; 151 | 152 | return $this; 153 | } 154 | 155 | /** 156 | * And Clause 157 | * @param string $whereAnd And condition 158 | * @return $this 159 | */ 160 | public function whereAnd($whereAnd) 161 | { 162 | $this->whereAndClause = $whereAnd; 163 | 164 | return $this; 165 | } 166 | 167 | /** 168 | * Batas limit yang akan ditampilkan 169 | * @param string $limit limit yang diambil 170 | * @return $this limit 171 | */ 172 | public function limit($limit) 173 | { 174 | $this->limit = $limit; 175 | 176 | return $this; 177 | } 178 | 179 | /** 180 | * join clause 181 | * @param string $join join table 182 | * @return $this 183 | */ 184 | public function join($join) 185 | { 186 | $this->joinClause = $join; 187 | 188 | return $this; 189 | } 190 | 191 | /** 192 | * Membuat query secara mentah, dan dieksekusi 193 | * @param string $query query yang akan dieksekusi 194 | * @param array $parameter parameter dipisahkan dengan koma [$a, $b] 195 | * @return array return array, di dalam array tersebut ada sebuah object class 196 | */ 197 | public function RAW($query, array $parameter) 198 | { 199 | $result = $this->pdo->prepare($query); 200 | 201 | $result->execute($parameter); 202 | $result = $this->checkArrayIndex($result->fetchAll(PDO::FETCH_CLASS)); 203 | $this->logger->info('RAW-query: '.$query, $parameter); 204 | 205 | return $result; 206 | } 207 | 208 | /** 209 | * Check apakah hasil dari FetchClass terdapat indeks 0 nya 210 | * @param array $result fetchAll(PDO::FETCH_CLASS) 211 | * @return object 212 | */ 213 | private function checkArrayIndex(array $result) 214 | { 215 | if (is_array($result)) { 216 | if (array_key_exists(0, $result)) { 217 | return $result; 218 | } 219 | 220 | return (object)[]; 221 | } 222 | } 223 | 224 | /** 225 | * Fungsi untuk menampilkan tanggal kapan dibuat 226 | * @param string $norf nomer rfid yang akan ditampilan tanggal dibuat 227 | * @return string return created_at dari database 228 | */ 229 | public function registered($norf) 230 | { 231 | $sql = "SELECT last_update from siswa where norf = ?"; 232 | $result = $this->pdo->prepare($sql); 233 | $result->execute([ 234 | $norf 235 | ]); 236 | 237 | return $result->fetchAll(PDO::FETCH_CLASS)[0]->last_update; 238 | } 239 | 240 | /** 241 | * hasil dari query builder 242 | * @return string query builder result in string 243 | */ 244 | public function result() 245 | { 246 | $query[] = "SELECT"; 247 | // if the selectables array is empty, select all 248 | if (empty($this->selectables)) { 249 | $query[] = "*"; 250 | } 251 | // else select according to selectables 252 | else { 253 | $query[] = join(', ', $this->selectables); 254 | } 255 | 256 | $query[] = "FROM"; 257 | $query[] = $this->table; 258 | 259 | if (!empty($this->joinClause)) { 260 | $query[] = "JOIN"; 261 | $query[] = $this->joinClause; 262 | // $query[] = "ON".$this->onClause; 263 | } 264 | 265 | if (!empty($this->whereClause)) { 266 | $query[] = "WHERE"; 267 | $query[] = $this->whereClause; 268 | } 269 | 270 | if (!empty($this->whereAndClause)) { 271 | $query[] = "AND"; 272 | $query[] = $this->whereAndClause; 273 | } 274 | 275 | if (!empty($this->limit)) { 276 | $query[] = "LIMIT"; 277 | $query[] = $this->limit; 278 | } 279 | 280 | return join(' ', $query); 281 | } 282 | } 283 | -------------------------------------------------------------------------------- /core/helper/function.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 |

Put Your RFID Card to Your Scanner

7 | 8 |
9 | 10 | 11 | This System Automatically Record Your Abscence 12 |
13 | 14 |
15 |

16 |
17 | 18 |
19 | 20 |
21 | 22 |
23 | load(); 31 | $qb = new QueryBuilder(Connection::Connect()); 32 | $HARI = [ 33 | 0 => "Minggu", 34 | 1 => "Senin", 35 | 2 => "Selasa", 36 | 3 => "Rabu", 37 | 4 => "Kamis", 38 | 5 => "Jumat", 39 | 6 => "Sabtu" 40 | ]; 41 | $sekarang = Carbon::now('Asia/Jakarta')->dayOfWeek; 42 | $hasil = $qb->RAW("SELECT * from jadwal where hari = ?", [$HARI[$sekarang]]); 43 | ?> 44 |
45 |
46 |

47 |
48 |
49 | RAW("SELECT * FROM jadwal where hari = ?", [$HARI[$sekarang]]); 51 | foreach ($cariMakulabsen as $key => $value) { 52 | $mulai = Carbon::parse($value->jam_mulai, 'Asia/Jakarta')->hour; 53 | $mulaiMenit = Carbon::parse($value->jam_mulai, 'Asia/Jakarta')->addminutes(15); 54 | 55 | $akhir = Carbon::parse($value->jam_akhir, 'Asia/Jakarta')->hour; 56 | $sekarang = Carbon::now('Asia/Jakarta')->hour ; 57 | 58 | if ($sekarang > $mulai && $sekarang < $akhir) { //10 > 8 && 10 < 12 59 | $makul = "Available"; 60 | break; 61 | } else { 62 | $makul = "Not Available"; 63 | } 64 | } 65 | echo "

{$makul}

"; 66 | ?> 67 |
68 |
69 |
70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | $value):?> 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 |
#Mata kuliahJam mulaiJam berakhir
makul;?>jam_mulai;?>jam_akhir;?>
93 | 94 |
95 | 96 | 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /input.php: -------------------------------------------------------------------------------- 1 | load(); 10 | $now = new Carbon; 11 | $now->setTimezone('Asia/Jakarta'); 12 | 13 | $qb = new QueryBuilder(\StelinDB\Database\Connection::Connect()); 14 | 15 | if (isset($_POST['id'])) { 16 | $id = $_POST['id']; 17 | 18 | $siswa = $qb->RAW( 19 | "SELECT nama, last_update, NOW() 20 | AS absen from siswa where norf = ?", 21 | [$id]); 22 | 23 | $HARI = [ 24 | 0 => "Minggu", 25 | 1 => "Senin", 26 | 2 => "Selasa", 27 | 3 => "Rabu", 28 | 4 => "Kamis", 29 | 5 => "Jumat", 30 | 6 => "Sabtu" 31 | ]; 32 | 33 | //Jika variable siswa adalah array, dan indeks pertama ada(exist) 34 | if (array_key_exists(0, $siswa)) { 35 | $siswa = $siswa[0]; //Mengambil indeks pertama 36 | 37 | //parsing jam absen siswa ke dalam timezone asia/jakarta via Carbon 38 | //default Carbon timezone is Berlin 39 | $date = Carbon::parse($siswa->absen, 'Asia/Jakarta'); 40 | 41 | $cariMakulabsen = $qb->RAW("SELECT * FROM jadwal where hari = ?", $HARI[$date->dayOfWeek]); 42 | 43 | foreach ($cariMakulabsen as $index => $value) { 44 | $mulai = Carbon::parse($value->jam_mulai, 'Asia/Jakarta')->hour; 45 | $akhir = Carbon::parse($value->jam_akhir, 'Asia/Jakarta')->hour; 46 | 47 | //Mendapatkan jam sekarang 48 | $sekarang = Carbon::now('Asia/Jakarta')->hour ; 49 | 50 | if ($sekarang > $mulai && $sekarang < $akhir) { //10 > 8 && 10 < 12 51 | $makul = $value->makul; 52 | break; 53 | } else { 54 | $makul = "Tidak ada kelas"; 55 | // $makul = $value->makul; 56 | } 57 | } 58 | 59 | //Yang akan ditampilkan 60 | $formatTampilan = "Nama: %s, Jam Absen: %s, %s, Makul: %s"; 61 | $rekapAbsen = $qb->insert('rekap_absen', [ 62 | 'id' => '', 63 | 'norf' => $id, 64 | 'makul_absen' => $makul 65 | ]); 66 | 67 | echo sprintf($formatTampilan, $siswa->nama, $date, $date->diffForHumans(), $makul); 68 | } else { 69 | echo "err"; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /logs/stelinlog.log: -------------------------------------------------------------------------------- 1 | [2017-10-16 16:14:55] StelinDB_Database.INFO: RAW-query: select * from siswa where NIM = ? ["15.N1.0020"] [] 2 | [2017-10-16 16:17:48] StelinDB_Database.INFO: RAW-query: SELECT * from jadwal where hari = ? ["Senin"] [] 3 | [2017-10-16 16:17:48] StelinDB_Database.INFO: RAW-query: SELECT * FROM jadwal where hari = ? ["Senin"] [] 4 | [2017-10-16 16:17:53] StelinDB_Database.INFO: RAW-query: SELECT nama, last_update, NOW() AS absen from siswa where norf = ? ["sad"] [] 5 | [2017-10-16 16:18:05] StelinDB_Database.INFO: RAW-query: SELECT nama, last_update, NOW() AS absen from siswa where norf = ? ["pekok banget ndes"] [] 6 | [2017-10-16 16:18:24] StelinDB_Database.INFO: RAW-query: SELECT siswa.nama,siswa.NIM, rekap_absen.makul_absen, rekap_absen.tanggal_absen FROM siswa INNER JOIN rekap_absen ON siswa.norf=rekap_absen.norf GROUP BY makul_absen [] [] 7 | [2017-10-16 16:18:24] StelinDB_Database.INFO: RAW-query: SELECT siswa.nama,siswa.NIM, rekap_absen.makul_absen, rekap_absen.tanggal_absen FROM siswa INNER JOIN rekap_absen ON siswa.norf=rekap_absen.norf AND rekap_absen.makul_absen = ? ["Interaksi Manusia dan Komputer"] [] 8 | [2017-10-16 16:18:24] StelinDB_Database.INFO: RAW-query: SELECT siswa.nama,siswa.NIM, rekap_absen.makul_absen, rekap_absen.tanggal_absen FROM siswa INNER JOIN rekap_absen ON siswa.norf=rekap_absen.norf AND rekap_absen.makul_absen = ? ["Kecerdasan Buatan"] [] 9 | [2017-10-16 16:18:24] StelinDB_Database.INFO: RAW-query: SELECT siswa.nama,siswa.NIM, rekap_absen.makul_absen, rekap_absen.tanggal_absen FROM siswa INNER JOIN rekap_absen ON siswa.norf=rekap_absen.norf AND rekap_absen.makul_absen = ? ["Perangkat Cerdas"] [] 10 | [2017-10-16 16:18:24] StelinDB_Database.INFO: RAW-query: SELECT siswa.nama,siswa.NIM, rekap_absen.makul_absen, rekap_absen.tanggal_absen FROM siswa INNER JOIN rekap_absen ON siswa.norf=rekap_absen.norf AND rekap_absen.makul_absen = ? ["Tidak ada kelas"] [] 11 | -------------------------------------------------------------------------------- /partial/footer.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /partial/head.php: -------------------------------------------------------------------------------- 1 | 2 | INDEX 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /partial/nav.php: -------------------------------------------------------------------------------- 1 | 2 | 21 | -------------------------------------------------------------------------------- /rekap.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Rekap 8 | 9 | 10 | 11 | 12 | 16 | 17 | 18 | 19 | 20 |
21 |
22 |
23 | load(); 28 | use StelinDB\Database\QueryBuilder; 29 | use Carbon\Carbon; 30 | 31 | $qb = new QueryBuilder(\StelinDB\Database\Connection::Connect()); 32 | $jadwal = $qb->RAW("SELECT siswa.nama,siswa.NIM, rekap_absen.makul_absen, rekap_absen.tanggal_absen 33 | FROM siswa 34 | INNER JOIN rekap_absen ON siswa.norf=rekap_absen.norf 35 | GROUP BY makul_absen", []); 36 | foreach ($jadwal as $index => $value) { 37 | $rekabAbsen = $qb->RAW("SELECT siswa.nama,siswa.NIM, rekap_absen.makul_absen, rekap_absen.tanggal_absen 38 | FROM siswa 39 | INNER JOIN rekap_absen ON siswa.norf=rekap_absen.norf 40 | AND rekap_absen.makul_absen = ?", [$value->makul_absen]); 41 | echo "

{$value->makul_absen}

"; 42 | $i = 1; 43 | $table = " 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | "; 54 | foreach ($rekabAbsen as $key => $nilai) { 55 | $date = Carbon::parse($nilai->tanggal_absen, 'Asia/Jakarta'); 56 | $table .= ""; 57 | $table .= ""; 58 | $table .= ""; 59 | $table .= ""; 60 | $table .= ""; 61 | $table .= ""; 62 | $table .= ""; 63 | $i++; 64 | } 65 | $table .= " 66 | 67 |
#NamaNIMJamHistory
$i$nilai->nama$nilai->NIM".$date->toDayDateTimeString()."".$date->diffForHumans()."
"; 68 | echo $table; 69 | } 70 | ?> 71 |
72 |
73 | 74 |
75 |
76 |
77 | 78 | 79 | 80 | 81 | --------------------------------------------------------------------------------