Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions app/Http/Controllers/Configuracao/PaginaFavoritaController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<?php

namespace App\Http\Controllers\Configuracao;

use App\Http\Controllers\Controller;
use App\Models\OsLab\PaginaFavorita;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class PaginaFavoritaController extends Controller
{
public function __construct()
{
// ACL DE PERMISSÕES
$this->middleware('permission:config_pagina_favorita', ['only' => ['index', 'update', 'destroy', 'updateOrder', 'edit']]);
}

/**
* Display a listing of the resource.
*/
public function index()
{
$user = Auth::user();
$favoritas = PaginaFavorita::where('user_id', $user->id)
->orderBy('order')
->get();

return view('configuracao.pagina-favorita.index', [
'favoritas' => $favoritas,
'colors' => PaginaFavorita::AVAILABLE_COLORS,
]);
}

/**
* Show the form for editing the specified resource.
*/
public function edit(PaginaFavorita $paginaFavorita)
{
$this->authorize('update', $paginaFavorita);

return view('configuracao.pagina-favorita.edit', [
'favorita' => $paginaFavorita,
'colors' => PaginaFavorita::AVAILABLE_COLORS,
]);
}

/**
* Update the specified resource in storage.
*/
public function update(Request $request, PaginaFavorita $paginaFavorita)
{
$this->authorize('update', $paginaFavorita);

$validated = $request->validate([
'text' => 'required|string|max:255',
'color' => 'required|in:'.implode(',', array_keys(PaginaFavorita::AVAILABLE_COLORS)),
]);

$paginaFavorita->update($validated);

return redirect()->route('configuracao.pagina-favorita.index')
->with('success', 'Página favorita atualizada com sucesso!');
}

/**
* Remove the specified resource from storage.
*/
public function destroy(PaginaFavorita $paginaFavorita)
{
$this->authorize('delete', $paginaFavorita);

$paginaFavorita->delete();

return redirect()->route('configuracao.pagina-favorita.index')
->with('success', 'Página favorita removida com sucesso!');
}

/**
* Update the order of favorites via AJAX.
*/
public function updateOrder(Request $request)
{
$user = Auth::user();
$order = $request->input('order', []);

foreach ($order as $index => $id) {
PaginaFavorita::where('id', $id)
->where('user_id', $user->id)
->update(['order' => $index]);
}

return response()->json(['success' => true]);
}
}
30 changes: 30 additions & 0 deletions app/Models/OsLab/PaginaFavorita.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,34 @@
class PaginaFavorita extends Model
{
use HasFactory;

protected $table = 'pagina_favoritas';

protected $fillable = [
'user_id',
'route',
'text',
'icon',
'color',
'order',
];

protected $casts = [
'order' => 'integer',
];

public const AVAILABLE_COLORS = [
'btn-primary' => 'Azul (Padrão)',
'btn-secondary' => 'Cinza',
'btn-success' => 'Verde',
'btn-danger' => 'Vermelho',
'btn-warning' => 'Amarelo',
'btn-info' => 'Azul Claro',
'btn-oslab' => 'OSLab',
];

public function user()
{
return $this->belongsTo(\App\Models\User::class);
}
}
65 changes: 65 additions & 0 deletions app/Policies/PaginaFavoritaPolicy.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?php

namespace App\Policies;

use App\Models\OsLab\PaginaFavorita;
use App\Models\User;

class PaginaFavoritaPolicy
{
/**
* Determine whether the user can view any models.
*/
public function viewAny(User $user): bool
{
return true;
}

/**
* Determine whether the user can view the model.
*/
public function view(User $user, PaginaFavorita $paginaFavorita): bool
{
return $user->id === $paginaFavorita->user_id;
}

/**
* Determine whether the user can create models.
*/
public function create(User $user): bool
{
return true;
}

/**
* Determine whether the user can update the model.
*/
public function update(User $user, PaginaFavorita $paginaFavorita): bool
{
return $user->id === $paginaFavorita->user_id;
}

/**
* Determine whether the user can delete the model.
*/
public function delete(User $user, PaginaFavorita $paginaFavorita): bool
{
return $user->id === $paginaFavorita->user_id;
}

/**
* Determine whether the user can restore the model.
*/
public function restore(User $user, PaginaFavorita $paginaFavorita): bool
{
return $user->id === $paginaFavorita->user_id;
}

/**
* Determine whether the user can permanently delete the model.
*/
public function forceDelete(User $user, PaginaFavorita $paginaFavorita): bool
{
return $user->id === $paginaFavorita->user_id;
}
}
4 changes: 3 additions & 1 deletion app/Providers/AuthServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
namespace App\Providers;

// use Illuminate\Support\Facades\Gate;
use App\Models\OsLab\PaginaFavorita;
use App\Policies\PaginaFavoritaPolicy;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
Expand All @@ -13,7 +15,7 @@ class AuthServiceProvider extends ServiceProvider
* @var array<class-string, class-string>
*/
protected $policies = [
//
PaginaFavorita::class => PaginaFavoritaPolicy::class,
];

/**
Expand Down
4 changes: 3 additions & 1 deletion app/Services/OsLab/FavoriteMenuService.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ public function favoriteRoute($routeName)
$paginaFavorita->route = $routeName;
$paginaFavorita->icon = $icon;
$paginaFavorita->text = $text;
$paginaFavorita->color = 'btn-primary';
$paginaFavorita->order = PaginaFavorita::where('user_id', $userId)->max('order') + 1;
$paginaFavorita->save();
}

Expand All @@ -92,7 +94,7 @@ public function getUserFavoriteData()
{
$userId = Auth::id();

return PaginaFavorita::where('user_id', $userId)->get();
return PaginaFavorita::where('user_id', $userId)->orderBy('order')->get();
}

/**
Expand Down
8 changes: 8 additions & 0 deletions config/adminlte.php
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,7 @@
'config_wiki_fabricante', 'config_wiki_modelo',
'config_sistema',
'config_emitente',
'config_pagina_favorita',

],
'submenu' => [
Expand Down Expand Up @@ -646,6 +647,13 @@
'active' => ['configuracoes/emitente*'],
'can' => 'config_emitente',
],
[
'text' => 'Páginas Favoritas',
'icon' => 'fas fa-star',
'route' => 'configuracao.pagina-favorita.index',
'active' => ['configuracoes/pagina-favorita*'],
'can' => 'config_pagina_favorita',
],
[
'text' => 'Backup',
'icon' => 'fa-solid fa-server',
Expand Down
6 changes: 3 additions & 3 deletions config/breadcrumbs.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,13 @@
*/

// When route-bound breadcrumbs are used but the current route doesn't have a name (UnnamedRouteException)
'unnamed-route-exception' => true,
'unnamed-route-exception' => false,

// When route-bound breadcrumbs are used and the matching breadcrumb doesn't exist (InvalidBreadcrumbException)
'missing-route-bound-breadcrumb-exception' => true,
'missing-route-bound-breadcrumb-exception' => false,

// When a named breadcrumb is used but doesn't exist (InvalidBreadcrumbException)
'invalid-named-breadcrumb-exception' => true,
'invalid-named-breadcrumb-exception' => false,

/*
|--------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
public function up(): void
{
Schema::create('pagina_favoritas', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->string('route')->index();
$table->string('text')->nullable();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?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('pagina_favoritas', function (Blueprint $table) {
$table->string('color')->default('btn-primary')->after('icon');
$table->unsignedInteger('order')->default(0)->after('color');
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('pagina_favoritas', function (Blueprint $table) {
$table->dropColumn(['color', 'order']);
});
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
if (! Schema::hasColumn('pagina_favoritas', 'id')) {
$driver = Schema::getConnection()->getDriverName();

if ($driver === 'mysql') {
DB::statement('ALTER TABLE pagina_favoritas ADD COLUMN id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
} elseif ($driver === 'pgsql') {
DB::statement('ALTER TABLE pagina_favoritas ADD COLUMN id BIGSERIAL PRIMARY KEY');
} else {
Schema::table('pagina_favoritas', function (Blueprint $table) {
$table->bigIncrements('id')->first();
});
}
}
}

/**
* Reverse the migrations.
*/
public function down(): void
{
if (Schema::hasColumn('pagina_favoritas', 'id')) {
Schema::table('pagina_favoritas', function (Blueprint $table) {
$table->dropColumn('id');
});
}
}
};
6 changes: 6 additions & 0 deletions database/seeders/DefaultsConfigPermissionsSistema.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ public function run(): void
'guard_name' => 'web',
'group_id' => 11,
],
[
'description' => 'Acesso às páginas favoritas',
'name' => 'config_pagina_favorita',
'guard_name' => 'web',
'group_id' => 11,
],

];

Expand Down
Loading
Loading