Primer carga de contenido a servidor de producción y anexo de claves
This commit is contained in:
@@ -0,0 +1,87 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Mail\ExampleMail;
|
||||||
|
use App\Models\Plantel;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Routing\Controller;
|
||||||
|
use Illuminate\Support\Facades\Mail;
|
||||||
|
|
||||||
|
class MailController extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
public function __construct() {
|
||||||
|
$this->middleware('can:mail.index')->only('index','show');
|
||||||
|
$this->middleware('can:mail.create')->only('create','store');
|
||||||
|
$this->middleware('can:mail.edit')->only('edit','update');
|
||||||
|
$this->middleware('can:mail.destroy')->only('destroy');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$plantels=Plantel::all();
|
||||||
|
$users=User::with('roles')->get();
|
||||||
|
return view('mail.index',compact('users','plantels'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
public function mailme(User $user){
|
||||||
|
Mail::to($user->email)->send(new ExampleMail($user));
|
||||||
|
|
||||||
|
session()->flash('swal',[
|
||||||
|
'icon'=>'success',
|
||||||
|
'title'=>'Enviado!',
|
||||||
|
'text'=>'Se ha enviado el correo correctamente'
|
||||||
|
]);
|
||||||
|
return redirect()->route('mail.index');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Mail;
|
||||||
|
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Mail\Mailable;
|
||||||
|
use Illuminate\Mail\Mailables\Content;
|
||||||
|
use Illuminate\Mail\Mailables\Envelope;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Mail\Mailables\Address;
|
||||||
|
|
||||||
|
class ExampleMail extends Mailable
|
||||||
|
{
|
||||||
|
use Queueable, SerializesModels;
|
||||||
|
|
||||||
|
public function __construct(public $user)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
public function envelope(): Envelope
|
||||||
|
{
|
||||||
|
return new Envelope(
|
||||||
|
subject: 'Example Mail',
|
||||||
|
from: new Address(env("MAIL_FROM_ADDRESS"),env("MAIL_FROM_NAME"))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function content(): Content
|
||||||
|
{
|
||||||
|
return new Content(
|
||||||
|
view: 'emails.example',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function attachments(): array
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
use App\Models\User;
|
|
||||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
|||||||
@@ -111,5 +111,10 @@ class RoleSeeder extends Seeder
|
|||||||
Permission::create(['name'=>'asistencia.edit','description'=>'Editar asistencias'])->syncRoles([$role1]);
|
Permission::create(['name'=>'asistencia.edit','description'=>'Editar asistencias'])->syncRoles([$role1]);
|
||||||
Permission::create(['name'=>'asistencia.destroy','description'=>'Eliminar asistencias'])->syncRoles([$role1]);
|
Permission::create(['name'=>'asistencia.destroy','description'=>'Eliminar asistencias'])->syncRoles([$role1]);
|
||||||
|
|
||||||
|
Permission::create(['name'=>'mail.index','description'=>'Ver mail'])->syncRoles([$role1]);
|
||||||
|
Permission::create(['name'=>'mail.create','description'=>'Crear mail'])->syncRoles([$role1]);
|
||||||
|
Permission::create(['name'=>'mail.edit','description'=>'Editar mail'])->syncRoles([$role1]);
|
||||||
|
Permission::create(['name'=>'mail.destroy','description'=>'Eliminar mail'])->syncRoles([$role1]);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<title>Document</title>
|
||||||
|
<style>
|
||||||
|
h1{
|
||||||
|
color: rgb(12, 110, 221);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>Holee {{$user->name}}</h1>
|
||||||
|
|
||||||
|
<p>Este es un ejemplo</p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -91,6 +91,10 @@
|
|||||||
@can('concepto.index')
|
@can('concepto.index')
|
||||||
<a class="collapse-item" href="{{ route('concepto.index') }}" style="color:#85888e">Conceptos</a>
|
<a class="collapse-item" href="{{ route('concepto.index') }}" style="color:#85888e">Conceptos</a>
|
||||||
@endcan
|
@endcan
|
||||||
|
|
||||||
|
@can('mail.index')
|
||||||
|
<a class="collapse-item" href="{{ route('mail.index') }}" style="color:#85888e">Mail</a>
|
||||||
|
@endcan
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -0,0 +1,99 @@
|
|||||||
|
@extends('layouts.landing')
|
||||||
|
|
||||||
|
@section('title',"Crear")
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="card shadow mb-4">
|
||||||
|
<div class="card-header py-3">
|
||||||
|
<div class="d-sm-flex align-items-center justify-content-between">
|
||||||
|
<h6 class="m-0 font-weight-bold text-primary">Crear Usuario</h6>
|
||||||
|
<a href="{{route('user.index')}}" class="d-sm-inline-block btn btn-sm btn-primary shadow-sm"><i class="fas fa-download fa-sm text-white-50"></i> Regresar</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
<form action="{{route('user.store')}}" method="POST">
|
||||||
|
@csrf
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1">Nombre</label>
|
||||||
|
<input class="form-control" name="name">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1">Correo</label>
|
||||||
|
<input class="form-control" name="email">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1">Telefono</label>
|
||||||
|
<input class="form-control" name="telefono" type="number">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1">Dirección</label>
|
||||||
|
<input class="form-control" name="direccion">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1">Contraseña</label>
|
||||||
|
<input class="form-control" name="password">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
@foreach ($plantels as $plantel)
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="checkbox" class="form-check-input cb"
|
||||||
|
id="p-{{ $plantel->id }}"
|
||||||
|
name="plantels[]" value="{{ $plantel->id }}"
|
||||||
|
>
|
||||||
|
<label class="form-check-label" for="p-{{ $plantel->id }}">
|
||||||
|
{{ $plantel->name }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1">Roles</label>
|
||||||
|
|
||||||
|
@foreach ($roles as $role)
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="checkbox" class="form-check-input cb"
|
||||||
|
id="r-{{ $role->id }}"
|
||||||
|
name="roles[]" value="{{ $role->id }}">
|
||||||
|
<label class="form-check-label" for="r-{{ $role->id }}">
|
||||||
|
{{ $role->name }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="status">Seleccionar código</label>
|
||||||
|
<select class="form-control" name="codigo" id="codigo">
|
||||||
|
<option value="0">Selecciona un código....</option>
|
||||||
|
@foreach ($codigos as $codigo)
|
||||||
|
<option value="{{ $codigo->id }}">{{ $codigo->name}}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="status">Seleccionar status</label>
|
||||||
|
<select class="form-control" name="status" id="status">
|
||||||
|
<option value="1">Activo</option>
|
||||||
|
<option value="0">Inactivo</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input class="btn btn-primary" type="submit" value="Crear">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
@extends('layouts.landing')
|
||||||
|
|
||||||
|
@section('title',"Edit")
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="card shadow mb-4">
|
||||||
|
<div class="card-header py-3">
|
||||||
|
<div class="d-sm-flex align-items-center justify-content-between">
|
||||||
|
<h6 class="m-0 font-weight-bold text-primary">Editar Usuario</h6>
|
||||||
|
<a href="{{route('user.index')}}" class="d-sm-inline-block btn btn-sm btn-primary shadow-sm"><i class="fas fa-download fa-sm text-white-50"></i> Regresar</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
@if (session('info'))
|
||||||
|
<div class="alert alert-success">
|
||||||
|
<strong>{{session('info')}}</strong>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
<form action="{{route('user.update',$user->id)}}" method="POST">
|
||||||
|
@method('PUT')
|
||||||
|
@csrf
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1">Nombre</label>
|
||||||
|
<input class="form-control" name="name" value="{{$user->name}}">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1">Correo</label>
|
||||||
|
<input class="form-control" name="email" value="{{$user->email}}">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1">Telefono</label>
|
||||||
|
<input class="form-control" name="telefono" type="number" value="{{$user->telefono}}">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1">Dirección</label>
|
||||||
|
<input class="form-control" name="direccion" value="{{$user->direccion}}">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="plantels[]">Seleccionar campus</label>
|
||||||
|
|
||||||
|
@foreach ($plantels as $plantel)
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="checkbox" class="form-check-input cb"
|
||||||
|
id="p-{{ $plantel->id }}"
|
||||||
|
name="plantels[]" value="{{ $plantel->id }}"
|
||||||
|
{{ $user->existe($plantel->id) ? 'checked' : '' }}
|
||||||
|
>
|
||||||
|
<label class="form-check-label" for="p-{{ $plantel->id }}">
|
||||||
|
{{ $plantel->name }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="small mb-1" for="roles[]">Roles</label>
|
||||||
|
@foreach ($roles as $role)
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="checkbox" class="form-check-input cb"
|
||||||
|
id="r-{{ $role->id }}"
|
||||||
|
name="roles[]" value="{{ $role->id }}"
|
||||||
|
{{ $user->hasRole($role->id) ? 'checked' : '' }}>
|
||||||
|
<label class="form-check-label" for="r-{{ $role->id }}">
|
||||||
|
{{ $role->name }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="status">Seleccionar código</label>
|
||||||
|
<select class="form-control" name="code" id="code" value="{{ $user->code }}">
|
||||||
|
<option value="0">Selecciona un código....</option>
|
||||||
|
@foreach ($codigos as $codigo)
|
||||||
|
<option value="{{ $codigo->id }}" {{ $user->code == $codigo->id ? 'selected' : '' }}>{{ $codigo->name}}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="status">Seleccionar status</label>
|
||||||
|
<select class="form-control" name="status" id="status" value="{{ $user->status }}">
|
||||||
|
<option value="1" {{ $user->status=='1' ? 'selected' : '' }}>Activo</option>
|
||||||
|
<option value="0" {{ $user->status=='0' ? 'selected' : '' }}>Inactivo</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input class="btn btn-primary" type="submit" value="Update">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
@extends('layouts.landing')
|
||||||
|
|
||||||
|
@section('head')
|
||||||
|
@include('layouts._partials.tablaStyle')
|
||||||
|
@endsection
|
||||||
|
@section('title',"Inicio")
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="card shadow mb-4">
|
||||||
|
<div class="card-header py-3">
|
||||||
|
<div class="d-sm-flex align-items-center justify-content-between">
|
||||||
|
<h6 class="m-0 font-weight-bold text-primary">Usuarios</h6>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="container-fluid">
|
||||||
|
|
||||||
|
<table id="tcont" class="table table-striped table-bordered nowrap table-hover" style="width:100%;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Id</th>
|
||||||
|
<th>Nombre</th>
|
||||||
|
<th>Rol</th>
|
||||||
|
<th>Correo</th>
|
||||||
|
<th>Status</th>
|
||||||
|
<th>Opciones</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@forelse ($users as $user)
|
||||||
|
<tr style="width:100%">
|
||||||
|
<td>{{$user->id}}</td>
|
||||||
|
<td><a href="{{route('user.show',$user->id)}}">{{$user->name}}</a></td>
|
||||||
|
<td>
|
||||||
|
@forelse($user->roles as $rol)
|
||||||
|
<span class="badge bg-primary text-white">
|
||||||
|
{{ $rol->name }}
|
||||||
|
</span>
|
||||||
|
@empty
|
||||||
|
<span class="text-muted">Sin rol</span>
|
||||||
|
@endforelse
|
||||||
|
</td>
|
||||||
|
<td>{{$user->email}}</td>
|
||||||
|
<td>
|
||||||
|
@if ($user->status==1)
|
||||||
|
<i class="fa-solid fa-circle" style="color: #63E6BE;"></i>
|
||||||
|
@else
|
||||||
|
<i class="fa-solid fa-circle" style="color: #e66565;"></i>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class="row mx-auto">
|
||||||
|
@can('user.edit')
|
||||||
|
<div class="col-sm-6 col-md-6"><a class="btn btn-primary" href="{{route('mailme',$user->id)}}">Enviar email</a></div>
|
||||||
|
@endcan
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@empty
|
||||||
|
<p>Sin usuarios.</p>
|
||||||
|
@endforelse
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
|
||||||
|
@section('scripts')
|
||||||
|
@include('layouts._partials.tablaScript')
|
||||||
|
@include('layouts._partials.delete')
|
||||||
|
@endsection
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
@extends('layouts.landing')
|
||||||
|
|
||||||
|
@section('title',"show")
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="card shadow mb-4">
|
||||||
|
<div class="card-header py-3">
|
||||||
|
<div class="d-sm-flex align-items-center justify-content-between">
|
||||||
|
<h6 class="m-0 font-weight-bold text-primary">Datos usuario</h6>
|
||||||
|
<a href="{{route('user.index')}}" class="d-sm-inline-block btn btn-sm btn-primary shadow-sm"><i class="fas fa-download fa-sm text-white-50"></i> Regresar</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
<h1>{{$user->name}}</h1>
|
||||||
|
<p>{{$user->email}}</p>
|
||||||
|
|
||||||
|
{{-- <p>Nota: {{$user->note->title}}</p>
|
||||||
|
<p>Descripción: {{$user->note->description}}</p> --}}
|
||||||
|
|
||||||
|
@forelse ($user->notes as $note)
|
||||||
|
<p>Nota: {{$note->title}}</p>
|
||||||
|
<p>Descripción: {{$note->description}}</p>
|
||||||
|
<br>
|
||||||
|
@empty
|
||||||
|
|
||||||
|
@endforelse
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
@@ -18,6 +18,7 @@ use App\Http\Controllers\CodeController;
|
|||||||
use App\Http\Controllers\PlantelController;
|
use App\Http\Controllers\PlantelController;
|
||||||
use App\Http\Controllers\ConceptoController;
|
use App\Http\Controllers\ConceptoController;
|
||||||
use App\Http\Controllers\DurationController;
|
use App\Http\Controllers\DurationController;
|
||||||
|
use App\Http\Controllers\MailController;
|
||||||
use App\Http\Controllers\MaterialController;
|
use App\Http\Controllers\MaterialController;
|
||||||
use App\Http\Controllers\ProspectoController;
|
use App\Http\Controllers\ProspectoController;
|
||||||
use App\Http\Controllers\PermissionController;
|
use App\Http\Controllers\PermissionController;
|
||||||
@@ -56,5 +57,7 @@ Route::middleware(['auth:sanctum',config('jetstream.auth_session'),'verified',
|
|||||||
Route::resource('/role',RoleController::class);
|
Route::resource('/role',RoleController::class);
|
||||||
Route::resource('/turno',TurnoController::class);
|
Route::resource('/turno',TurnoController::class);
|
||||||
Route::resource('/user',UserController::class);
|
Route::resource('/user',UserController::class);
|
||||||
|
Route::resource('/mail',MailController::class);
|
||||||
|
Route::get('/mailme/{user}',[MailController::class,'mailme'])->name('mailme');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user