Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
40c2c8506c |
@ -1,66 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Apps;
|
||||
|
||||
use App\DataTables\PermissionsDataTable;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PermissionManagementController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(PermissionsDataTable $dataTable)
|
||||
{
|
||||
return $dataTable->render('pages/apps.user-management.permissions.list');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Apps;
|
||||
|
||||
use App\DataTables\UsersAssignedRoleDataTable;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class RoleManagementController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('pages/apps.user-management.roles.list');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(Role $role, UsersAssignedRoleDataTable $dataTable)
|
||||
{
|
||||
return $dataTable->with('role', $role)
|
||||
->render('pages/apps.user-management.roles.show', compact('role'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(Role $role)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, Role $role)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(Role $role)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Apps;
|
||||
|
||||
use App\DataTables\UsersDataTable;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class UserManagementController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(UsersDataTable $dataTable)
|
||||
{
|
||||
return $dataTable->render('pages/apps.user-management.users.list');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(User $user)
|
||||
{
|
||||
return view('pages/apps.user-management.users.show', compact('user'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(User $user)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, User $user)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(User $user)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Auth\LoginRequest;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class AuthenticatedSessionController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the login view.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
addJavascriptFile('assets/js/custom/authentication/sign-in/general.js');
|
||||
|
||||
return view('pages/auth.login');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming authentication request.
|
||||
*
|
||||
* @param \App\Http\Requests\Auth\LoginRequest $request
|
||||
*
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store(LoginRequest $request)
|
||||
{
|
||||
$request->authenticate();
|
||||
|
||||
$request->session()->regenerate();
|
||||
|
||||
$request->user()->update([
|
||||
'last_login_at' => Carbon::now()->toDateTimeString(),
|
||||
'last_login_ip' => $request->getClientIp()
|
||||
]);
|
||||
|
||||
return redirect()->intended(RouteServiceProvider::HOME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy an authenticated session.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
*
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function destroy(Request $request)
|
||||
{
|
||||
Auth::guard('web')->logout();
|
||||
|
||||
$request->session()->invalidate();
|
||||
|
||||
$request->session()->regenerateToken();
|
||||
|
||||
return redirect('/');
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class ConfirmablePasswordController extends Controller
|
||||
{
|
||||
/**
|
||||
* Show the confirm password view.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
return view('pages/auth.confirm-password');
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirm the user's password.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
if (! Auth::guard('web')->validate([
|
||||
'email' => $request->user()->email,
|
||||
'password' => $request->password,
|
||||
])) {
|
||||
throw ValidationException::withMessages([
|
||||
'password' => __('auth.password'),
|
||||
]);
|
||||
}
|
||||
|
||||
$request->session()->put('auth.password_confirmed_at', time());
|
||||
|
||||
return redirect()->intended(RouteServiceProvider::HOME);
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class EmailVerificationNotificationController extends Controller
|
||||
{
|
||||
/**
|
||||
* Send a new email verification notification.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
if ($request->user()->hasVerifiedEmail()) {
|
||||
return redirect()->intended(RouteServiceProvider::HOME);
|
||||
}
|
||||
|
||||
$request->user()->sendEmailVerificationNotification();
|
||||
|
||||
return back()->with('status', 'verification-link-sent');
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class EmailVerificationPromptController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the email verification prompt.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
return $request->user()->hasVerifiedEmail()
|
||||
? redirect()->intended(RouteServiceProvider::HOME)
|
||||
: view('pages/auth.verify-email');
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Auth\Events\PasswordReset;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rules;
|
||||
|
||||
class NewPasswordController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the password reset view.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function create(Request $request)
|
||||
{
|
||||
addJavascriptFile('assets/js/custom/authentication/reset-password/new-password.js');
|
||||
|
||||
return view('pages/auth.reset-password', ['request' => $request]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming new password request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'token' => ['required'],
|
||||
'email' => ['required', 'email'],
|
||||
'password' => ['required', 'confirmed', Rules\Password::defaults()],
|
||||
]);
|
||||
|
||||
// Here we will attempt to reset the user's password. If it is successful we
|
||||
// will update the password on an actual user model and persist it to the
|
||||
// database. Otherwise we will parse the error and return the response.
|
||||
$status = Password::reset(
|
||||
$request->only('email', 'password', 'password_confirmation', 'token'),
|
||||
function ($user) use ($request) {
|
||||
$user->forceFill([
|
||||
'password' => Hash::make($request->password),
|
||||
'remember_token' => Str::random(60),
|
||||
])->save();
|
||||
|
||||
event(new PasswordReset($user));
|
||||
}
|
||||
);
|
||||
|
||||
// If the password was successfully reset, we will redirect the user back to
|
||||
// the application's home authenticated view. If there is an error we can
|
||||
// redirect them back to where they came from with their error message.
|
||||
return $status == Password::PASSWORD_RESET
|
||||
? redirect()->route('login')->with('status', __($status))
|
||||
: back()->withInput($request->only('email'))
|
||||
->withErrors(['email' => __($status)]);
|
||||
}
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
|
||||
class PasswordResetLinkController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the password reset link request view.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
addJavascriptFile('assets/js/custom/authentication/reset-password/reset-password.js');
|
||||
|
||||
return view('pages/auth.forgot-password');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming password reset link request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'email' => ['required', 'email'],
|
||||
]);
|
||||
|
||||
// We will send the password reset link to this user. Once we have attempted
|
||||
// to send the link, we will examine the response then see the message we
|
||||
// need to show to the user. Finally, we'll send out a proper response.
|
||||
$status = Password::sendResetLink(
|
||||
$request->only('email')
|
||||
);
|
||||
|
||||
return $status == Password::RESET_LINK_SENT
|
||||
? back()->with('status', __($status))
|
||||
: back()->withInput($request->only('email'))
|
||||
->withErrors(['email' => __($status)]);
|
||||
}
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Validation\Rules;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
|
||||
class RegisteredUserController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the registration view.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
addJavascriptFile('assets/js/custom/authentication/sign-up/general.js');
|
||||
|
||||
return view('pages/auth.register');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming registration request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||
'password' => ['required', 'confirmed', Rules\Password::defaults()],
|
||||
]);
|
||||
|
||||
$user = User::create([
|
||||
'name' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password),
|
||||
'last_login_at' => \Illuminate\Support\Carbon::now()->toDateTimeString(),
|
||||
'last_login_ip' => $request->getClientIp()
|
||||
]);
|
||||
|
||||
event(new Registered($user));
|
||||
|
||||
Auth::login($user);
|
||||
|
||||
return redirect(RouteServiceProvider::HOME);
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Events\Verified;
|
||||
use Laravel\Socialite\Facades\Socialite;
|
||||
|
||||
class SocialiteController extends Controller
|
||||
{
|
||||
public function redirect($provider)
|
||||
{
|
||||
// redirect from social site
|
||||
if (request()->input('state')) {
|
||||
// already logged in
|
||||
// get user info from social site
|
||||
$user = Socialite::driver($provider)->stateless()->user();
|
||||
|
||||
// check for existing user
|
||||
$existingUser = User::where('email', $user->getEmail())->first();
|
||||
|
||||
if ($existingUser) {
|
||||
auth()->login($existingUser, true);
|
||||
|
||||
return redirect()->to('/');
|
||||
}
|
||||
|
||||
$newUser = $this->createUser($user);
|
||||
auth()->login($newUser, true);
|
||||
}
|
||||
|
||||
// request login from social site
|
||||
return Socialite::driver($provider)->redirect();
|
||||
}
|
||||
|
||||
|
||||
function createUser($user)
|
||||
{
|
||||
$user = User::updateOrCreate([
|
||||
'email' => $user->getEmail(),
|
||||
], [
|
||||
'name' => $user->getName(),
|
||||
'password' => '',
|
||||
'avatar' => $user->getAvatar(),
|
||||
]);
|
||||
|
||||
if ($user->markEmailAsVerified()) {
|
||||
event(new Verified($user));
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Auth\Events\Verified;
|
||||
use Illuminate\Foundation\Auth\EmailVerificationRequest;
|
||||
|
||||
class VerifyEmailController extends Controller
|
||||
{
|
||||
/**
|
||||
* Mark the authenticated user's email address as verified.
|
||||
*
|
||||
* @param \Illuminate\Foundation\Auth\EmailVerificationRequest $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function __invoke(EmailVerificationRequest $request)
|
||||
{
|
||||
if ($request->user()->hasVerifiedEmail()) {
|
||||
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
|
||||
}
|
||||
|
||||
if ($request->user()->markEmailAsVerified()) {
|
||||
event(new Verified($request->user()));
|
||||
}
|
||||
|
||||
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
|
||||
}
|
||||
}
|
@ -1,80 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Livewire\Permission;
|
||||
|
||||
use Livewire\Component;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
|
||||
class PermissionModal extends Component
|
||||
{
|
||||
public $name;
|
||||
|
||||
public Permission $permission;
|
||||
|
||||
protected $rules = [
|
||||
'name' => 'required|string',
|
||||
];
|
||||
|
||||
// This is the list of listeners that this component listens to.
|
||||
protected $listeners = [
|
||||
'modal.show.permission_name' => 'mountPermission',
|
||||
'delete_permission' => 'delete'
|
||||
];
|
||||
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.permission.permission-modal');
|
||||
}
|
||||
|
||||
public function mountPermission($permission_name = '')
|
||||
{
|
||||
if (empty($permission_name)) {
|
||||
// Create new
|
||||
$this->permission = new Permission;
|
||||
$this->name = '';
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the role by name.
|
||||
$permission = Permission::where('name', $permission_name)->first();
|
||||
if (is_null($permission)) {
|
||||
$this->emit('error', 'The selected permission [' . $permission_name . '] is not found');
|
||||
return;
|
||||
}
|
||||
|
||||
$this->permission = $permission;
|
||||
|
||||
// Set the name and checked permissions properties to the role's values.
|
||||
$this->name = $this->permission->name;
|
||||
}
|
||||
|
||||
public function submit()
|
||||
{
|
||||
$this->validate();
|
||||
|
||||
$this->permission->name = strtolower($this->name);
|
||||
if ($this->permission->isDirty()) {
|
||||
$this->permission->save();
|
||||
}
|
||||
|
||||
// Emit a success event with a message indicating that the permissions have been updated.
|
||||
$this->emit('success', 'Permission updated');
|
||||
}
|
||||
|
||||
public function delete($name)
|
||||
{
|
||||
$permission = Permission::where('name', $name)->first();
|
||||
|
||||
if (!is_null($permission)) {
|
||||
$permission->delete();
|
||||
}
|
||||
|
||||
$this->emit('success', 'Permission deleted');
|
||||
}
|
||||
|
||||
public function hydrate()
|
||||
{
|
||||
$this->resetErrorBag();
|
||||
$this->resetValidation();
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Livewire\Permission;
|
||||
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Livewire\Component;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class RoleList extends Component
|
||||
{
|
||||
public array|Collection $roles;
|
||||
|
||||
protected $listeners = ['success' => 'updateRoleList'];
|
||||
|
||||
public function render()
|
||||
{
|
||||
$this->roles = Role::with('permissions')->get();
|
||||
|
||||
return view('livewire.permission.role-list');
|
||||
}
|
||||
|
||||
public function updateRoleList()
|
||||
{
|
||||
$this->roles = Role::with('permissions')->get();
|
||||
}
|
||||
|
||||
public function hydrate()
|
||||
{
|
||||
$this->resetErrorBag();
|
||||
$this->resetValidation();
|
||||
}
|
||||
}
|
@ -1,110 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Livewire\Permission;
|
||||
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Support\Str;
|
||||
use Livewire\Component;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class RoleModal extends Component
|
||||
{
|
||||
public $name;
|
||||
public $checked_permissions;
|
||||
public $check_all;
|
||||
|
||||
public Role $role;
|
||||
public Collection $permissions;
|
||||
|
||||
protected $rules = [
|
||||
'name' => 'required|string',
|
||||
];
|
||||
|
||||
// This is the list of listeners that this component listens to.
|
||||
protected $listeners = ['modal.show.role_name' => 'mountRole'];
|
||||
|
||||
// This function is called when the component receives the `modal.show.role_name` event.
|
||||
public function mountRole($role_name = '')
|
||||
{
|
||||
if (empty($role_name)) {
|
||||
// Create new
|
||||
$this->role = new Role;
|
||||
$this->name = '';
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the role by name.
|
||||
$role = Role::where('name', $role_name)->first();
|
||||
if (is_null($role)) {
|
||||
$this->emit('error', 'The selected role [' . $role_name . '] is not found');
|
||||
return;
|
||||
}
|
||||
|
||||
$this->role = $role;
|
||||
|
||||
// Set the name and checked permissions properties to the role's values.
|
||||
$this->name = $this->role->name;
|
||||
$this->checked_permissions = $this->role->permissions->pluck('name');
|
||||
}
|
||||
|
||||
// This function is called when the component is mounted.
|
||||
public function mount()
|
||||
{
|
||||
// Get all permissions.
|
||||
$this->permissions = Permission::all();
|
||||
|
||||
// Set the checked permissions property to an empty array.
|
||||
$this->checked_permissions = [];
|
||||
}
|
||||
|
||||
// This function renders the component's view.
|
||||
public function render()
|
||||
{
|
||||
// Create an array of permissions grouped by ability.
|
||||
$permissions_by_group = [];
|
||||
foreach ($this->permissions ?? [] as $permission) {
|
||||
$ability = Str::after($permission->name, ' ');
|
||||
|
||||
$permissions_by_group[$ability][] = $permission;
|
||||
}
|
||||
|
||||
// Return the view with the permissions_by_group variable passed in.
|
||||
return view('livewire.permission.role-modal', compact('permissions_by_group'));
|
||||
}
|
||||
|
||||
// This function submits the form and updates the role's permissions.
|
||||
public function submit()
|
||||
{
|
||||
$this->validate();
|
||||
|
||||
$this->role->name = $this->name;
|
||||
if ($this->role->isDirty()) {
|
||||
$this->role->save();
|
||||
}
|
||||
|
||||
// Sync the role's permissions with the checked permissions property.
|
||||
$this->role->syncPermissions($this->checked_permissions);
|
||||
|
||||
// Emit a success event with a message indicating that the permissions have been updated.
|
||||
$this->emit('success', 'Permissions for ' . ucwords($this->role->name) . ' role updated');
|
||||
}
|
||||
|
||||
// This function checks all of the permissions.
|
||||
public function checkAll()
|
||||
{
|
||||
// If the check_all property is true, set the checked permissions property to all of the permissions.
|
||||
if ($this->check_all) {
|
||||
$this->checked_permissions = $this->permissions->pluck('name');
|
||||
} else {
|
||||
// Otherwise, set the checked permissions property to an empty array.
|
||||
$this->checked_permissions = [];
|
||||
}
|
||||
}
|
||||
|
||||
public function hydrate()
|
||||
{
|
||||
$this->resetErrorBag();
|
||||
$this->resetValidation();
|
||||
}
|
||||
}
|
@ -1,145 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Livewire\User;
|
||||
|
||||
use App\Models\User;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithFileUploads;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
|
||||
class AddUserModal extends Component
|
||||
{
|
||||
use WithFileUploads;
|
||||
|
||||
public $user_id;
|
||||
public $name;
|
||||
public $email;
|
||||
public $role;
|
||||
public $avatar;
|
||||
public $saved_avatar;
|
||||
|
||||
public $edit_mode = false;
|
||||
|
||||
protected $rules = [
|
||||
'name' => 'required|string',
|
||||
'email' => 'required|email',
|
||||
'role' => 'required|string',
|
||||
'avatar' => 'nullable|sometimes|image|max:1024',
|
||||
];
|
||||
|
||||
protected $listeners = [
|
||||
'delete_user' => 'deleteUser',
|
||||
'update_user' => 'updateUser',
|
||||
];
|
||||
|
||||
public function render()
|
||||
{
|
||||
$roles = Role::all();
|
||||
|
||||
$roles_description = [
|
||||
'administrator' => 'Best for business owners and company administrators',
|
||||
'developer' => 'Best for developers or people primarily using the API',
|
||||
'analyst' => 'Best for people who need full access to analytics data, but don\'t need to update business settings',
|
||||
'support' => 'Best for employees who regularly refund payments and respond to disputes',
|
||||
'trial' => 'Best for people who need to preview content data, but don\'t need to make any updates',
|
||||
];
|
||||
|
||||
foreach ($roles as $i => $role) {
|
||||
$roles[$i]->description = $roles_description[$role->name] ?? '';
|
||||
}
|
||||
|
||||
return view('livewire.user.add-user-modal', compact('roles'));
|
||||
}
|
||||
|
||||
public function submit()
|
||||
{
|
||||
// Validate the form input data
|
||||
$this->validate();
|
||||
|
||||
DB::transaction(function () {
|
||||
// Prepare the data for creating a new user
|
||||
$data = [
|
||||
'name' => $this->name,
|
||||
];
|
||||
|
||||
if ($this->avatar) {
|
||||
$data['profile_photo_path'] = $this->avatar->store('avatars', 'public');
|
||||
} else {
|
||||
$data['profile_photo_path'] = null;
|
||||
}
|
||||
|
||||
if (!$this->edit_mode) {
|
||||
$data['password'] = Hash::make($this->email);
|
||||
}
|
||||
|
||||
// Create a new user record in the database
|
||||
$user = $this->user_id ? User::find($this->user_id) : User::updateOrCreate([
|
||||
'email' => $this->email,
|
||||
], $data);
|
||||
|
||||
if ($this->edit_mode) {
|
||||
foreach ($data as $k => $v) {
|
||||
$user->$k = $v;
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->edit_mode) {
|
||||
// Assign selected role for user
|
||||
$user->syncRoles($this->role);
|
||||
|
||||
// Emit a success event with a message
|
||||
$this->emit('success', __('User updated'));
|
||||
} else {
|
||||
// Assign selected role for user
|
||||
$user->assignRole($this->role);
|
||||
|
||||
// Send a password reset link to the user's email
|
||||
Password::sendResetLink($user->only('email'));
|
||||
|
||||
// Emit a success event with a message
|
||||
$this->emit('success', __('New user created'));
|
||||
}
|
||||
});
|
||||
|
||||
// Reset the form fields after successful submission
|
||||
$this->reset();
|
||||
}
|
||||
|
||||
public function deleteUser($id)
|
||||
{
|
||||
// Prevent deletion of current user
|
||||
if ($id == Auth::id()) {
|
||||
$this->emit('error', 'User cannot be deleted');
|
||||
return;
|
||||
}
|
||||
|
||||
// Delete the user record with the specified ID
|
||||
User::destroy($id);
|
||||
|
||||
// Emit a success event with a message
|
||||
$this->emit('success', 'User successfully deleted');
|
||||
}
|
||||
|
||||
public function updateUser($id)
|
||||
{
|
||||
$this->edit_mode = true;
|
||||
|
||||
$user = User::find($id);
|
||||
|
||||
$this->user_id = $user->id;
|
||||
$this->saved_avatar = $user->profile_photo_url;
|
||||
$this->name = $user->name;
|
||||
$this->email = $user->email;
|
||||
$this->role = $user->roles?->first()->name ?? '';
|
||||
}
|
||||
|
||||
public function hydrate()
|
||||
{
|
||||
$this->resetErrorBag();
|
||||
$this->resetValidation();
|
||||
}
|
||||
}
|
@ -1,93 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Auth;
|
||||
|
||||
use Illuminate\Auth\Events\Lockout;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class LoginRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'email' => ['required', 'string', 'email'],
|
||||
'password' => ['required', 'string'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to authenticate the request's credentials.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function authenticate()
|
||||
{
|
||||
$this->ensureIsNotRateLimited();
|
||||
|
||||
if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
|
||||
RateLimiter::hit($this->throttleKey());
|
||||
|
||||
throw ValidationException::withMessages([
|
||||
'email' => trans('auth.failed'),
|
||||
]);
|
||||
}
|
||||
|
||||
RateLimiter::clear($this->throttleKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the login request is not rate limited.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function ensureIsNotRateLimited()
|
||||
{
|
||||
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
|
||||
return;
|
||||
}
|
||||
|
||||
event(new Lockout($this));
|
||||
|
||||
$seconds = RateLimiter::availableIn($this->throttleKey());
|
||||
|
||||
throw ValidationException::withMessages([
|
||||
'email' => trans('auth.throttle', [
|
||||
'seconds' => $seconds,
|
||||
'minutes' => ceil($seconds / 60),
|
||||
]),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the rate limiting throttle key for the request.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function throttleKey()
|
||||
{
|
||||
return Str::transliterate(Str::lower($this->input('email')).'|'.$this->ip());
|
||||
}
|
||||
}
|
@ -34,7 +34,7 @@
|
||||
"putrakuningan/usermanager-module": "dev-sit",
|
||||
"simplesoftwareio/simple-qrcode": "^4.2",
|
||||
"spatie/laravel-activitylog": "^4.7",
|
||||
"spatie/laravel-permission": "^5.10",
|
||||
"spatie/laravel-permission": "^6.7",
|
||||
"wildside/userstamps": "^2.3",
|
||||
"yajra/laravel-datatables": "^10.0",
|
||||
"yajra/laravel-datatables-oracle": "^10.3.1"
|
||||
@ -105,11 +105,6 @@
|
||||
"name": "putrakuningan/usermanager-module",
|
||||
"type": "vcs",
|
||||
"url": "https://git.putrakuningan.com/putrakuningan/Usermanager"
|
||||
},
|
||||
{
|
||||
"name": "putrakuningan/writeoff-module",
|
||||
"type": "vcs",
|
||||
"url": "https://git.putrakuningan.com/putrakuningan/Writeoff"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
<?php
|
||||
|
||||
use Modules\Usermanager\Entities\Permission;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
return [
|
||||
|
||||
'models' => [
|
||||
@ -13,7 +16,7 @@ return [
|
||||
* `Spatie\Permission\Contracts\Permission` contract.
|
||||
*/
|
||||
|
||||
'permission' => Spatie\Permission\Models\Permission::class,
|
||||
'permission' => Permission::class,
|
||||
|
||||
/*
|
||||
* When using the "HasRoles" trait from this package, we need to know which
|
||||
@ -24,7 +27,7 @@ return [
|
||||
* `Spatie\Permission\Contracts\Role` contract.
|
||||
*/
|
||||
|
||||
'role' => Spatie\Permission\Models\Role::class,
|
||||
'role' => Role::class,
|
||||
|
||||
],
|
||||
|
||||
|
@ -60,28 +60,28 @@ return [
|
||||
'KT_THEME_VENDORS' => [
|
||||
'datatables' => [
|
||||
'css' => [
|
||||
'assets/resources/mix/vendors/datatables/datatables.bundle.css',
|
||||
'assets/plugins/custom/datatables/datatables.bundle.css',
|
||||
],
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/datatables/datatables.bundle.js',
|
||||
'assets/plugins/custom/datatables/datatables.bundle.js',
|
||||
],
|
||||
],
|
||||
'formrepeater' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/formrepeater/formrepeater.bundle.js',
|
||||
'assets/plugins/custom/formrepeater/formrepeater.bundle.js',
|
||||
],
|
||||
],
|
||||
'fullcalendar' => [
|
||||
'css' => [
|
||||
'assets/resources/mix/vendors/fullcalendar/fullcalendar.bundle.css',
|
||||
'assets/plugins/custom/fullcalendar/fullcalendar.bundle.css',
|
||||
],
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/fullcalendar/fullcalendar.bundle.js',
|
||||
'assets/plugins/custom/fullcalendar/fullcalendar.bundle.js',
|
||||
],
|
||||
],
|
||||
'flotcharts' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/flotcharts/flotcharts.bundle.js',
|
||||
'assets/plugins/custom/flotcharts/flotcharts.bundle.js',
|
||||
],
|
||||
],
|
||||
'google-jsapi' => [
|
||||
@ -91,79 +91,79 @@ return [
|
||||
],
|
||||
'tinymce' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/tinymce/tinymce.bundle.js',
|
||||
'assets/plugins/custom/tinymce/tinymce.bundle.js',
|
||||
],
|
||||
],
|
||||
'ckeditor-classic' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/ckeditor/ckeditor-classic.bundle.js',
|
||||
'assets/plugins/custom/ckeditor/ckeditor-classic.bundle.js',
|
||||
],
|
||||
],
|
||||
'ckeditor-inline' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/ckeditor/ckeditor-inline.bundle.js',
|
||||
'assets/plugins/custom/ckeditor/ckeditor-inline.bundle.js',
|
||||
],
|
||||
],
|
||||
'ckeditor-balloon' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/ckeditor/ckeditor-balloon.bundle.js',
|
||||
'assets/plugins/custom/ckeditor/ckeditor-balloon.bundle.js',
|
||||
],
|
||||
],
|
||||
'ckeditor-balloon-block' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/ckeditor/ckeditor-balloon-block.bundle.js',
|
||||
'assets/plugins/custom/ckeditor/ckeditor-balloon-block.bundle.js',
|
||||
],
|
||||
],
|
||||
'ckeditor-document' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/ckeditor/ckeditor-document.bundle.js',
|
||||
'assets/plugins/custom/ckeditor/ckeditor-document.bundle.js',
|
||||
],
|
||||
],
|
||||
'draggable' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/draggable/draggable.bundle.js',
|
||||
'assets/plugins/custom/draggable/draggable.bundle.js',
|
||||
],
|
||||
],
|
||||
'fslightbox' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/fslightbox/fslightbox.bundle.js',
|
||||
'assets/plugins/custom/fslightbox/fslightbox.bundle.js',
|
||||
],
|
||||
],
|
||||
'jkanban' => [
|
||||
'css' => [
|
||||
'assets/resources/mix/vendors/jkanban/jkanban.bundle.css',
|
||||
'assets/plugins/custom/jkanban/jkanban.bundle.css',
|
||||
],
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/jkanban/jkanban.bundle.js',
|
||||
'assets/plugins/custom/jkanban/jkanban.bundle.js',
|
||||
],
|
||||
],
|
||||
'typedjs' => [
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/typedjs/typedjs.bundle.js',
|
||||
'assets/plugins/custom/typedjs/typedjs.bundle.js',
|
||||
],
|
||||
],
|
||||
'cookiealert' => [
|
||||
'css' => [
|
||||
'assets/resources/mix/vendors/cookiealert/cookiealert.bundle.css',
|
||||
'assets/plugins/custom/cookiealert/cookiealert.bundle.css',
|
||||
],
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/cookiealert/cookiealert.bundle.js',
|
||||
'assets/plugins/custom/cookiealert/cookiealert.bundle.js',
|
||||
],
|
||||
],
|
||||
'cropper' => [
|
||||
'css' => [
|
||||
'assets/resources/mix/vendors/cropper/cropper.bundle.css',
|
||||
'assets/plugins/custom/cropper/cropper.bundle.css',
|
||||
],
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/cropper/cropper.bundle.js',
|
||||
'assets/plugins/custom/cropper/cropper.bundle.js',
|
||||
],
|
||||
],
|
||||
'vis-timeline' => [
|
||||
'css' => [
|
||||
'assets/resources/mix/vendors/vis-timeline/vis-timeline.bundle.css',
|
||||
'assets/plugins/custom/vis-timeline/vis-timeline.bundle.css',
|
||||
],
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/vis-timeline/vis-timeline.bundle.js',
|
||||
'assets/plugins/custom/vis-timeline/vis-timeline.bundle.js',
|
||||
],
|
||||
],
|
||||
'jstree' => [
|
||||
@ -176,18 +176,18 @@ return [
|
||||
],
|
||||
'prismjs' => [
|
||||
'css' => [
|
||||
'assets/resources/mix/vendors/prismjs/prismjs.bundle.css',
|
||||
'assets/plugins/custom/prismjs/prismjs.bundle.css',
|
||||
],
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/prismjs/prismjs.bundle.js',
|
||||
'assets/plugins/custom/prismjs/prismjs.bundle.js',
|
||||
],
|
||||
],
|
||||
'leaflet' => [
|
||||
'css' => [
|
||||
'assets/resources/mix/vendors/leaflet/leaflet.bundle.css',
|
||||
'assets/plugins/custom/leaflet/leaflet.bundle.css',
|
||||
],
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/leaflet/leaflet.bundle.js',
|
||||
'assets/plugins/custom/leaflet/leaflet.bundle.js',
|
||||
],
|
||||
],
|
||||
'amcharts' => [
|
||||
@ -220,10 +220,10 @@ return [
|
||||
],
|
||||
'bootstrap-select' => [
|
||||
'css' => [
|
||||
'assets/resources/mix/vendors/bootstrap-select/bootstrap-select.bundle.css',
|
||||
'assets/plugins/custom/bootstrap-select/bootstrap-select.bundle.css',
|
||||
],
|
||||
'js' => [
|
||||
'assets/resources/mix/vendors/bootstrap-select/bootstrap-select.bundle.js',
|
||||
'assets/plugins/custom/bootstrap-select/bootstrap-select.bundle.js',
|
||||
],
|
||||
],
|
||||
'chained-select' => [
|
||||
|
@ -1,37 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('users', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('email')->unique();
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
$table->string('password');
|
||||
$table->string('avatar')->nullable();
|
||||
$table->rememberToken();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('users');
|
||||
}
|
||||
};
|
@ -1,32 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('password_resets', function (Blueprint $table) {
|
||||
$table->string('email')->index();
|
||||
$table->string('token');
|
||||
$table->timestamp('created_at')->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('password_resets');
|
||||
}
|
||||
};
|
@ -1,36 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('failed_jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('uuid')->unique();
|
||||
$table->text('connection');
|
||||
$table->text('queue');
|
||||
$table->longText('payload');
|
||||
$table->longText('exception');
|
||||
$table->timestamp('failed_at')->useCurrent();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('failed_jobs');
|
||||
}
|
||||
};
|
@ -1,37 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('personal_access_tokens', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->morphs('tokenable');
|
||||
$table->string('name');
|
||||
$table->string('token', 64)->unique();
|
||||
$table->text('abilities')->nullable();
|
||||
$table->timestamp('last_used_at')->nullable();
|
||||
$table->timestamp('expires_at')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('personal_access_tokens');
|
||||
}
|
||||
};
|
@ -1,47 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Support\Facades\Config;
|
||||
|
||||
class CreateSettingsTable extends Migration
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
if (version_compare(Application::VERSION, '5.0', '>=')) {
|
||||
$this->tablename = Config::get('settings.table');
|
||||
$this->keyColumn = Config::get('settings.keyColumn');
|
||||
$this->valueColumn = Config::get('settings.valueColumn');
|
||||
} else {
|
||||
$this->tablename = Config::get('anlutro/l4-settings::table');
|
||||
$this->keyColumn = Config::get('anlutro/l4-settings::keyColumn');
|
||||
$this->valueColumn = Config::get('anlutro/l4-settings::valueColumn');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create($this->tablename, function(Blueprint $table)
|
||||
{
|
||||
$table->increments('id');
|
||||
$table->string($this->keyColumn)->index();
|
||||
$table->text($this->valueColumn);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::drop($this->tablename);
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->datetime('last_login_at')->nullable();
|
||||
$table->string('last_login_ip')->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->removeColumn('last_login_at');
|
||||
$table->removeColumn('last_login_ip');
|
||||
});
|
||||
}
|
||||
};
|
@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->string('profile_photo_path', 2048)->nullable()->after('email');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->dropColumn('profile_photo_path');
|
||||
});
|
||||
}
|
||||
};
|
@ -1,35 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('addresses', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('user_id');
|
||||
$table->string('address_line_1');
|
||||
$table->string('address_line_2')->nullable();
|
||||
$table->string('city');
|
||||
$table->string('postal_code');
|
||||
$table->string('state');
|
||||
$table->string('country');
|
||||
$table->unsignedTinyInteger('type');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('addresses');
|
||||
}
|
||||
};
|
@ -1,5 +1,4 @@
|
||||
{
|
||||
"Usermanager": true,
|
||||
"Logs": true,
|
||||
"Writeoff": true
|
||||
"Logs": true
|
||||
}
|
22255
package-lock.json
generated
22255
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
10763
public/vendor/livewire/livewire.esm.js
vendored
Normal file
10763
public/vendor/livewire/livewire.esm.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
9899
public/vendor/livewire/livewire.js
vendored
9899
public/vendor/livewire/livewire.js
vendored
File diff suppressed because one or more lines are too long
103
public/vendor/livewire/livewire.min.js
vendored
Normal file
103
public/vendor/livewire/livewire.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7
public/vendor/livewire/livewire.min.js.map
vendored
Normal file
7
public/vendor/livewire/livewire.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
3
public/vendor/livewire/manifest.json
vendored
3
public/vendor/livewire/manifest.json
vendored
@ -1 +1,2 @@
|
||||
{"/livewire.js":"/livewire.js?id=90730a3b0e7144480175"}
|
||||
|
||||
{"/livewire.js":"770f7738"}
|
||||
|
@ -142,8 +142,7 @@ const gulpConfig = {
|
||||
},
|
||||
tinyslider: {
|
||||
styles: [
|
||||
"{$config.path.node_modules}/tiny-slider/dist/tiny-slider.css",
|
||||
],
|
||||
"{$config.path.node_modules}/tiny-slider/dist/tiny-slider.css",],
|
||||
scripts: [
|
||||
"{$config.path.node_modules}/tiny-slider/dist/min/tiny-slider.js",
|
||||
],
|
||||
@ -195,7 +194,7 @@ const gulpConfig = {
|
||||
],
|
||||
scripts: [
|
||||
"{$config.path.node_modules}/@yaireo/tagify/dist/tagify.polyfills.min.js",
|
||||
"{$config.path.node_modules}/@yaireo/tagify/dist/tagify.min.js",
|
||||
"{$config.path.node_modules}/@yaireo/tagify/dist/tagify.js",
|
||||
],
|
||||
},
|
||||
toastr: {
|
||||
|
@ -71,7 +71,7 @@ module.exports = [
|
||||
|
||||
// Tagify - Transforms an input field or a textarea into a Tags component, in an easy, customizable way, with great performance and small code footprint, exploded with features: https://github.com/yairEO/tagify
|
||||
'node_modules/@yaireo/tagify/dist/tagify.polyfills.min.js',
|
||||
'node_modules/@yaireo/tagify/dist/tagify.min.js',
|
||||
'node_modules/@yaireo/tagify/dist/tagify.js',
|
||||
|
||||
// Toastr - is a Javascript library for non-blocking notifications. jQuery is required. The goal is to create a simple core library that can be customized and extended: https://github.com/CodeSeven/toastr
|
||||
'resources/_keenthemes/src/plugins/toastr/build/toastr.min.js',
|
||||
|
0
storage/app/.gitignore
vendored
Normal file → Executable file
0
storage/app/.gitignore
vendored
Normal file → Executable file
0
storage/app/public/.gitignore
vendored
Normal file → Executable file
0
storage/app/public/.gitignore
vendored
Normal file → Executable file
0
storage/app/public/agi_new.png
Normal file → Executable file
0
storage/app/public/agi_new.png
Normal file → Executable file
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
0
storage/app/public/agi_old.png
Normal file → Executable file
0
storage/app/public/agi_old.png
Normal file → Executable file
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 218 KiB |
0
storage/framework/.gitignore
vendored
Normal file → Executable file
0
storage/framework/.gitignore
vendored
Normal file → Executable file
0
storage/framework/cache/.gitignore
vendored
Normal file → Executable file
0
storage/framework/cache/.gitignore
vendored
Normal file → Executable file
0
storage/framework/cache/data/.gitignore
vendored
Normal file → Executable file
0
storage/framework/cache/data/.gitignore
vendored
Normal file → Executable file
0
storage/framework/sessions/.gitignore
vendored
Normal file → Executable file
0
storage/framework/sessions/.gitignore
vendored
Normal file → Executable file
0
storage/framework/testing/.gitignore
vendored
Normal file → Executable file
0
storage/framework/testing/.gitignore
vendored
Normal file → Executable file
0
storage/framework/views/.gitignore
vendored
Normal file → Executable file
0
storage/framework/views/.gitignore
vendored
Normal file → Executable file
0
storage/logs/.gitignore
vendored
Normal file → Executable file
0
storage/logs/.gitignore
vendored
Normal file → Executable file
Loading…
Reference in New Issue
Block a user