File: /var/www/html/xfacil.desafio.com.py/app/Http/Livewire/Formularios.php
<?php
namespace App\Http\Livewire;
use Livewire\Component;
use Livewire\WithPagination;
use App\Models\Formulario;
use App\Models\Curso;
use App\Models\User;
use App\Notifications\NuevaNotificacion;
use Auth;
class Formularios extends Component{
use WithPagination;
protected $paginationTheme = 'bootstrap';
protected $queryString = ['search' => ['except' => '']];
public $search='';
public $formulario_id,$for_nom,$for_info,$for_tipo,$curso_id;
public $updateMode = 0;
public function render(){
if($this->curso_id){
$curso = Curso::find($this->curso_id);
$formularios = Formulario::where('for_nom','LIKE','%'.$this->search.'%')->where('for_estado',1)->where('curso_id',$this->curso_id)->paginate(20);
return view('livewire.formularios.index',["formularios"=>$formularios,"curso"=>$curso]);
}else{
$formularios = Formulario::where('for_nom','LIKE','%'.$this->search.'%')->where('for_estado',1)->where('for_tipo','encuesta')->paginate(20);
return view('livewire.formularios.index',["formularios"=>$formularios]);
}
}
private function resetInputFields(){
$this->formulario_id = '';
$this->for_nom = '';
$this->emit('for_info', '');
}
public function store(){
$validatedDate = $this->validate([
'for_nom' => 'required',
'for_info' => 'required',
],
[
'for_nom.required' => 'El campo Nombre es requerido',
'for_info.required' => 'EL campo Información es requerido',
]);
if($this->curso_id){
Formulario::create([
'for_nom' => $this->for_nom,
'for_info' => $this->for_info,
'for_tipo' => "curso",
'curso_id' => $this->curso_id,
]);
}else{
$post = Formulario::create([
'for_nom' => $this->for_nom,
'for_info' => $this->for_info,
'for_tipo' => "encuesta",
]);
User::all()
->each(function(User $user) use ($post){
$user->notify(new NuevaNotificacion([
'url' => '/encuestas?search='.$post->titulo,
'titulo' => $post->titulo,
'descripcion' => 'Nueva encuesta agregada',
]));
});
}
$this->emit('alert', ['type' => 'info', 'message' => 'Formulario agregado correctamente!']);
$this->resetInputFields();
}
public function edit($id){
$this->updateMode = 2;
$formulario = Formulario::find($id);
$this->formulario_id = $id;
$this->for_nom = $formulario->for_nom;
$this->emit('for_info', $formulario->for_info);
}
public function crear(){
$this->updateMode = 1;
$this->resetInputFields();
}
public function cancel(){
$this->updateMode = 0;
$this->resetInputFields();
}
public function update(){
$validatedDate = $this->validate([
'for_nom' => 'required',
'for_info' => 'required',
],
[
'for_nom.required' => 'El campo Nombre es requerido',
'for_info.required' => 'EL campo Información es requerido',
]);
if ($this->formulario_id) {
$formulario = Formulario::find($this->formulario_id);
$formulario->update([
'for_nom' => $this->for_nom,
'for_info' => $this->for_info,
]);
$this->updateMode = 0;
$this->emit('alert', ['type' => 'info', 'message' => 'Formulario actualizado correctamente!']);
$this->resetInputFields();
}
}
public function delete($id){
if($id){
$formulario = Formulario::find($id);
$formulario->for_estado=0;
$formulario->update();
$this->emit('alert', ['type' => 'error', 'message' => 'Formulario eliminado correctamente!']);
}
}
}