예제 #1
0
 /**
  * {@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]]);
     });
 }