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/Cursos.php
<?php

namespace App\Http\Livewire;

use Livewire\Component;
use Livewire\WithPagination;
use App\Models\Cursocategoria;
use App\Models\Curso;
use App\Models\Importanciacurso;
use App\Models\Alcancecurso;
use App\Models\Objetivocurso;
use App\Models\Tutorcurso;
use App\Models\Recursocurso;
use App\Models\Certificadocurso;
use App\Models\Podcastcurso;
use App\Models\Capsulacurso;
use Livewire\WithFileUploads;
use App\Models\Emoticon;
use Image;
use App\File;
use DB;
use App\Models\User;
use App\Notifications\NuevaNotificacion;
use Auth;

class Cursos extends Component{

    use WithPagination;
    use WithFileUploads;

    protected $paginationTheme = 'bootstrap';

    public $search='';

    public $opcion='',$tipo='';

    public $curso_id,$titulo,$logo,$logoupdate,$categoria_id,$importancia,$importancia_id,$alcance,$alcance_id,$objetivo,$objetivo_id,$tutor,$tutor_id,$recurso,$recurso_id,$certificado,$certificado_id,$podcast,$podcast_id,$capsula_id,$capsula_titulo,$porcentaje,$fincurso;

    public $capsula;

    public $updateMode = 0;

    public function render(){

        $cursos = DB::table('cursos as c')
            ->join('cursocategorias as cc','c.categoria_id','cc.id')
            ->select('c.*','cc.titulo as categoria')
            ->where('c.titulo','LIKE','%'.$this->search.'%')->where('c.estado',1)->paginate(20);
        
        $categorias = Cursocategoria::where('estado',1)->get();

        $capsulas = Capsulacurso::where('curso_id',$this->curso_id)->get();
        
        return view('livewire.cursos.index',["cursos"=>$cursos,"categorias"=>$categorias,"capsulas"=>$capsulas]); 
    
    }

    private function resetInputFields(){
        $this->curso_id = '';
        $this->titulo = '';
        $this->logo = '';
        $this->logoupdate = '';
        $this->categoria_id = '';
        $this->emit('importancia', '');
        $this->opcion = '';
        $this->tipo = '';
        $this->importancia_id = '';
        $this->emit('alcance', '');
        $this->alcance_id = '';
        $this->emit('objetivo', '');
        $this->objetivo_id = '';
        $this->emit('tutor', '');
        $this->tutor_id = '';
        $this->emit('recurso', '');
        $this->recurso_id = '';
        $this->emit('certificado', '');
        $this->certificado_id = '';
        $this->emit('podcast', '');
        $this->podcast_id = '';
        $this->capsula = '';
        $this->capsula_id = '';
        $this->capsula_titulo = '';
        $this->porcentaje = '';
        $this->fincurso = '';
    }

    public function store(){

        $validatedDate = $this->validate([
            'titulo' => 'required',
            'logo' => 'required',
            'categoria_id' => 'required',
            'porcentaje' => 'required',
            'fincurso' => 'required',
        ],
        [
            'titulo.required' => 'El campo titulo es requerido',
            'logo.required' => 'EL campo logo es requerido',
            'categoria_id.required' => 'EL campo categoria de curso es requerido',
            'porcentaje' => 'El campo porcentaje es requerido',
            'fincurso' => 'El campo Finalización del curso es requerido',
        ]);

        if($file = $this->logo) {
            $control=0;
            $nombre = rand().".".$file->getClientOriginalExtension();
            while ($control == 0) {
                if (is_file( public_path() . '/images/cursos/' . $nombre )) {
                    $nombre = rand() . $nombre;
                }else{
                    Image::make($this->logo)
                        ->heighten(1000)
                        ->save(public_path() . '/images/cursos/' . $nombre);
                    $control=1;
                }
            }
        }

        $post = Curso::create([
            'titulo' => $this->titulo,
            'logo' => $nombre,
            'categoria_id' => $this->categoria_id,
            'porcentaje' => $this->porcentaje,
            'fincurso' => $this->fincurso,
        ]);

        User::all()
            ->each(function(User $user) use ($post){
                $user->notify(new NuevaNotificacion([
                    'url' => '/e-learning/curso/'.$post->id,
                    'titulo' => $post->titulo,
                    'descripcion' => 'Nuevo curso agregado',
                ]));
            });

        session()->flash('success', 'Curso agregado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();

    }

    public function edit($id){

        $this->updateMode = 2;
        $curso = Curso::where('id',$id)->first();
        $this->curso_id = $id;
        $this->titulo = $curso->titulo;
        $this->logo = $curso->logo;
        $this->categoria_id = $curso->categoria_id;
        $this->porcentaje = $curso->porcentaje;
        $this->fincurso = $curso->fincurso;
    }

    public function crear(){

        $this->updateMode = 1;
        $this->resetInputFields();

    }

    public function cancel(){

        $this->updateMode = 0;
        $this->resetInputFields();

    }

    public function update(){

        $validatedDate = $this->validate([
            'titulo' => 'required',
            'porcentaje' => 'required',
            'fincurso' => 'required',
        ],
        [
            'titulo.required' => 'El campo titulo es requerido',
            'porcentaje' => 'El campo porcentaje es requerido',
            'fincurso' => 'El campo finalización del curso es requerido',
        ]);

        if ($this->curso_id) {

            $curso = Curso::find($this->curso_id);
            
            if($this->logoupdate) {
                $file = $this->logoupdate;
                $control=0;
                $nombre = rand().".".$file->getClientOriginalExtension();
                while ($control == 0) {
                    if (is_file( public_path() . '/images/cursos/' . $nombre )) {
                        $nombre = rand() . $nombre;
                    }else{
                        Image::make($this->logoupdate)
                            ->heighten(1000)
                            ->save(public_path() . '/images/cursos/' . $nombre);
                        $control=1;
                    }
                }
                $curso->update([
                    'titulo' => $this->titulo,
                    'categoria_id' => $this->categoria_id,
                    'logo' => $nombre,
                    'porcentaje' => $this->porcentaje,
                    'fincurso' => $this->fincurso,
                ]);
            }else{
                $curso->update([
                    'titulo' => $this->titulo,
                    'categoria_id' => $this->categoria_id,
                    'porcentaje' => $this->porcentaje,
                    'fincurso' => $this->fincurso,
                ]);
            }
            
            
            $this->updateMode = 0;
            session()->flash('success', 'Curso actualizado correctamente');
            $this->resetInputFields();

        }
    }

    public function delete($id){
        if($id){

            $curso = Curso::find($id);
            if($curso->estado == 1){
                $curso->estado=0;
                session()->flash('error', 'Curso desactivado correctamente');
            }else{
                $curso->estado=1;
                session()->flash('success', 'Curso activado correctamente');
            }

            $curso->update();
        }
    }

    //Importancia
    public function crearimportancia($id){

        $importancia = Importanciacurso::where('curso_id',$id)->first();
        $this->opcion='importancia';
        $this->curso_id=$id;

        if($importancia){
            $this->emit('importancia', $importancia->importancia); 
            $this->importancia_id = $importancia->id;
            $this->tipo='editar';
        }

        $this->updateMode = 3;

    }
    public function storeimportancia(){

        $validatedDate = $this->validate([
            'importancia' => 'required',
        ],
        [
            'importancia.required' => 'El campo importancia es requerido',
        ]);

        Importanciacurso::create([
            'importancia' => $this->importancia,
            'curso_id' => $this->curso_id
        ]);

        session()->flash('success', 'Importancia agregada correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();


    }
    public function editimportancia(){

        $validatedDate = $this->validate([
            'importancia' => 'required',
        ],
        [
            'importancia.required' => 'El campo importancia es requerido',
        ]);

        $importancia = Importanciacurso::find($this->importancia_id);
        
        $importancia->update([
            'importancia' => $this->importancia,
        ]);

        session()->flash('success', 'Importancia actualizada correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();

    }
    //Alcance
    public function crearalcance($id){

        $alcance = Alcancecurso::where('curso_id',$id)->first();
        $this->opcion='alcance';
        $this->curso_id=$id;

        if($alcance){
            $this->emit('alcance', $alcance->alcance); 
            $this->alcance_id = $alcance->id;
            $this->tipo='editar';
        }

        $this->updateMode = 4;

    }

    public function storealcance(){

        $validatedDate = $this->validate([
            'alcance' => 'required',
        ],
        [
            'alcance.required' => 'El campo alcance es requerido',
        ]);

        Alcancecurso::create([
            'alcance' => $this->alcance,
            'curso_id' => $this->curso_id
        ]);

        session()->flash('success', 'Alcance agregado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();


    }
    public function editalcance(){

        $validatedDate = $this->validate([
            'alcance' => 'required',
        ],
        [
            'alcance.required' => 'El campo alcance es requerido',
        ]);

        $alcance = Alcancecurso::find($this->alcance_id);
        
        $alcance->update([
            'alcance' => $this->alcance,
        ]);

        session()->flash('success', 'Alcance actualizado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();

    }

    //objetivo
    public function crearobjetivo($id){

        $objetivo = Objetivocurso::where('curso_id',$id)->first();
        $this->opcion='objetivo';
        $this->curso_id=$id;

        if($objetivo){
            $this->emit('objetivo', $objetivo->objetivo); 
            $this->objetivo_id = $objetivo->id;
            $this->tipo='editar';
        }

        $this->updateMode = 5;

    }

    public function storeobjetivo(){

        $validatedDate = $this->validate([
            'objetivo' => 'required',
        ],
        [
            'objetivo.required' => 'El campo objetivo es requerido',
        ]);

        Objetivocurso::create([
            'objetivo' => $this->objetivo,
            'curso_id' => $this->curso_id
        ]);

        session()->flash('success', 'Objetivo agregado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();


    }
    public function editobjetivo(){

        $validatedDate = $this->validate([
            'objetivo' => 'required',
        ],
        [
            'objetivo.required' => 'El campo objetivo es requerido',
        ]);

        $objetivo = Objetivocurso::find($this->objetivo_id);
        
        $objetivo->update([
            'objetivo' => $this->objetivo,
        ]);

        session()->flash('success', 'Objetivo actualizado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();

    }

    //tutor
    public function creartutor($id){

        $tutor = Tutorcurso::where('curso_id',$id)->first();
        $this->opcion='tutor';
        $this->curso_id=$id;

        if($tutor){
            $this->emit('tutor', $tutor->tutor); 
            $this->tutor_id = $tutor->id;
            $this->tipo='editar';
        }

        $this->updateMode = 5;

    }

    public function storetutor(){

        $validatedDate = $this->validate([
            'tutor' => 'required',
        ],
        [
            'tutor.required' => 'El campo tutor es requerido',
        ]);

        Tutorcurso::create([
            'tutor' => $this->tutor,
            'curso_id' => $this->curso_id
        ]);

        session()->flash('success', 'Tutor agregado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();


    }
    public function edittutor(){

        $validatedDate = $this->validate([
            'tutor' => 'required',
        ],
        [
            'tutor.required' => 'El campo tutor es requerido',
        ]);

        $tutor = Tutorcurso::find($this->tutor_id);
        
        $tutor->update([
            'tutor' => $this->tutor,
        ]);

        session()->flash('success', 'Tutor actualizado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();

    }
    //recurso
    public function crearrecurso($id){

        $recurso = Recursocurso::where('curso_id',$id)->first();
        $this->opcion='recurso';
        $this->curso_id=$id;

        if($recurso){
            $this->emit('recurso', $recurso->recurso); 
            $this->recurso_id = $recurso->id;
            $this->tipo='editar';
        }

        $this->updateMode = 6;

    }

    public function storerecurso(){

        $validatedDate = $this->validate([
            'recurso' => 'required',
        ],
        [
            'recurso.required' => 'El campo recurso es requerido',
        ]);

        Recursocurso::create([
            'recurso' => $this->recurso,
            'curso_id' => $this->curso_id
        ]);

        session()->flash('success', 'Recurso agregado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();


    }
    public function editrecurso(){

        $validatedDate = $this->validate([
            'recurso' => 'required',
        ],
        [
            'recurso.required' => 'El campo recurso es requerido',
        ]);

        $recurso = Recursocurso::find($this->recurso_id);
        
        $recurso->update([
            'recurso' => $this->recurso,
        ]);

        session()->flash('success', 'Recurso actualizado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();

    }
    //certificado
    public function crearcertificado($id){

        $certificado = Certificadocurso::where('curso_id',$id)->first();
        $this->opcion='certificado';
        $this->curso_id=$id;

        if($certificado){
            $this->emit('certificado', $certificado->certificado); 
            $this->certificado_id = $certificado->id;
            $this->tipo='editar';
        }

        $this->updateMode = 7;

    }

    public function storecertificado(){

        $validatedDate = $this->validate([
            'certificado' => 'required',
        ],
        [
            'certificado.required' => 'El campo certificado es requerido',
        ]);

        Certificadocurso::create([
            'certificado' => $this->certificado,
            'curso_id' => $this->curso_id
        ]);

        session()->flash('success', 'Certificado agregado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();


    }
    public function editcertificado(){

        $validatedDate = $this->validate([
            'certificado' => 'required',
        ],
        [
            'certificado.required' => 'El campo certificado es requerido',
        ]);

        $certificado = Certificadocurso::find($this->certificado_id);
        
        $certificado->update([
            'certificado' => $this->certificado,
        ]);

        session()->flash('success', 'Certificado actualizado correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();

    }
    //podcast
    public function crearpodcast($id){

        $podcast = Podcastcurso::where('curso_id',$id)->first();
        $this->opcion='podcast';
        $this->curso_id=$id;

        if($podcast){
            $this->emit('podcast', $podcast->podcast); 
            $this->podcast_id = $podcast->id;
            $this->tipo='editar';
        }

        $this->updateMode = 8;

    }

    public function storepodcast(){

        $validatedDate = $this->validate([
            'podcast' => 'required',
        ],
        [
            'podcast.required' => 'El campo podcast es requerido',
        ]);

        Podcastcurso::create([
            'podcast' => $this->podcast,
            'curso_id' => $this->curso_id
        ]);

        session()->flash('success', 'Podcast agregada correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();


    }
    public function editpodcast(){

        $validatedDate = $this->validate([
            'podcast' => 'required',
        ],
        [
            'podcast.required' => 'El campo podcast es requerido',
        ]);

        $podcast = Podcastcurso::find($this->podcast_id);
        
        $podcast->update([
            'podcast' => $this->podcast,
        ]);

        session()->flash('success', 'Podcast actualizada correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();

    }
    //Capsula
    public function crearcapsula($id){

        $this->opcion='capsula';
        $this->curso_id=$id;

        $this->updateMode = 8;

    }

    public function storecapsula(){

        $validatedDate = $this->validate([
            'capsula_titulo' => 'required',
            'capsula' => 'required',
        ],
        [
            'capsula_titulo.required' => 'El campo titulo es requerido',
            'capsula.required' => 'El campo capsula es requerido',
        ]);

        if($file = $this->capsula) {
            $control=0;
            $nombre = rand().".".$file->getClientOriginalExtension();
            while ($control == 0) {
                if (is_file(public_path().'/videos/capsula'.$nombre )) {
                    $nombre = rand() . $nombre;
                }else{
                    $this->capsula->storeAs('/videos/capsula',$nombre,'subidavideos');
                    $control=1;
                }
            }
        }

        Capsulacurso::create([
            'titulo' => $this->capsula_titulo,
            'capsula' => $nombre,
            'curso_id' => $this->curso_id,
        ]);

        session()->flash('success', 'Capsula agregada correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();


    }
    public function editcapsula($id){

        $this->opcion='capsula';
        $this->tipo='editar';

        $this->updateMode = 8;

        $capsula = Capsulacurso::find($id);

        $this->capsula_id = $capsula->id;
        $this->capsula_titulo = $capsula->titulo;
        $this->capsula = $capsula->capsula;

    }
    public function updatecapsula(){

        $validatedDate = $this->validate([
            'capsula_titulo' => 'required',
        ],
        [
            'capsula_titulo.required' => 'El campo titulo es requerido',
        ]);

        $capsula = Capsulacurso::find($this->capsula_id);

        if($capsula->capsula != $this->capsula){

            if($file = $this->capsula) {
                $control=0;
                $nombre = rand().".".$file->getClientOriginalExtension();
                while ($control == 0) {
                    if (is_file(public_path().'/videos/capsula'.$nombre )) {
                        $nombre = rand() . $nombre;
                    }else{
                        $this->capsula->storeAs('/videos/capsula',$nombre,'subidavideos');
                        $control=1;
                    }
                }
            }

            $capsula->update([
                'titulo' => $this->capsula_titulo,
                'capsula' => $nombre,
            ]);
        }else{
            $capsula->update([
                'titulo' => $this->capsula_titulo,
            ]);
        }

        session()->flash('success', 'Capsula actualizada correctamente!');

        $this->updateMode = 0;
        $this->resetInputFields();


    }

    public function deletecapsula($id){

        $emociones = Emoticon::where('capsula_id',$id)->get();

        foreach($emociones as $emo){
            $emo->delete();
        }

        $capsula = Capsulacurso::find($id);

        if(unlink(public_path().'/videos/capsula/'.$capsula->capsula)) {
            $capsula->delete();
        }
    }
}