HEX
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/8.0.30
System: Linux multiplicar 3.10.0-1160.102.1.el7.x86_64 #1 SMP Tue Oct 17 15:42:21 UTC 2023 x86_64
User: root (0)
PHP: 8.0.30
Disabled: NONE
Upload Files
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!']);
        }
    }

}