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();
}
}
}