first commit
This commit is contained in:
commit
173b16c8bd
|
@ -0,0 +1,18 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
||||
|
||||
[docker-compose.yml]
|
||||
indent_size = 4
|
|
@ -0,0 +1,53 @@
|
|||
APP_NAME="LKP SEIZA"
|
||||
APP_ENV=local
|
||||
APP_KEY=base64:LVMbUfVHXTiWIZvTH9F28aky2tkrkJ+EG6HNYd3FSUE=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
ASSET_URL=
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=laravel
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=sync
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=smtp.gmail.com
|
||||
MAIL_PORT=587
|
||||
MAIL_USERNAME=lfigustina@gmail.com
|
||||
MAIL_PASSWORD="vczn bdqr mypn dnmc"
|
||||
MAIL_ENCRYPTION=ssl
|
||||
MAIL_FROM_ADDRESS="lfigustina@gmail.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
PUSHER_APP_ID=
|
||||
PUSHER_APP_KEY=
|
||||
PUSHER_APP_SECRET=
|
||||
PUSHER_APP_CLUSTER=mt1
|
||||
|
||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
|
@ -0,0 +1,53 @@
|
|||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
ASSET_URL=
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=laravel
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=sync
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=mailhog
|
||||
MAIL_PORT=1025
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
PUSHER_APP_ID=
|
||||
PUSHER_APP_KEY=
|
||||
PUSHER_APP_SECRET=
|
||||
PUSHER_APP_CLUSTER=mt1
|
||||
|
||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
|
@ -0,0 +1,10 @@
|
|||
* text=auto
|
||||
|
||||
*.blade.php diff=html
|
||||
*.css diff=css
|
||||
*.html diff=html
|
||||
*.md diff=markdown
|
||||
*.php diff=php
|
||||
|
||||
/.github export-ignore
|
||||
CHANGELOG.md export-ignore
|
|
@ -0,0 +1,24 @@
|
|||
/node_modules
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/vendor
|
||||
.env.backup
|
||||
.phpunit.result.cache
|
||||
docker-compose.override.yml
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
/.idea
|
||||
/.vscode
|
||||
/public/css
|
||||
/public/js
|
||||
/public/mix-manifest.json
|
||||
# But not these files...
|
||||
!/public/assets/*
|
||||
/public/assets/js
|
||||
/public/assets/css
|
||||
/public/assets/vendor
|
||||
/public/images/*
|
||||
/public/file/*
|
|
@ -0,0 +1,13 @@
|
|||
php:
|
||||
preset: laravel
|
||||
version: 8
|
||||
disabled:
|
||||
- no_unused_imports
|
||||
finder:
|
||||
not-name:
|
||||
- index.php
|
||||
js:
|
||||
finder:
|
||||
not-name:
|
||||
- webpack.mix.js
|
||||
css: true
|
|
@ -0,0 +1,64 @@
|
|||
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400"></a></p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://travis-ci.org/laravel/framework"><img src="https://travis-ci.org/laravel/framework.svg" alt="Build Status"></a>
|
||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
|
||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
|
||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
|
||||
</p>
|
||||
|
||||
## About Laravel
|
||||
|
||||
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
|
||||
|
||||
- [Simple, fast routing engine](https://laravel.com/docs/routing).
|
||||
- [Powerful dependency injection container](https://laravel.com/docs/container).
|
||||
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
|
||||
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
|
||||
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
|
||||
- [Robust background job processing](https://laravel.com/docs/queues).
|
||||
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
|
||||
|
||||
Laravel is accessible, powerful, and provides tools required for large, robust applications.
|
||||
|
||||
## Learning Laravel
|
||||
|
||||
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
|
||||
|
||||
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
|
||||
|
||||
## Laravel Sponsors
|
||||
|
||||
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell).
|
||||
|
||||
### Premium Partners
|
||||
|
||||
- **[Vehikl](https://vehikl.com/)**
|
||||
- **[Tighten Co.](https://tighten.co)**
|
||||
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
|
||||
- **[64 Robots](https://64robots.com)**
|
||||
- **[Cubet Techno Labs](https://cubettech.com)**
|
||||
- **[Cyber-Duck](https://cyber-duck.co.uk)**
|
||||
- **[Many](https://www.many.co.uk)**
|
||||
- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)**
|
||||
- **[DevSquad](https://devsquad.com)**
|
||||
- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
|
||||
- **[OP.GG](https://op.gg)**
|
||||
- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)**
|
||||
- **[Lendio](https://lendio.com)**
|
||||
|
||||
## Contributing
|
||||
|
||||
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
|
||||
|
||||
## Security Vulnerabilities
|
||||
|
||||
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
|
||||
|
||||
## License
|
||||
|
||||
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console;
|
||||
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||
|
||||
class Kernel extends ConsoleKernel
|
||||
{
|
||||
/**
|
||||
* Define the application's command schedule.
|
||||
*
|
||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||
* @return void
|
||||
*/
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
// $schedule->command('inspire')->hourly();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the commands for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function commands()
|
||||
{
|
||||
$this->load(__DIR__.'/Commands');
|
||||
|
||||
require base_path('routes/console.php');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
namespace App\Exceptions;
|
||||
|
||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||
use Throwable;
|
||||
|
||||
class Handler extends ExceptionHandler
|
||||
{
|
||||
/**
|
||||
* A list of the exception types that are not reported.
|
||||
*
|
||||
* @var array<int, class-string<Throwable>>
|
||||
*/
|
||||
protected $dontReport = [
|
||||
//
|
||||
];
|
||||
|
||||
/**
|
||||
* A list of the inputs that are never flashed for validation exceptions.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $dontFlash = [
|
||||
'current_password',
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
|
||||
/**
|
||||
* Register the exception handling callbacks for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->reportable(function (Throwable $e) {
|
||||
//
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Exports;
|
||||
|
||||
use App\Models\Jadwal;
|
||||
use Maatwebsite\Excel\Concerns\FromCollection;
|
||||
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||
|
||||
class JadwalExport implements FromCollection, WithHeadings
|
||||
{
|
||||
/**
|
||||
* @return \Illuminate\Support\Collection
|
||||
*/
|
||||
public function collection()
|
||||
{
|
||||
return Jadwal::join("tutor", "tutor.id", "=", "jadwal.tutor_id")->get(["tutor.id", "tutor.nama", "jadwal.kelas", "jadwal.hari", "jadwal.jam"]);
|
||||
}
|
||||
|
||||
public function headings(): array
|
||||
{
|
||||
return [
|
||||
'#',
|
||||
'TUTOR',
|
||||
'KELAS',
|
||||
'HARI',
|
||||
'JAM'
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
namespace App\Exports;
|
||||
|
||||
use App\Models\KartuKendali;
|
||||
use Maatwebsite\Excel\Concerns\FromCollection;
|
||||
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||
|
||||
class KartuKendaliExport implements FromCollection, WithHeadings
|
||||
{
|
||||
/**
|
||||
* @return \Illuminate\Support\Collection
|
||||
*/
|
||||
public function collection()
|
||||
{
|
||||
$kartukendali = KartuKendali::join("siswa", "siswa.user_id", "=", "kartukendali.user_id")->get(["siswa.user_id", "siswa.nama", "kartukendali.jumlah"]);
|
||||
for ($i = 0; $i < count($kartukendali); $i++) {
|
||||
$kartukendali[$i]["keterangan"] = $kartukendali[$i]["jumlah"] >= 40 ? "TUNTAS" : "BELUM TUNTAS";
|
||||
}
|
||||
|
||||
return $kartukendali;
|
||||
}
|
||||
|
||||
public function headings(): array
|
||||
{
|
||||
return [
|
||||
'#',
|
||||
'NAMA',
|
||||
'HADIR',
|
||||
'KETERANGAN'
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace App\Exports;
|
||||
|
||||
use App\Models\Nilai;
|
||||
use Maatwebsite\Excel\Concerns\FromCollection;
|
||||
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||
|
||||
class NilaiExport implements FromCollection, WithHeadings
|
||||
{
|
||||
/**
|
||||
* @return \Illuminate\Support\Collection
|
||||
*/
|
||||
public function collection()
|
||||
{
|
||||
$nilai = Nilai::join("siswa", "siswa.user_id", "=", "nilai.user_id")->get(["nilai.id", "siswa.nama", "nilai.writing", "nilai.reading", "nilai.listening", "nilai.speaking"]);
|
||||
for ($i = 0; $i < count($nilai); $i++) {
|
||||
$nilai[$i]["ratarata"] = ($nilai[$i]["reading"] + $nilai[$i]["writing"] + $nilai[$i]["speaking"] + $nilai[$i]["listening"]) / 4;
|
||||
}
|
||||
|
||||
return $nilai;
|
||||
}
|
||||
|
||||
public function headings(): array
|
||||
{
|
||||
return [
|
||||
'#',
|
||||
'NAMA',
|
||||
'WRITING',
|
||||
'READING',
|
||||
'LISTENING',
|
||||
'SPEAKING',
|
||||
"RATARATA"
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace App\Exports;
|
||||
|
||||
use App\Models\Siswa;
|
||||
use Maatwebsite\Excel\Concerns\FromCollection;
|
||||
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||
|
||||
class StudentExport implements FromCollection, WithHeadings
|
||||
{
|
||||
/**
|
||||
* @return \Illuminate\Support\Collection
|
||||
*/
|
||||
public function collection()
|
||||
{
|
||||
return Siswa::join("users", "users.id", "=", "siswa.user_id")->get(["siswa.id", "siswa.nama", "siswa.nik", "siswa.tgl_lahir", "siswa.jenkel", "siswa.agama", "siswa.jenjang", "siswa.alamat", "siswa.nama_ortu", "siswa.no_telp", "siswa.kerja_ortu", "siswa.level"]);
|
||||
}
|
||||
|
||||
public function headings(): array
|
||||
{
|
||||
return [
|
||||
'#',
|
||||
'NAMA',
|
||||
'NIK',
|
||||
'TANGGAL LAHIR',
|
||||
'JENIS KELAMIN',
|
||||
'AGAMA',
|
||||
'JENJANG',
|
||||
'ALAMAT',
|
||||
'NAMA ORTU',
|
||||
'NO. HP',
|
||||
'PEKERJAAN ORTU',
|
||||
'KELAS'
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Exports;
|
||||
|
||||
use App\Models\Tutor;
|
||||
use Maatwebsite\Excel\Concerns\FromCollection;
|
||||
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||
|
||||
class TutorExport implements FromCollection, WithHeadings
|
||||
{
|
||||
/**
|
||||
* @return \Illuminate\Support\Collection
|
||||
*/
|
||||
public function collection()
|
||||
{
|
||||
return Tutor::all();
|
||||
}
|
||||
|
||||
public function headings(): array
|
||||
{
|
||||
return [
|
||||
'#',
|
||||
'NAMA',
|
||||
'NIK',
|
||||
'ALAMAT',
|
||||
'FOTO'
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Classification;
|
||||
use App\Models\Siswa;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$user = Auth::user();
|
||||
if (isset($user->role)) {
|
||||
if ($user->role == "Siswa") {
|
||||
$siswa = Siswa::where("user_id", "=", $user->id)->first();
|
||||
if ($siswa) {
|
||||
$user->biodata = $siswa;
|
||||
}
|
||||
|
||||
$userClass = Classification::where("user_id", "=", $user->id)->first();
|
||||
if ($userClass) {
|
||||
$user->kelas = $userClass->hasil_kelas;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
view()->share("user", $user);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Foundation\Auth\RedirectsUsers;
|
||||
use Illuminate\Foundation\Auth\VerifiesEmails;
|
||||
use Illuminate\Foundation\Auth\EmailVerificationRequest;
|
||||
|
||||
class VerificationController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Email Verification Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling email verification for any
|
||||
| user that recently registered with the application. Emails may also
|
||||
| be re-sent if the user didn't receive the original email message.
|
||||
|
|
||||
*/
|
||||
|
||||
use VerifiesEmails, RedirectsUsers;
|
||||
|
||||
/**
|
||||
* Where to redirect users after verification.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/dashboard';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
$this->middleware('signed')->only('verify');
|
||||
$this->middleware('throttle:6,1')->only('verify', 'resend');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the email verification notice.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
|
||||
*/
|
||||
public function show(Request $request)
|
||||
{
|
||||
return $request->user()->hasVerifiedEmail()
|
||||
? redirect($this->redirectPath())
|
||||
: view('verification.notice', [
|
||||
'pageTitle' => __('Account Verification')
|
||||
]);
|
||||
}
|
||||
|
||||
public function verify(EmailVerificationRequest $request)
|
||||
{
|
||||
$request->fulfill();
|
||||
return redirect('/dashboard');
|
||||
}
|
||||
|
||||
public function resend(Request $request)
|
||||
{
|
||||
$request->user()->sendEmailVerificationNotification();
|
||||
|
||||
return redirect()->back()->with(['message' => 'Verification link sent!']);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\accounts;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\User;
|
||||
use App\Notifications\UserNotification;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
|
||||
class AccountController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.accounts.profil');
|
||||
}
|
||||
|
||||
public function changeStatus(Request $request, $userId)
|
||||
{
|
||||
$user = User::find($userId);
|
||||
$user["active"] = !$user["active"];
|
||||
$user->fill($user->toArray())->save();
|
||||
|
||||
Notification::send($user, new UserNotification("Status Dirubah", "Admin telah merubah status akunmu!", "/dashboard"));
|
||||
return redirect()->route("student")->with("success", "Data Berhasil Diperbarui!");
|
||||
}
|
||||
|
||||
public function disable()
|
||||
{
|
||||
return view('content.accounts.disable');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\authentications;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class ForgotPasswordBasic extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.authentications.auth-forgot-password-basic');
|
||||
}
|
||||
|
||||
public function sendResetLink(Request $request)
|
||||
{
|
||||
$request->validate(['email' => 'required|email']);
|
||||
|
||||
$status = Password::sendResetLink(
|
||||
$request->only('email')
|
||||
);
|
||||
|
||||
return $status === Password::RESET_LINK_SENT
|
||||
? back()->with(['status' => __($status)])
|
||||
: back()->withErrors(['email' => __($status)]);
|
||||
}
|
||||
|
||||
public function resetPassword(Request $request, string $token)
|
||||
{
|
||||
if (!isset($request->password)) {
|
||||
$email = $request->email;
|
||||
return view("content.authentications.auth-set-new-password", compact("token", "email"));
|
||||
}
|
||||
|
||||
$request['token'] = $token;
|
||||
|
||||
$request->validate([
|
||||
'token' => 'required',
|
||||
'email' => 'required|email',
|
||||
'password' => 'required|min:1|confirmed',
|
||||
]);
|
||||
|
||||
$status = Password::reset(
|
||||
$request->only('email', 'password', 'password_confirmation', 'token'),
|
||||
function (User $user, string $password) {
|
||||
$user->forceFill([
|
||||
'password' => Hash::make($password)
|
||||
]);
|
||||
|
||||
$user->save();
|
||||
}
|
||||
);
|
||||
|
||||
return $status != ""
|
||||
? redirect()->route("auth-login-basic")->with(['status' => __($status)])
|
||||
: back()->withErrors(['email' => [__($status)]]);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\authentications;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class LoginBasic extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.authentications.auth-login-basic');
|
||||
}
|
||||
|
||||
public function login(Request $request)
|
||||
{
|
||||
$credentials = $request->only('username', 'password');
|
||||
|
||||
if (Auth::attempt($credentials)) {
|
||||
$request->session()->regenerate();
|
||||
return redirect()->to('/dashboard');
|
||||
} else {
|
||||
return redirect()->route("auth-login-basic")->withErrors([
|
||||
"message" => "Username/Password incorrect!"
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function logout(Request $request)
|
||||
{
|
||||
Auth::logout();
|
||||
$request->session()->regenerate();
|
||||
return redirect()->to("/");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\authentications;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\User;
|
||||
use App\Models\Siswa;
|
||||
use App\Notifications\UserNotification;
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Exception;
|
||||
|
||||
class RegisterBasic extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.authentications.auth-register-basic');
|
||||
}
|
||||
|
||||
public function biodata()
|
||||
{
|
||||
return view("content.authentications.auth-register-biodata-basic");
|
||||
}
|
||||
|
||||
public function register(Request $request)
|
||||
{
|
||||
if ($request->password != $request->confirm_password) {
|
||||
return redirect()->route("auth-register-basic")->withErrors([
|
||||
"message" => "Password not match!"
|
||||
]);
|
||||
}
|
||||
|
||||
try {
|
||||
DB::transaction(function () use ($request) {
|
||||
$newUser = User::create([
|
||||
"email" => $request->email,
|
||||
"username" => $request->username,
|
||||
"password" => bcrypt($request->password),
|
||||
"role" => "Siswa",
|
||||
]);
|
||||
|
||||
Siswa::create([
|
||||
"nama" => $request->nama,
|
||||
"user_id" => $newUser->getKey(),
|
||||
]);
|
||||
|
||||
event(new Registered($newUser));
|
||||
});
|
||||
|
||||
$admin = User::where("role", "=", "Admin")->get();
|
||||
Notification::send($admin, new UserNotification("1 Siswa Mendaftar", $request->nama . " mendaftarkan diri sebagai siswa baru!", "/tables/student"));
|
||||
|
||||
$credentials = [
|
||||
"username" => $request->username,
|
||||
"password" => $request->password
|
||||
];
|
||||
if (Auth::attempt($credentials)) {
|
||||
$request->session()->regenerate();
|
||||
}
|
||||
return redirect()->route("auth-login-basic")->with(['status' => "Email verifikasi telah dikirimkan!"]);
|
||||
} catch (Exception $e) {
|
||||
return redirect()->back()->withErrors(['error' => $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\cards;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CardBasic extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.cards.cards-basic');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\dashboard;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Tutor;
|
||||
use App\Models\Siswa;
|
||||
use App\Models\User;
|
||||
use App\Models\Classification;
|
||||
|
||||
class Analytics extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$siswa = Siswa::all();
|
||||
$tutor = Tutor::all();
|
||||
$classification = Classification::join("siswa", "siswa.user_id", "=", "classification.user_id")->get();
|
||||
$users = User::where("role", "=", "Siswa")->get();
|
||||
return view('content.dashboard.dashboards-analytics', compact('siswa', 'tutor', 'users', 'classification'));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\extended_ui;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PerfectScrollbar extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.extended-ui.extended-ui-perfect-scrollbar');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\extended_ui;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TextDivider extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.extended-ui.extended-ui-text-divider');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\form_elements;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class BasicInput extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.form-elements.forms-basic-inputs');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\form_elements;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class InputGroups extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.form-elements.forms-input-groups');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\form_layouts;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class HorizontalForm extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.form-layout.form-layouts-horizontal');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\form_layouts;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class VerticalForm extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.form-layout.form-layouts-vertical');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\form_validation;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Validation extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.form-validation.form-validation');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\front_page;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Tutor;
|
||||
|
||||
class Landing extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$tutor = Tutor::all();
|
||||
return view('content.front-page.landing', compact("tutor"));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\icons;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Boxicons extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.icons.icons-boxicons');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\layouts;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Blank extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.layouts-example.layouts-blank');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\layouts;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Container extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.layouts-example.layouts-container');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\layouts;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Fluid extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.layouts-example.layouts-fluid');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\layouts;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class WithoutMenu extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
|
||||
return view('content.layouts-example.layouts-without-menu');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\layouts;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class WithoutNavbar extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.layouts-example.layouts-without-navbar');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\notifications;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class NotificationController extends Controller
|
||||
{
|
||||
public function proceed(Request $request, $notificationId)
|
||||
{
|
||||
$user = Auth::user();
|
||||
$notifications = $user->notifications;
|
||||
|
||||
foreach ($notifications as $notification) {
|
||||
if ($notification->id == $notificationId) {
|
||||
$notification->delete();
|
||||
return redirect()->to($notification->data["referral"]);
|
||||
}
|
||||
}
|
||||
|
||||
return back();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\pages;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class MiscError extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.pages.pages-misc-error');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\pages;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class MiscUnderMaintenance extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.pages.pages-misc-under-maintenance');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\tables;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Basic extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.tables.tables-basic');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\tables;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Classification;
|
||||
use App\Models\Siswa;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ClassificationController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$classification = Classification::join("siswa", "siswa.user_id", "=", "classification.user_id")->get();
|
||||
return view('content.classification.index', compact('classification'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$siswa = Siswa::all();
|
||||
return view('content.classification.create', compact('siswa'));
|
||||
}
|
||||
|
||||
public function edit(Request $request, $classificationId)
|
||||
{
|
||||
$classification = Classification::join("siswa", "siswa.user_id", "=", "classification.user_id")->where("classification.id", "=", $classificationId)->first();
|
||||
return view('content.classification.edit', compact('classification'));
|
||||
}
|
||||
|
||||
public function insert(Request $request)
|
||||
{
|
||||
Classification::create([
|
||||
"user_id" => $request->id,
|
||||
"nilai" => $request->nilai,
|
||||
"hasil_kelas" => $request->hasil_kelas,
|
||||
]);
|
||||
|
||||
return redirect()->route("classification")->with("success", "Data Berhasil Disimpan!");
|
||||
}
|
||||
public function update(Request $request, $classificationId)
|
||||
{
|
||||
$classification = Classification::find($classificationId);
|
||||
$classification->update([
|
||||
"nilai" => $request->nilai,
|
||||
"hasil_kelas" => $request->hasil_kelas,
|
||||
]);
|
||||
|
||||
return redirect()->route("classification")->with("success", "Data Berhasil Diperbarui!");
|
||||
}
|
||||
|
||||
public function destroy(Request $request, $classificationId)
|
||||
{
|
||||
$id = $classificationId;
|
||||
$classification = Classification::find($id);
|
||||
|
||||
$classification->delete();
|
||||
|
||||
return redirect()->route("classification")->with("success", "Data Berhasil Dihapus!");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\tables;
|
||||
|
||||
use App\Exports\JadwalExport;
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Jadwal;
|
||||
use App\Models\Tutor;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class JadwalController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$user = Auth::user();
|
||||
$jadwal = Jadwal::join("tutor", "tutor.id", "=", "jadwal.tutor_id");
|
||||
if ($user->role != "Admin") {
|
||||
$jadwal = $jadwal->where("kelas", "=", $user->kelas);
|
||||
}
|
||||
|
||||
$jadwal = $jadwal->get(["tutor.*", "jadwal.*", "jadwal.id as jadwal_id"]);
|
||||
return view('content.jadwal.index', compact('jadwal'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$tutor = Tutor::all();
|
||||
return view('content.jadwal.create', compact('tutor'));
|
||||
}
|
||||
|
||||
public function edit(Request $request, $jadwalId)
|
||||
{
|
||||
$tutor = Tutor::all();
|
||||
$jadwal = Jadwal::join("tutor", "tutor.id", "=", "jadwal.tutor_id")->where("jadwal.id", "=", $jadwalId)->first(["tutor.*", "jadwal.*", "jadwal.id as jadwal_id"]);
|
||||
return view('content.jadwal.edit', compact('jadwal', 'tutor'));
|
||||
}
|
||||
|
||||
public function insert(Request $request)
|
||||
{
|
||||
Jadwal::create([
|
||||
"tutor_id" => $request->tutor,
|
||||
"kelas" => $request->kelas,
|
||||
"hari" => $request->hari,
|
||||
"jam" => $request->jam,
|
||||
]);
|
||||
|
||||
return redirect()->route("jadwal")->with("success", "Data Berhasil Disimpan!");
|
||||
}
|
||||
public function update(Request $request, $jadwalId)
|
||||
{
|
||||
$jadwal = Jadwal::find($jadwalId);
|
||||
$jadwal->fill($request->input())->save();
|
||||
|
||||
return redirect()->route("jadwal")->with("success", "Data Berhasil Diperbarui!");
|
||||
}
|
||||
|
||||
public function destroy(Request $request, $jadwalId)
|
||||
{
|
||||
$id = $jadwalId;
|
||||
$jadwal = Jadwal::find($id);
|
||||
|
||||
$jadwal->delete();
|
||||
|
||||
return redirect()->route("jadwal")->with("success", "Data Berhasil Dihapus!");
|
||||
}
|
||||
|
||||
public function export(Request $request)
|
||||
{
|
||||
switch ($request->output) {
|
||||
case "pdf":
|
||||
$jadwal = Jadwal::join("tutor", "tutor.id", "=", "jadwal.tutor_id")->get();
|
||||
$pdf = Pdf::loadView('content.jadwal.export-pdf', ['jadwal' => $jadwal]);
|
||||
$pdf->setPaper('A4', 'portrait');
|
||||
return $pdf->download('data-jadwal.pdf');
|
||||
default:
|
||||
return Excel::download(new JadwalExport, 'jadwal.xlsx');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\tables;
|
||||
|
||||
use App\Exports\KartuKendaliExport;
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\KartuKendali;
|
||||
use App\Models\Siswa;
|
||||
use App\Models\User;
|
||||
use App\Notifications\UserNotification;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
|
||||
class KartuKendaliController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$user = Auth::user();
|
||||
if ($user->role == "Admin") {
|
||||
$kartukendali = KartuKendali::join("siswa", "siswa.user_id", "=", "kartukendali.user_id")->get(["siswa.*", "kartukendali.*", "kartukendali.id as kkid"]);
|
||||
} else {
|
||||
$kartukendali = KartuKendali::join("siswa", "siswa.user_id", "=", "kartukendali.user_id")->where("kartukendali.user_id", "=", $user->id)->get(["siswa.*", "kartukendali.*", "kartukendali.id as kkid"]);
|
||||
}
|
||||
|
||||
return view('content.kartukendali.index', compact('kartukendali'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$siswa = Siswa::join("users", "users.id", "=", "siswa.user_id")->where("users.active", "=", 1)->get();
|
||||
return view('content.kartukendali.create', compact('siswa'));
|
||||
}
|
||||
|
||||
public function insert(Request $request)
|
||||
{
|
||||
$year = date("Y");
|
||||
$month = date("F");
|
||||
$week = 0;
|
||||
for ($i = date('j'); $i > 0; $i -= 7) {
|
||||
$week += 1;
|
||||
}
|
||||
|
||||
$kk = KartuKendali::where("user_id", "=", $request->id)->first();
|
||||
|
||||
if ($kk) {
|
||||
$kk->update(["jumlah" => $kk->jumlah + 1]);
|
||||
} else {
|
||||
KartuKendali::create([
|
||||
"user_id" => $request->id,
|
||||
"jumlah" => 1,
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect()->route("kartukendali")->with("success", "Data Berhasil Disimpan!");
|
||||
}
|
||||
|
||||
public function add(Request $request, $kartukendaliId)
|
||||
{
|
||||
$kk = KartuKendali::where("id", "=", $kartukendaliId)->first();
|
||||
$kk->update(["jumlah" => $kk->jumlah += 1]);
|
||||
$siswa = User::find($kk->user_id);
|
||||
|
||||
if ($kk->jumlah >= 40) {
|
||||
Notification::send($siswa, new UserNotification("Akses Quiz Dibuka", "Akses untuk menyelesaikan quiz telah diberikan!", "/tables/quiz"));
|
||||
}
|
||||
|
||||
return redirect()->route("kartukendali")->with("success", "Data Berhasil Disimpan!");
|
||||
}
|
||||
|
||||
public function sub(Request $request, $kartukendaliId)
|
||||
{
|
||||
$kk = KartuKendali::where("id", "=", $kartukendaliId)->first();
|
||||
$kk->update(["jumlah" => $kk->jumlah -= 1]);
|
||||
return redirect()->route("kartukendali")->with("success", "Data Berhasil Disimpan!");
|
||||
}
|
||||
|
||||
public function destroy(Request $request, $kartukendaliId)
|
||||
{
|
||||
$id = $kartukendaliId;
|
||||
$kartukendali = KartuKendali::find($id);
|
||||
|
||||
$kartukendali->delete();
|
||||
|
||||
return redirect()->route("kartukendali")->with("success", "Data Berhasil Dihapus!");
|
||||
}
|
||||
|
||||
public function export(Request $request)
|
||||
{
|
||||
switch ($request->output) {
|
||||
case "pdf":
|
||||
$kartukendali = KartuKendali::join("siswa", "siswa.user_id", "=", "kartukendali.user_id")->get(["siswa.*", "kartukendali.*", "kartukendali.id as kkid"]);
|
||||
$pdf = Pdf::loadView('content.kartukendali.export-pdf', ['kartukendali' => $kartukendali]);
|
||||
$pdf->setPaper('A4', 'portrait');
|
||||
return $pdf->download('data-kartukendali.pdf');
|
||||
default:
|
||||
return Excel::download(new KartuKendaliExport, 'kartukendali.xlsx');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\tables;
|
||||
|
||||
use App\Exports\NilaiExport;
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Nilai;
|
||||
use App\Models\Siswa;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class NilaiController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$user = Auth::user();
|
||||
if ($user->role == "Siswa") {
|
||||
$nilai = Nilai::join("siswa", "siswa.user_id", "=", "nilai.user_id")->where("siswa.user_id", $user->id)->get();
|
||||
} else {
|
||||
$nilai = Nilai::join("siswa", "siswa.user_id", "=", "nilai.user_id")->get(["siswa.*", "nilai.*", "nilai.id as nilai_id"]);
|
||||
}
|
||||
return view('content.nilai.index', compact('nilai'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$siswa = Siswa::whereNotIn('user_id', function ($query) {
|
||||
$query->select('user_id')->from('nilai');
|
||||
})->get();
|
||||
|
||||
return view('content.nilai.create', compact('siswa'));
|
||||
}
|
||||
|
||||
public function edit(Request $request, $nilaiId)
|
||||
{
|
||||
$nilai = Nilai::join("siswa", "siswa.user_id", "=", "nilai.user_id")->where("nilai.id", $nilaiId)->first(["siswa.*", "nilai.*", "nilai.id as nilai_id"]);
|
||||
return view('content.nilai.edit', compact('nilai'));
|
||||
}
|
||||
|
||||
public function insert(Request $request)
|
||||
{
|
||||
Nilai::create([
|
||||
"user_id" => $request->id,
|
||||
"writing" => $request->writing,
|
||||
"reading" => $request->reading,
|
||||
"listening" => $request->listening,
|
||||
"speaking" => $request->speaking,
|
||||
]);
|
||||
|
||||
return redirect()->route("nilai")->with("success", "Data Berhasil Disimpan!");
|
||||
}
|
||||
public function update(Request $request, $nilaiId)
|
||||
{
|
||||
$nilai = Nilai::find($nilaiId);
|
||||
$nilai->fill($request->input())->save();
|
||||
|
||||
return redirect()->route("nilai")->with("success", "Data Berhasil Diperbarui!");
|
||||
}
|
||||
|
||||
public function destroy(Request $request, $nilaiId)
|
||||
{
|
||||
$id = $nilaiId;
|
||||
$nilai = Nilai::find($id);
|
||||
|
||||
$nilai->delete();
|
||||
|
||||
return redirect()->route("nilai")->with("success", "Data Berhasil Dihapus!");
|
||||
}
|
||||
|
||||
public function export(Request $request)
|
||||
{
|
||||
switch ($request->output) {
|
||||
case "pdf":
|
||||
$nilai = Nilai::join("siswa", "siswa.user_id", "=", "nilai.user_id")->get();
|
||||
$pdf = Pdf::loadView('content.nilai.export-pdf', ['nilai' => $nilai]);
|
||||
$pdf->setPaper('A4', 'portrait');
|
||||
return $pdf->download('data-nilai.pdf');
|
||||
default:
|
||||
return Excel::download(new NilaiExport, 'nilai.xlsx');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,213 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\tables;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Placement;
|
||||
use App\Models\Classification;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\Siswa;
|
||||
use App\Models\Sertifikat;
|
||||
use App\Models\Nilai;
|
||||
use App\Imports\PlacementImport;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
|
||||
class PlacementController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$placement = Placement::all();
|
||||
return view('content.placement.index', compact('placement'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('content.placement.create');
|
||||
}
|
||||
|
||||
public function edit(Request $request, $placementId)
|
||||
{
|
||||
$placement = Placement::find($placementId);
|
||||
return view('content.placement.edit', compact('placement'));
|
||||
}
|
||||
|
||||
public function calculate(Request $request)
|
||||
{
|
||||
$scorePerItem = intval(100 / count($request->data));
|
||||
$user = Auth::user();
|
||||
$siswa = Siswa::where("user_id", $user->id)->get();
|
||||
|
||||
// Fungsi untuk menghitung jarak Euclidean antara dua vektor
|
||||
function euclideanDistance($vector1, $vector2)
|
||||
{
|
||||
$sum = 0;
|
||||
for ($i = 0; $i < count($vector1); $i++) {
|
||||
$sum += pow($vector1[$i] - $vector2[$i], 2);
|
||||
}
|
||||
return sqrt($sum);
|
||||
}
|
||||
|
||||
// Fungsi untuk mencari tetangga terdekat
|
||||
function findNeighbors($X_train, $y_train, $new_sample, $k)
|
||||
{
|
||||
$distances = [];
|
||||
foreach ($X_train as $index => $sample) {
|
||||
$dist = euclideanDistance($sample, $new_sample);
|
||||
$distances[] = [$dist, $y_train[$index]];
|
||||
}
|
||||
usort($distances, function ($a, $b) {
|
||||
return $a[0] - $b[0];
|
||||
});
|
||||
return array_slice($distances, 0, $k);
|
||||
}
|
||||
|
||||
// Fungsi untuk memprediksi kelas dari sampel baru
|
||||
function predictClass($X_train, $y_train, $new_sample, $k)
|
||||
{
|
||||
$neighbors = findNeighbors($X_train, $y_train, $new_sample, $k);
|
||||
$counts = [];
|
||||
foreach ($neighbors as $neighbor) {
|
||||
$label = $neighbor[1];
|
||||
$counts[$label] = isset($counts[$label]) ? $counts[$label] + 1 : 1;
|
||||
}
|
||||
arsort($counts);
|
||||
$predictedClass = key($counts);
|
||||
return $predictedClass;
|
||||
}
|
||||
|
||||
// Data training
|
||||
// SD -> 1
|
||||
// SMP -> 2
|
||||
// SMA -> 3
|
||||
// [BOBOT TINGKAT, BOBOT NILAI]
|
||||
$X_train = [
|
||||
[3, 82],
|
||||
[1, 86],
|
||||
[1, 70],
|
||||
[2, 88],
|
||||
[1, 94],
|
||||
[2, 78],
|
||||
[2, 94],
|
||||
[1, 76],
|
||||
[3, 90],
|
||||
[1, 72],
|
||||
[1, 88],
|
||||
[3, 80]
|
||||
|
||||
];
|
||||
|
||||
$y_train = ['Beginner', 'Beginner', 'Pre-Kids', 'Intermediate', 'Beginner', 'Beginner', 'Intermediate', 'Pre-Kids', 'Intermediate', 'Pre-Kids', 'Beginner', 'Beginner'];
|
||||
|
||||
$X_test = [];
|
||||
$score = 0;
|
||||
foreach ($request->data as $data) {
|
||||
if ($data["jawaban_benar"] == $data["input_jawaban"]) {
|
||||
$score = $score + $scorePerItem;
|
||||
}
|
||||
}
|
||||
|
||||
switch ($siswa[0]["jenjang"]) {
|
||||
case "SD":
|
||||
case "MI":
|
||||
array_push($X_test, 1);
|
||||
break;
|
||||
case "SMP":
|
||||
case "MTS":
|
||||
array_push($X_test, 2);
|
||||
break;
|
||||
case "SMA":
|
||||
case "SMK":
|
||||
array_push($X_test, 3);
|
||||
break;
|
||||
case "Kuliah":
|
||||
case "Umum":
|
||||
array_push($X_test, 4);
|
||||
break;
|
||||
default:
|
||||
array_push($X_test, 0);
|
||||
}
|
||||
|
||||
array_push($X_test, $score);
|
||||
|
||||
// Jumlah tetangga terdekat yang akan digunakan
|
||||
$k = 3;
|
||||
|
||||
// Lakukan prediksi kelas untuk data uji
|
||||
$predictedClass = predictClass($X_train, $y_train, $X_test, $k);
|
||||
|
||||
// Gate
|
||||
if ($X_test <= 1) {
|
||||
$predictedClass = "Pre-Kids";
|
||||
} else {
|
||||
if ($predictedClass == "Pre-Kids") {
|
||||
$predictedClass = "Beginner";
|
||||
}
|
||||
}
|
||||
|
||||
DB::transaction(function () use ($request, $score, $predictedClass) {
|
||||
Classification::create([
|
||||
"user_id" => json_decode($request->user)->id,
|
||||
"nilai" => $score,
|
||||
"hasil_kelas" => $predictedClass,
|
||||
]);
|
||||
|
||||
Sertifikat::create([
|
||||
"user_id" => json_decode($request->user)->id,
|
||||
]);
|
||||
|
||||
Nilai::create([
|
||||
"user_id" => json_decode($request->user)->id,
|
||||
"writing" => 0,
|
||||
"reading" => 0,
|
||||
"listening" => 0,
|
||||
"speaking" => 0
|
||||
]);
|
||||
|
||||
$siswa = Siswa::where("user_id", "=", json_decode($request->user)->id)->first();
|
||||
$siswa->update([
|
||||
"level" => $predictedClass
|
||||
]);
|
||||
$siswa->save();
|
||||
});
|
||||
|
||||
return $predictedClass;
|
||||
}
|
||||
|
||||
public function insert(Request $request)
|
||||
{
|
||||
if (isset($request->file)) {
|
||||
Placement::truncate();
|
||||
Excel::import(new PlacementImport, request()->file('file'));
|
||||
} else {
|
||||
Placement::create([
|
||||
"soal" => $request->soal,
|
||||
"jawaban" => $request->jawaban,
|
||||
"jawaban_benar" => $request->jawaban_benar,
|
||||
]);
|
||||
}
|
||||
return redirect()->route("placement")->with("success", "Data Berhasil Disimpan!");
|
||||
}
|
||||
public function update(Request $request, $placementId)
|
||||
{
|
||||
$placement = Placement::find($placementId);
|
||||
$placement->update([
|
||||
"soal" => $request->soal,
|
||||
"jawaban" => $request->jawaban,
|
||||
"jawaban_benar" => $request->jawaban_benar,
|
||||
]);
|
||||
|
||||
return redirect()->route("placement")->with("success", "Data Berhasil Diperbarui!");
|
||||
}
|
||||
|
||||
public function destroy(Request $request, $placementId)
|
||||
{
|
||||
$id = $placementId;
|
||||
$placement = Placement::find($id);
|
||||
|
||||
$placement->delete();
|
||||
|
||||
return redirect()->route("placement")->with("success", "Data Berhasil Dihapus!");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\tables;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Quiz;
|
||||
use App\Models\Nilai;
|
||||
use App\Models\KartuKendali;
|
||||
use App\Imports\QuizImport;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class QuizController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$user = Auth::user();
|
||||
$nilai = "";
|
||||
$kartuKendali = "";
|
||||
|
||||
if ($user->role == "Siswa") {
|
||||
$nilai = Nilai::where("user_id", "=", $user->id)->first();
|
||||
$quiz = Quiz::where("jenjang", "=", $user->kelas)->get();
|
||||
$kartuKendali = KartuKendali::where("user_id", "=", $user->id)->first();
|
||||
} else {
|
||||
$quiz = Quiz::all();
|
||||
}
|
||||
|
||||
return view('content.quiz.index', compact('quiz', 'nilai', 'kartuKendali'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('content.quiz.create');
|
||||
}
|
||||
|
||||
public function edit(Request $request, $quizId)
|
||||
{
|
||||
$quiz = quiz::find($quizId);
|
||||
return view('content.quiz.edit', compact('quiz'));
|
||||
}
|
||||
|
||||
public function insert(Request $request)
|
||||
{
|
||||
if (isset($request->file)) {
|
||||
Quiz::truncate();
|
||||
Excel::import(new QuizImport, request()->file('file'));
|
||||
} else {
|
||||
Quiz::create([
|
||||
"jenjang" => $request->jenjang,
|
||||
"jenis" => $request->jenis,
|
||||
"soal" => $request->soal,
|
||||
"jawaban" => $request->jawaban,
|
||||
"jawaban_benar" => $request->jawaban_benar,
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect()->route("quiz")->with("success", "Data Berhasil Disimpan!");
|
||||
}
|
||||
public function update(Request $request, $quizId)
|
||||
{
|
||||
$quiz = Quiz::find($quizId);
|
||||
$quiz->fill($request->input())->save();
|
||||
|
||||
return redirect()->route("quiz")->with("success", "Data Berhasil Diperbarui!");
|
||||
}
|
||||
|
||||
public function calculate(Request $request)
|
||||
{
|
||||
$quizType = strtolower($request->data[0]["jenis"]);
|
||||
$nilai = Nilai::where("user_id", "=", $request->user["id"])->first();
|
||||
$scorePerItem = intval(100 / count($request->data));
|
||||
$score = 0;
|
||||
|
||||
for ($i = 0; $i < count($request->data); $i++) {
|
||||
if ($request->data[$i]["jawaban_benar"] == $request->data[$i]["input_jawaban"]) {
|
||||
$score += $scorePerItem;
|
||||
}
|
||||
}
|
||||
|
||||
if ($score > 100) {
|
||||
$score = 100;
|
||||
}
|
||||
|
||||
$nilai->update([
|
||||
$quizType => $score
|
||||
]);
|
||||
|
||||
return $score;
|
||||
}
|
||||
|
||||
public function destroy(Request $request, $quizId)
|
||||
{
|
||||
$id = $quizId;
|
||||
$quiz = Quiz::find($id);
|
||||
|
||||
$quiz->delete();
|
||||
|
||||
return redirect()->route("quiz")->with("success", "Data Berhasil Dihapus!");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\tables;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Sertifikat;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class SertifikatController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
if ($user->role == "Siswa") {
|
||||
$sertifikat = Sertifikat::join("siswa", "siswa.user_id", "=", "sertifikat.user_id")->where("siswa.user_id", "=", $user->id)->get(["siswa.*", "sertifikat.*", "sertifikat.id as sid"]);
|
||||
} else {
|
||||
$sertifikat = Sertifikat::join("siswa", "siswa.user_id", "=", "sertifikat.user_id")->get(["siswa.*", "sertifikat.*", "sertifikat.id as sid"]);
|
||||
}
|
||||
return view('content.sertifikat.index', compact('sertifikat'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('content.sertifikat.create');
|
||||
}
|
||||
|
||||
public function edit(Request $request, $sertifikatId)
|
||||
{
|
||||
$sertifikat = Sertifikat::find($sertifikatId);
|
||||
return view('content.sertifikat.edit', compact('sertifikat'));
|
||||
}
|
||||
|
||||
public function update(Request $request, $sertifikatId)
|
||||
{
|
||||
$sertifikat = Sertifikat::find($sertifikatId);
|
||||
|
||||
if ($request->sertifikat) {
|
||||
$fileName = $sertifikat->user_id . ".pdf";
|
||||
$request->file("sertifikat")->move(public_path("file/sertifikat"), $fileName);
|
||||
|
||||
$request->merge(["sertifikat" => $fileName]);
|
||||
}
|
||||
|
||||
$sertifikat->fill($request->input())->save();
|
||||
|
||||
return redirect()->route("sertifikat")->with("success", "Data Berhasil Diperbarui!");
|
||||
}
|
||||
|
||||
public function destroy(Request $request, $sertifikatId)
|
||||
{
|
||||
$sertifikat = Sertifikat::find($sertifikatId);
|
||||
|
||||
$sertifikat->delete();
|
||||
try {
|
||||
unlink(public_path("file/sertifikat/") . $sertifikat->sertifikat);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
|
||||
return redirect()->route("sertifikat")->with("success", "Data Berhasil Dihapus!");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,113 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\tables;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\User;
|
||||
use App\Models\Siswa;
|
||||
use App\Exports\StudentExport;
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class StudentController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$siswa = Siswa::join("users", "users.id", "=", "siswa.user_id")->get(["users.*", "siswa.*", "siswa.id as sid"]);
|
||||
return view('content.student.index', compact('siswa'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('content.student.create');
|
||||
}
|
||||
|
||||
public function edit(Request $request, $studentId)
|
||||
{
|
||||
$siswa = Siswa::find($studentId);
|
||||
return view('content.student.edit', compact('siswa'));
|
||||
}
|
||||
|
||||
public function insert(Request $request)
|
||||
{
|
||||
$newUser = User::create([
|
||||
"username" => $request->nik,
|
||||
"password" => bcrypt(12345678),
|
||||
"role" => "Siswa",
|
||||
]);
|
||||
|
||||
Siswa::create([
|
||||
"nama" => $request->nama,
|
||||
"user_id" => $newUser->getKey(),
|
||||
"nik" => $request->nik,
|
||||
"tgl_lahir" => $request->tgl_lahir,
|
||||
"jenkel" => $request->jenkel,
|
||||
"agama" => $request->agama,
|
||||
"jenjang" => $request->jenjang,
|
||||
"alamat" => $request->alamat,
|
||||
"nama_ortu" => $request->nama_ortu,
|
||||
"no_telp" => $request->no_telp,
|
||||
"kerja_ortu" => $request->kerja_ortu,
|
||||
"level" => $request->level,
|
||||
]);
|
||||
|
||||
return redirect()->route("student")->with("success", "Data Berhasil Disimpan!");
|
||||
}
|
||||
public function update(Request $request, $studentId)
|
||||
{
|
||||
$siswa = Siswa::find($studentId);
|
||||
$siswa->fill($request->input())->save();
|
||||
|
||||
return redirect()->route("student")->with("success", "Data Berhasil Diperbarui!");
|
||||
}
|
||||
|
||||
public function changeStatus(Request $request, $studentId)
|
||||
{
|
||||
$siswa = Siswa::find($studentId);
|
||||
$siswa["aktif"] = !$siswa["aktif"];
|
||||
$siswa->fill($siswa->toArray())->save();
|
||||
|
||||
return redirect()->route("student")->with("success", "Data Berhasil Diperbarui!");
|
||||
}
|
||||
|
||||
public function editBiodata()
|
||||
{
|
||||
$user = Auth::user();
|
||||
$siswa = Siswa::where("user_id", "=", $user->id)->first();
|
||||
return view('content.student.edit-biodata', compact("siswa"));
|
||||
}
|
||||
|
||||
public function updateBiodata(Request $request)
|
||||
{
|
||||
$user = Auth::user();
|
||||
$siswa = Siswa::where("user_id", "=", $user->id)->first();
|
||||
$siswa->fill($request->input())->save();
|
||||
|
||||
return redirect()->to("/dashboard");
|
||||
}
|
||||
|
||||
public function destroy(Request $request, $studentId)
|
||||
{
|
||||
$id = $studentId;
|
||||
$siswa = Siswa::find($id);
|
||||
|
||||
$siswa->delete();
|
||||
|
||||
return redirect()->route("student")->with("success", "Data Berhasil Dihapus!");
|
||||
}
|
||||
|
||||
public function export(Request $request)
|
||||
{
|
||||
switch ($request->output) {
|
||||
case "pdf":
|
||||
$siswa = Siswa::join("users", "users.id", "=", "siswa.user_id")->get(["users.*", "siswa.*", "siswa.id as sid"]);
|
||||
$pdf = Pdf::loadView('content.student.export-pdf', ['siswa' => $siswa]);
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
return $pdf->download('data-siswa.pdf');
|
||||
default:
|
||||
return Excel::download(new StudentExport, 'siswa.xlsx');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\tables;
|
||||
|
||||
use App\Exports\TutorExport;
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Tutor;
|
||||
|
||||
class TutorController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$tutor = Tutor::all();
|
||||
return view('content.tutor.index', compact('tutor'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('content.tutor.create');
|
||||
}
|
||||
|
||||
public function edit(Request $request, $tutorId)
|
||||
{
|
||||
$tutor = Tutor::find($tutorId);
|
||||
return view('content.tutor.edit', compact('tutor'));
|
||||
}
|
||||
|
||||
public function insert(Request $request)
|
||||
{
|
||||
$imageName = $request->nama . ".jpg";
|
||||
$request->file("foto")->move(public_path("images/tutor"), $imageName);
|
||||
|
||||
Tutor::create([
|
||||
"nama" => $request->nama,
|
||||
"nik" => $request->nik,
|
||||
"alamat" => $request->alamat,
|
||||
"foto" => $imageName,
|
||||
]);
|
||||
|
||||
return redirect()->route("tutor")->with("success", "Data Berhasil Disimpan!");
|
||||
}
|
||||
public function update(Request $request, $tutorId)
|
||||
{
|
||||
$tutor = Tutor::find($tutorId);
|
||||
if ($request->foto) {
|
||||
$imageName = $request->nama . ".jpg";
|
||||
$request->file("foto")->move(public_path("images/tutor"), $imageName);
|
||||
|
||||
$request->merge(["foto" => $imageName]);
|
||||
}
|
||||
|
||||
$tutor->fill($request->input())->save();
|
||||
|
||||
return redirect()->route("tutor")->with("success", "Data Berhasil Diperbarui!");
|
||||
}
|
||||
|
||||
public function destroy(Request $request, $tutorId)
|
||||
{
|
||||
$id = $tutorId;
|
||||
$tutor = Tutor::find($id);
|
||||
|
||||
$tutor->delete();
|
||||
try {
|
||||
unlink(public_path("images/tutor/") . $tutor->foto);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
|
||||
return redirect()->route("tutor")->with("success", "Data Berhasil Dihapus!");
|
||||
}
|
||||
|
||||
public function export(Request $request)
|
||||
{
|
||||
switch ($request->output) {
|
||||
case "pdf":
|
||||
$tutor = Tutor::all();
|
||||
$pdf = Pdf::loadView('content.tutor.export-pdf', ['tutor' => $tutor]);
|
||||
$pdf->setPaper('A4', 'portrait');
|
||||
return $pdf->download('data-tutor.pdf');
|
||||
default:
|
||||
return Excel::download(new TutorExport, 'tutor.xlsx');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Accordion extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-accordion');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Alerts extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-alerts');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Badges extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-badges');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Buttons extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-buttons');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Carousel extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-carousel');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Collapse extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-collapse');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Dropdowns extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-dropdowns');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Footer extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-footer');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ListGroups extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-list-groups');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Modals extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-modals');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Navbar extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-navbar');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Offcanvas extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-offcanvas');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PaginationBreadcrumbs extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-pagination-breadcrumbs');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Progress extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-progress');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Spinners extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-spinners');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TabsPills extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-tabs-pills');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Toasts extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-toasts');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TooltipsPopovers extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-tooltips-popovers');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\user_interface;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Typography extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('content.user-interface.ui-typography');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http;
|
||||
|
||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||
|
||||
class Kernel extends HttpKernel
|
||||
{
|
||||
/**
|
||||
* The application's global HTTP middleware stack.
|
||||
*
|
||||
* These middleware are run during every request to your application.
|
||||
*
|
||||
* @var array<int, class-string|string>
|
||||
*/
|
||||
protected $middleware = [
|
||||
// \App\Http\Middleware\TrustHosts::class,
|
||||
\App\Http\Middleware\TrustProxies::class,
|
||||
\Fruitcake\Cors\HandleCors::class,
|
||||
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||
\App\Http\Middleware\TrimStrings::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware groups.
|
||||
*
|
||||
* @var array<string, array<int, class-string|string>>
|
||||
*/
|
||||
protected $middlewareGroups = [
|
||||
'web' => [
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
// \Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
\App\Http\Middleware\LocaleMiddleware::class,
|
||||
],
|
||||
|
||||
'api' => [
|
||||
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
|
||||
'throttle:api',
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware.
|
||||
*
|
||||
* These middleware may be assigned to groups or used individually.
|
||||
*
|
||||
* @var array<string, class-string|string>
|
||||
*/
|
||||
protected $routeMiddleware = [
|
||||
'auth' => \App\Http\Middleware\Authenticate::class,
|
||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
||||
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
||||
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
|
||||
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
|
||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
];
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
||||
|
||||
class Authenticate extends Middleware
|
||||
{
|
||||
/**
|
||||
* Get the path the user should be redirected to when they are not authenticated.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return string|null
|
||||
*/
|
||||
protected function redirectTo($request)
|
||||
{
|
||||
if (!$request->expectsJson()) {
|
||||
return route('auth-login-basic');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
||||
|
||||
class EncryptCookies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The names of the cookies that should not be encrypted.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class LocaleMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
// available language in template array
|
||||
$availLocale = ['en' => 'en', 'fr' => 'fr', 'de' => 'de', 'pt' => 'pt'];
|
||||
|
||||
// Locale is enabled and allowed to be change
|
||||
if (session()->has('locale') && array_key_exists(session()->get('locale'), $availLocale)) {
|
||||
// Set the Laravel locale
|
||||
app()->setLocale(session()->get('locale'));
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
|
||||
|
||||
class PreventRequestsDuringMaintenance extends Middleware
|
||||
{
|
||||
/**
|
||||
* The URIs that should be reachable while maintenance mode is enabled.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class RedirectIfAuthenticated
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @param string|null ...$guards
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next, ...$guards)
|
||||
{
|
||||
$guards = empty($guards) ? [null] : $guards;
|
||||
|
||||
foreach ($guards as $guard) {
|
||||
if (Auth::guard($guard)->check()) {
|
||||
return redirect(RouteServiceProvider::HOME);
|
||||
}
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
|
||||
|
||||
class TrimStrings extends Middleware
|
||||
{
|
||||
/**
|
||||
* The names of the attributes that should not be trimmed.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
'current_password',
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Http\Middleware\TrustHosts as Middleware;
|
||||
|
||||
class TrustHosts extends Middleware
|
||||
{
|
||||
/**
|
||||
* Get the host patterns that should be trusted.
|
||||
*
|
||||
* @return array<int, string|null>
|
||||
*/
|
||||
public function hosts()
|
||||
{
|
||||
return [
|
||||
$this->allSubdomainsOfApplicationUrl(),
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Http\Middleware\TrustProxies as Middleware;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TrustProxies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The trusted proxies for this application.
|
||||
*
|
||||
* @var array<int, string>|string|null
|
||||
*/
|
||||
protected $proxies;
|
||||
|
||||
/**
|
||||
* The headers that should be used to detect proxies.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $headers =
|
||||
Request::HEADER_X_FORWARDED_FOR |
|
||||
Request::HEADER_X_FORWARDED_HOST |
|
||||
Request::HEADER_X_FORWARDED_PORT |
|
||||
Request::HEADER_X_FORWARDED_PROTO |
|
||||
Request::HEADER_X_FORWARDED_AWS_ELB;
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||
|
||||
class VerifyCsrfToken extends Middleware
|
||||
{
|
||||
/**
|
||||
* The URIs that should be excluded from CSRF verification.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace App\Imports;
|
||||
|
||||
use App\Models\Placement;
|
||||
use Maatwebsite\Excel\Concerns\ToModel;
|
||||
use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
||||
use Maatwebsite\Excel\Concerns\WithGroupedHeadingRow;
|
||||
|
||||
class PlacementImport implements ToModel, WithHeadingRow, WithGroupedHeadingRow
|
||||
{
|
||||
/**
|
||||
* @param array $row
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Model|null
|
||||
*/
|
||||
public function model(array $row)
|
||||
{
|
||||
return new Placement([
|
||||
"soal" => $row["soal"],
|
||||
"jawaban" => join("|", $row["jawaban"]),
|
||||
"jawaban_benar" => $row["jawaban"][0]
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace App\Imports;
|
||||
|
||||
use App\Models\Quiz;
|
||||
use Maatwebsite\Excel\Concerns\ToModel;
|
||||
use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
||||
use Maatwebsite\Excel\Concerns\WithGroupedHeadingRow;
|
||||
|
||||
class QuizImport implements ToModel, WithHeadingRow, WithGroupedHeadingRow
|
||||
{
|
||||
/**
|
||||
* @param array $row
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Model|null
|
||||
*/
|
||||
public function model(array $row)
|
||||
{
|
||||
return new Quiz([
|
||||
"jenjang" => $row["jenjang"],
|
||||
"jenis" => $row["jenis"],
|
||||
"soal" => $row["soal"],
|
||||
"jawaban" => join("|", $row["jawaban"]),
|
||||
"jawaban_benar" => $row["jawaban"][0]
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class Classification extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $table = "classification";
|
||||
|
||||
protected $fillable = [
|
||||
'user_id',
|
||||
'nilai',
|
||||
'hasil_kelas',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'created_at'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class Jadwal extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $table = "jadwal";
|
||||
|
||||
protected $fillable = [
|
||||
'tutor_id',
|
||||
'kelas',
|
||||
'hari',
|
||||
'jam',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'created_at'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class KartuKendali extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $table = "kartukendali";
|
||||
|
||||
protected $fillable = [
|
||||
'user_id',
|
||||
'tahun',
|
||||
'bulan',
|
||||
'minggu',
|
||||
'jumlah',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'created_at'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class Nilai extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $table = "nilai";
|
||||
|
||||
protected $fillable = [
|
||||
'user_id',
|
||||
'writing',
|
||||
'reading',
|
||||
'listening',
|
||||
'speaking',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'created_at'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class Placement extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $table = "placement";
|
||||
|
||||
protected $fillable = [
|
||||
'soal',
|
||||
'jawaban',
|
||||
'jawaban_benar',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'created_at'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class Quiz extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $table = "quiz";
|
||||
|
||||
protected $fillable = [
|
||||
'jenjang',
|
||||
'jenis',
|
||||
'soal',
|
||||
'jawaban',
|
||||
'jawaban_benar',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'created_at'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class Sertifikat extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $table = "sertifikat";
|
||||
|
||||
protected $fillable = [
|
||||
'user_id',
|
||||
'sertifikat',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'created_at'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class Siswa extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $table = "siswa";
|
||||
|
||||
protected $fillable = [
|
||||
'user_id',
|
||||
'nama',
|
||||
'nik',
|
||||
'alamat',
|
||||
'tgl_lahir',
|
||||
'jenkel',
|
||||
'agama',
|
||||
'jenjang',
|
||||
'nama_ortu',
|
||||
'no_telp',
|
||||
'kerja_ortu',
|
||||
'level',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'created_at'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class Tutor extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $table = "tutor";
|
||||
|
||||
protected $fillable = [
|
||||
'nama',
|
||||
'nik',
|
||||
'alamat',
|
||||
'foto',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'created_at'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Auth\Passwords\CanResetPassword;
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class User extends Authenticatable implements MustVerifyEmail
|
||||
{
|
||||
use HasApiTokens, HasFactory, CanResetPassword, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
'email',
|
||||
'username',
|
||||
'password',
|
||||
'role',
|
||||
'active',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'created_at'
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
'email_verified_at' => 'datetime',
|
||||
];
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
|
||||
class UserNotification extends Notification
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
private $name = "";
|
||||
private $message = "";
|
||||
private $referral = "";
|
||||
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($name, $message, $referral)
|
||||
{
|
||||
$this->name = $name;
|
||||
$this->message = $message;
|
||||
$this->referral = $referral;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['database'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($notifiable)
|
||||
{
|
||||
return [
|
||||
"name" => $this->name,
|
||||
"message" => $this->message,
|
||||
"referral" => $this->referral
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
|
||||
class AuthServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* The policy mappings for the application.
|
||||
*
|
||||
* @var array<class-string, class-string>
|
||||
*/
|
||||
protected $policies = [
|
||||
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
|
||||
];
|
||||
|
||||
/**
|
||||
* Register any authentication / authorization services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->registerPolicies();
|
||||
|
||||
//
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Broadcast;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class BroadcastServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
Broadcast::routes();
|
||||
|
||||
require base_path('routes/channels.php');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
|
||||
class EventServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* The event listener mappings for the application.
|
||||
*
|
||||
* @var array<class-string, array<int, class-string>>
|
||||
*/
|
||||
protected $listen = [
|
||||
Registered::class => [
|
||||
SendEmailVerificationNotification::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* Register any events for your application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if events and listeners should be automatically discovered.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function shouldDiscoverEvents()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class MenuServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$verticalMenuJson = file_get_contents(base_path('resources/menu/verticalMenu.json'));
|
||||
$verticalMenuData = json_decode($verticalMenuJson);
|
||||
|
||||
// Share all menuData to all the views
|
||||
\View::share('menuData', [$verticalMenuData]);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Cache\RateLimiting\Limit;
|
||||
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
class RouteServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* The path to the "home" route for your application.
|
||||
*
|
||||
* This is used by Laravel authentication to redirect users after login.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public const HOME = '/home';
|
||||
|
||||
/**
|
||||
* Define your route model bindings, pattern filters, etc.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->configureRateLimiting();
|
||||
|
||||
$this->routes(function () {
|
||||
Route::prefix('api')
|
||||
->middleware('api')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/api.php'));
|
||||
|
||||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web.php'));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the rate limiters for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function configureRateLimiting()
|
||||
{
|
||||
RateLimiter::for('api', function (Request $request) {
|
||||
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register The Auto Loader
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Composer provides a convenient, automatically generated class loader
|
||||
| for our application. We just need to utilize it! We'll require it
|
||||
| into the script here so that we do not have to worry about the
|
||||
| loading of any of our classes manually. It's great to relax.
|
||||
|
|
||||
*/
|
||||
|
||||
require __DIR__.'/vendor/autoload.php';
|
||||
|
||||
$app = require_once __DIR__.'/bootstrap/app.php';
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Run The Artisan Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When we run the console application, the current CLI command will be
|
||||
| executed in this console and the response sent back to a terminal
|
||||
| or another output device for the developers. Here goes nothing!
|
||||
|
|
||||
*/
|
||||
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
|
||||
$status = $kernel->handle(
|
||||
$input = new Symfony\Component\Console\Input\ArgvInput,
|
||||
new Symfony\Component\Console\Output\ConsoleOutput
|
||||
);
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Shutdown The Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Once Artisan has finished running, we will fire off the shutdown events
|
||||
| so that any final work may be done by the application before we shut
|
||||
| down the process. This is the last thing to happen to the request.
|
||||
|
|
||||
*/
|
||||
|
||||
$kernel->terminate($input, $status);
|
||||
|
||||
exit($status);
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Create The Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The first thing we will do is create a new Laravel application instance
|
||||
| which serves as the "glue" for all the components of Laravel, and is
|
||||
| the IoC container for the system binding all of the various parts.
|
||||
|
|
||||
*/
|
||||
|
||||
$app = new Illuminate\Foundation\Application(
|
||||
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
|
||||
);
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Bind Important Interfaces
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Next, we need to bind some important interfaces into the container so
|
||||
| we will be able to resolve them when needed. The kernels serve the
|
||||
| incoming requests to this application from both the web and CLI.
|
||||
|
|
||||
*/
|
||||
|
||||
$app->singleton(
|
||||
Illuminate\Contracts\Http\Kernel::class,
|
||||
App\Http\Kernel::class
|
||||
);
|
||||
|
||||
$app->singleton(
|
||||
Illuminate\Contracts\Console\Kernel::class,
|
||||
App\Console\Kernel::class
|
||||
);
|
||||
|
||||
$app->singleton(
|
||||
Illuminate\Contracts\Debug\ExceptionHandler::class,
|
||||
App\Exceptions\Handler::class
|
||||
);
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Return The Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This script returns the application instance. The instance is given to
|
||||
| the calling script so we can separate the building of the instances
|
||||
| from the actual running of the application and sending responses.
|
||||
|
|
||||
*/
|
||||
|
||||
return $app;
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!.gitignore
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue