/** * {@inheritDoc} */ public function boot() { // Extend Activity model to support extra fields & ratings Activity::extend(function ($model) { $model->hasOne['activity_fields'] = ['DenverArt\\ActivityFields\\Models\\ExtraFields']; $model->hasMany['ratings'] = ['DenverArt\\ActivityFields\\Models\\Rating']; $model->addDynamicMethod('scopeNotIgnored', function ($query, $user) { $query = $query->whereHas('ratings', function ($q) use($user) { $q->where('user_id', $user->getKey())->where('rating', 0); }, '<', 1); }); $model->addDynamicMethod('scopeIgnored', function ($query, $user) { $query = $query->whereHas('ratings', function ($q) use($user) { $q->where('user_id', $user->getKey())->where('rating', 0); }); }); $model->addDynamicMethod('scopeNotComplete', function ($query, $user) { $query = $query->whereHas('users', function ($q) use($user) { $q->where('user_id', $user->getKey()); }, '<', 1); }); $model->addDynamicMethod('scopeComplete', function ($query, $user) { $query = $query->whereHas('users', function ($q) use($user) { $q->where('user_id', $user->getKey()); }); }); }); // Extend User model to support ratings User::extend(function ($model) { $model->hasMany['ratings'] = ['DenverArt\\ActivityFields\\Models\\Rating']; }); // Extend Activity fields $context = $this; Event::listen('backend.form.extendFields', function ($widget) use($context) { $context->extendedActivityFields($widget); }); // Extend Activity admin listing table columns Event::listen('backend.list.extendColumns', function ($widget) { if (!$widget->getController() instanceof \DMA\Friends\Controllers\Activities) { return; } $widget->addColumns(['duration' => ['label' => 'Duration', 'relation' => 'activity_fields', 'sortable' => true, 'select' => '@duration', 'searchable' => true], 'location' => ['label' => 'Location', 'relation' => 'activity_fields', 'sortable' => true, 'select' => '@location', 'searchable' => true]]); }); }