Server IP : / Your IP : 10.244.4.16 [ Web Server : nginx/1.25.3 System : Linux escuela-portal-app-54f56585bc-kst6g 5.15.0-1084-azure #93-Ubuntu SMP Sat Mar 15 14:12:29 UTC 2025 x86_64 User : root ( 0) PHP Version : 8.2.13 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, Domains : 0 Domains MySQL : OFF | cURL : ON | WGET : OFF | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/app/app/Models/ |
Upload File : |
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; class Conference extends Model { use HasFactory; protected $fillable = [ 'id', 'name', 'file', 'start_date', 'end_date', 'data', 'slug', 'icon' ]; protected $casts = [ 'data' => 'array', ]; protected static function boot() { parent::boot(); // Asignar el slug antes de crear el registro static::creating(function ($conference) { $originalSlug = $proposedSlug = Str::slug($conference->name); $count = 1; while (static::where('slug', $proposedSlug)->exists()) { // Si el slug ya existe, agregar un sufijo numérico $proposedSlug = $originalSlug . '-' . $count; $count++; } $conference->slug = $proposedSlug; }); } public function saveFile($file = null, $url) { try { Storage::disk('files_base64')->delete($url); } catch (\Throwable $th) { } if ($file) { /** Almacena archivo */ $file = $file[0] ?? $file; $file_base64 = base64_decode(substr($file['content'], strpos($file['content'], ",") + 1)); Storage::disk('files_base64')->put($url, $file_base64); } } public function getFile($ext, $letter, $url, $id = null) { $path = ''; if (isset($url)) { try { $path = [ 'name' => $letter . ($id ?? $this->id) . '.' . $ext, 'type' => $ext, 'content' => getHeader($ext) . base64_encode(Storage::get('public/' . str_replace('/storage/', '', $url))), ]; } catch (\Throwable $th) { $path = ''; } } return $path; } public function guests() { return $this->hasMany(GuestConference::class, 'conference_id'); } public function createPage($name) { $page = Page::create([ 'name' => $name, 'slug' => '/congresos/'.$this->slug, 'is_menu' => false ])->id; /** Sección de video */ PageSection::updateOrCreate( ['page_id' => $page, 'section_id' => 2], ['order' => 1, 'data' => [ 'title' => '', 'text' => '' ]] ); /** seccion de invitados */ PageSection::updateOrCreate( ['page_id' => $page, 'section_id' => 22], ['order' => 2, 'data' => [ 'title' => '', 'text' => '' ]] ); /** seccion de galeria */ PageSection::updateOrCreate( ['page_id' => $page, 'section_id' => 21], ['order' => 3, 'data' => [ 'title' => '', 'text' => '' ]] ); } public function updateFullData($request, $create = false) { $this->update($request); $this->saveFile($request['document'] ?? null, 'doc/conference/D' . $this->id . '.pdf'); $this->file = isset($request['document']) ? '/storage/doc/conference/D' . $this->id . '.pdf' : null; $this->saveFile($request['image'] ?? null, 'img/conference/icons/I' . $this->id . '.png'); $this->icon = isset($request['image']) ? '/storage/img/conference/icons/I' . $this->id . '.png' : null; $this->save(); //Invitados foreach ($request['guests'] ?? [] as $value) { $guest = GuestConference::updateOrCreate( ['id' => $value['id'] ?? 0], [ 'name' => $value['name'], 'description' => $value['description'], 'conference_id' => $this->id, 'country' => $value['country'], ] ); $guest->saveImage($value['image']); } //Construcción de la pagina if($create){ $this->createPage($request['name']); } } public function getFullData() { return [ 'name' => $this->name, 'start_date' => $this->start_date, 'end_date' => $this->end_date, 'document' => $this->getFile('pdf', 'D', $this->file), 'image' => $this->getFile('png', 'I', $this->icon), 'guests' => collect($this->guests)->map(function ($item) { return $item->getFullInfo(); })->all(), ]; } public function getGallery() { return [ 'images' => collect($this->data)->map(function ($item) use (&$cont) { $cont++; return $this->getFile('jpg', 'P', $item, $cont); })->all(), ]; } public function updateGallery($request) { //Elimina imagenes try { foreach ($this->data as $value) { Storage::disk('files_base64')->delete($value); } } catch (\Throwable $th) { //throw $th; } foreach ($request['images'] as $key => $value) { $url = "img/conference/gallery/" . $this->id . "/P" . $key . ".jpg"; $this->saveFile($value, $url); $galleryUrls[] = '/storage/' . $url; } $this->data = $galleryUrls ?? null; $this->save(); //Guarda las nuevas } }