fix permission and asset first clone

This commit is contained in:
Daeng Deni Mardaeni 2024-05-04 21:21:26 +07:00
parent 26b0827b39
commit 40c2c8506c
49 changed files with 32148 additions and 26906 deletions

View File

@ -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)
{
//
}
}

View File

@ -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)
{
//
}
}

View File

@ -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)
{
//
}
}

View File

@ -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('/');
}
}

View File

@ -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);
}
}

View File

@ -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');
}
}

View File

@ -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');
}
}

View File

@ -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)]);
}
}

View File

@ -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)]);
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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');
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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());
}
}

View File

@ -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"
}
]
}

View File

@ -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,
],

View File

@ -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' => [

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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);
}
}

View File

@ -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');
});
}
};

View File

@ -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');
});
}
};

View File

@ -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');
}
};

View File

@ -1,5 +1,4 @@
{
"Usermanager": true,
"Logs": true,
"Writeoff": true
"Logs": true
}

22267
package-lock.json generated

File diff suppressed because it is too large Load Diff

10763
public/vendor/livewire/livewire.esm.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

103
public/vendor/livewire/livewire.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1,2 @@
{"/livewire.js":"/livewire.js?id=90730a3b0e7144480175"}
{"/livewire.js":"770f7738"}

View File

@ -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: {

View File

@ -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
View File

0
storage/app/public/.gitignore vendored Normal file → Executable file
View File

0
storage/app/public/agi_new.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

0
storage/app/public/agi_old.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 218 KiB

0
storage/framework/.gitignore vendored Normal file → Executable file
View File

0
storage/framework/cache/.gitignore vendored Normal file → Executable file
View File

0
storage/framework/cache/data/.gitignore vendored Normal file → Executable file
View File

0
storage/framework/sessions/.gitignore vendored Normal file → Executable file
View File

0
storage/framework/testing/.gitignore vendored Normal file → Executable file
View File

0
storage/framework/views/.gitignore vendored Normal file → Executable file
View File

0
storage/logs/.gitignore vendored Normal file → Executable file
View File

14564
yarn.lock

File diff suppressed because it is too large Load Diff