'array' ]; /** * Perform any actions required after the model boots. * * @return void */ protected static function booted() { static::creating(function (self $model) { self::setIsSystem($model); self::setOrder($model); }); static::deleting(function (self $model) { $model->appusers()->detach(); foreach ($model->documents as $key => $document) { $document->delete(); }; }); } // * METHODS /** * Set order after the last element of the list. * * @param \Illuminate\Database\Eloquent\Model $model * @return void */ private static function setOrder(Model $model): void { $model->order = \intval(self::query()->max('order')) + 1; } /** * Set order after the last element of the list. * * @param \Illuminate\Database\Eloquent\Model $model * @return void */ private static function setIsSystem(Model $model): void { $model->is_system = ($model->is_system) ? $model->is_system : 0; } /** * Render directories. * * @param \Illuminate\Database\Eloquent\Collection | array $directories * @return \Illuminate\Database\Eloquent\Collection | array */ public static function renderDirectories($directories) { foreach ($directories as $k => $directory) { $directories[$k]->name = Directory::renameDirectory($directory, ""); } return $directories; } /** * Rename directory. * * @param Directory $model * @param string $nameDirectory * @return array */ private static function renameDirectory(Directory $model, string $nameDirectory) { if (strlen($nameDirectory)) { $nameDirectory = $model->name['fr'] . " / " . $nameDirectory; } else { $nameDirectory = $model->name['fr']; } if (isset($model->parent)) { $nameDirectory = $model->renameDirectory($model->parent, $nameDirectory); } return $nameDirectory; } /** * Rename directory. * * @return LaravelModelList */ public static function getChildrenDirectories() { $directories = []; foreach (Directory::orderBy('order', 'ASC')->get()->toArray() as $key => $value) { if (count(Directory::get()[$key]->children) === 0) { array_push($directories, Directory::get()[$key]); } } return Directory::renderDirectories($directories); } // * RELATIONSHIPS /** * One To Many Relationship Method. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function parent() { return $this->belongsTo(Directory::class, 'directory_id'); } /** * Has Many Relationship Method. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function children() { return $this->hasMany(Directory::class, 'directory_id'); } /** * MorphedByMany appusers relation * * @return \Illuminate\Database\Eloquent\Relations\MorphedByMany */ public function appusers() { return $this->morphedByMany(AppUser::class, 'directorable'); } /** * Has Many Relationship Method. * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function documents() { return $this->hasMany(Document::class, 'directory_id'); } }