First Commit
This commit is contained in:
+160
@@ -0,0 +1,160 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Modelo\Controllers;
|
||||
|
||||
use App\Controllers\BaseAdminController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||
use Modules\Modelo\Models\Modelo;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ModeloController extends BaseAdminController
|
||||
{
|
||||
/**
|
||||
* List all Modelos for the current company
|
||||
*/
|
||||
public function index(Request $request): Response
|
||||
{
|
||||
$user = $this->getCurrentUser();
|
||||
if (!$user || !$user->hasPermission('modelo.view')) {
|
||||
return new Response($this->view->render('components/alerts.twig', [
|
||||
'type' => 'danger',
|
||||
'message' => 'Access denied.'
|
||||
]), 403);
|
||||
}
|
||||
|
||||
$modelos = Modelo::orderBy('modelos_order', 'asc')->get();
|
||||
|
||||
return $this->renderAdminView('@modelo/admin/index.twig', [
|
||||
'page_title' => 'Gerenciamento de Modelo',
|
||||
'modelos' => $modelos
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show create form
|
||||
*/
|
||||
public function create(Request $request): Response
|
||||
{
|
||||
$user = $this->getCurrentUser();
|
||||
if (!$user || !$user->hasPermission('modelo.manage')) {
|
||||
return new Response('Access denied', 403);
|
||||
}
|
||||
|
||||
return $this->renderAdminView('@modelo/admin/form.twig', [
|
||||
'page_title' => 'Novo Modelo',
|
||||
'action' => 'create'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store new Modelo
|
||||
*/
|
||||
public function store(Request $request): Response
|
||||
{
|
||||
$user = $this->getCurrentUser();
|
||||
if (!$user || !$user->hasPermission('modelo.manage')) {
|
||||
return new Response('Access denied', 403);
|
||||
}
|
||||
|
||||
$data = $request->request->all();
|
||||
|
||||
$modelo = new Modelo();
|
||||
// Handle potential null bus_id for Super Admins
|
||||
$busId = $user->users_bus_id;
|
||||
if (empty($busId)) {
|
||||
$busId = $_SESSION['current_company_id'] ?? 1;
|
||||
}
|
||||
$modelo->modelos_bus_id = $busId;
|
||||
$modelo->modelos_title = $data['title'];
|
||||
$modelo->modelos_slug = !empty($data['slug']) ? Str::slug($data['slug']) : Str::slug($data['title']);
|
||||
$modelo->modelos_content = $data['content'];
|
||||
$modelo->modelos_order = (int) ($data['order'] ?? 0);
|
||||
$modelo->modelos_active = isset($data['active']);
|
||||
$modelo->modelos_visibility = $data['visibility'] ?? 'public';
|
||||
|
||||
$modelo->save();
|
||||
|
||||
return new RedirectResponse(url('admin/modelo?success=created'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show edit form
|
||||
*/
|
||||
public function edit(Request $request, $id): Response
|
||||
{
|
||||
$user = $this->getCurrentUser();
|
||||
if (!$user || !$user->hasPermission('modelo.manage')) {
|
||||
return new Response('Access denied', 403);
|
||||
}
|
||||
|
||||
$modelo = Modelo::find($id);
|
||||
if (!$modelo) {
|
||||
return new Response('Modelo not found', 404);
|
||||
}
|
||||
|
||||
return $this->renderAdminView('@modelo/admin/form.twig', [
|
||||
'page_title' => 'Editar Modelo',
|
||||
'modelo' => $modelo,
|
||||
'action' => 'edit'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Modelo
|
||||
*/
|
||||
public function update(Request $request, $id): Response
|
||||
{
|
||||
$user = $this->getCurrentUser();
|
||||
if (!$user || !$user->hasPermission('modelo.manage')) {
|
||||
return new Response('Access denied', 403);
|
||||
}
|
||||
|
||||
$modelo = Modelo::find($id);
|
||||
if (!$modelo) {
|
||||
return new Response('Modelo not found', 404);
|
||||
}
|
||||
|
||||
$data = $request->request->all();
|
||||
|
||||
$modelo->modelos_title = $data['title'];
|
||||
$modelo->modelos_slug = !empty($data['slug']) ? Str::slug($data['slug']) : Str::slug($data['title']);
|
||||
$modelo->modelos_content = $data['content'];
|
||||
$modelo->modelos_order = (int) ($data['order'] ?? 0);
|
||||
$modelo->modelos_active = isset($data['active']);
|
||||
$modelo->modelos_visibility = $data['visibility'] ?? 'public';
|
||||
|
||||
$modelo->save();
|
||||
|
||||
return new RedirectResponse(url('admin/modelo?success=updated'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete Modelo
|
||||
*/
|
||||
public function delete(Request $request, $id): Response
|
||||
{
|
||||
$user = $this->getCurrentUser();
|
||||
if (!$user || !$user->hasPermission('modelo.manage')) {
|
||||
return new Response('Access denied', 403);
|
||||
}
|
||||
|
||||
$modelo = Modelo::find($id);
|
||||
if ($modelo) {
|
||||
$modelo->delete();
|
||||
}
|
||||
|
||||
return new RedirectResponse(url('admin/modelo?success=deleted'));
|
||||
}
|
||||
|
||||
/**
|
||||
* User Manual
|
||||
*/
|
||||
public function manual(Request $request): Response
|
||||
{
|
||||
return $this->renderAdminView('@modelo/admin/manual.twig', [
|
||||
'title' => 'Manual do Usuário - Módulo Modelo'
|
||||
]);
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Modelo\Controllers;
|
||||
|
||||
use App\Controllers\BaseController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Modules\Modelo\Models\Modelo;
|
||||
|
||||
class PublicController extends BaseController
|
||||
{
|
||||
/**
|
||||
* Show public Modelos for Company 1
|
||||
*/
|
||||
public function index(Request $request): Response
|
||||
{
|
||||
// Define a constant to bypass the company scope if needed
|
||||
if (!defined('PUBLIC_MODELO_ACCESS')) {
|
||||
define('PUBLIC_MODELO_ACCESS', true);
|
||||
}
|
||||
|
||||
$query = Modelo::where('modelos_active', true);
|
||||
|
||||
// Check visibility logic
|
||||
$canViewPrivate = false;
|
||||
if (isset($_SESSION['user_id'])) {
|
||||
$canViewPrivate = true;
|
||||
}
|
||||
|
||||
if (!$canViewPrivate) {
|
||||
$query->where('modelos_visibility', 'public');
|
||||
}
|
||||
|
||||
$modelos = $query->orderBy('modelos_order', 'asc')->get();
|
||||
|
||||
return $this->renderView('@modelo/public/index.twig', [
|
||||
'page_title' => 'Nossos Modelos',
|
||||
'modelos' => $modelos
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a single Modelo by slug
|
||||
*/
|
||||
public function show(Request $request, string $slug): Response
|
||||
{
|
||||
if (!defined('PUBLIC_MODELO_ACCESS')) {
|
||||
define('PUBLIC_MODELO_ACCESS', true);
|
||||
}
|
||||
|
||||
$modelo = Modelo::where('modelos_slug', $slug)
|
||||
->where('modelos_active', true)
|
||||
->first();
|
||||
|
||||
if (!$modelo) {
|
||||
return new Response('Modelo não encontrado', 404);
|
||||
}
|
||||
|
||||
// Replace placeholders
|
||||
$content = $modelo->modelos_content;
|
||||
$content = str_replace('[site_name]', $_SESSION['bus_name'] ?? 'SysCMS', $content);
|
||||
$content = str_replace('[current_date]', date('d/m/Y'), $content);
|
||||
$content = str_replace('[contact_email]', $_SESSION['bus_email'] ?? 'contato@syscms.com', $content);
|
||||
|
||||
return $this->renderView('@modelo/public/show.twig', [
|
||||
'page_title' => $modelo->modelos_title,
|
||||
'modelo' => $modelo,
|
||||
'content' => $content
|
||||
]);
|
||||
}
|
||||
}
|
||||
Executable
+44
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Modelo\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Modules\Company\Models\Company;
|
||||
|
||||
class Modelo extends Model
|
||||
{
|
||||
protected $table = 'modelos';
|
||||
protected $primaryKey = 'modelos_id';
|
||||
|
||||
protected $fillable = [
|
||||
'modelos_bus_id',
|
||||
'modelos_title',
|
||||
'modelos_slug',
|
||||
'modelos_content',
|
||||
'modelos_order',
|
||||
'modelos_active',
|
||||
'modelos_visibility'
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'modelos_active' => 'boolean',
|
||||
'modelos_order' => 'integer'
|
||||
];
|
||||
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
|
||||
static::addGlobalScope('company', function (Builder $builder) {
|
||||
if (isset($_SESSION['user_idbus']) && !defined('PUBLIC_MODELO_ACCESS')) {
|
||||
$builder->where('modelos_bus_id', $_SESSION['user_idbus']);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function company()
|
||||
{
|
||||
return $this->belongsTo(Company::class, 'modelos_bus_id', 'bus_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Modelo\Providers;
|
||||
|
||||
use Kernel\Application;
|
||||
|
||||
class ModeloServiceProvider
|
||||
{
|
||||
public function register()
|
||||
{
|
||||
}
|
||||
|
||||
public function boot()
|
||||
{
|
||||
$app = Application::getInstance();
|
||||
$app->addPublicPath('/modelo*');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user