コード例 #1
0
ファイル: Test.php プロジェクト: abnmt/oc-mrc-plugin
 public function getResult()
 {
     $types = TypeModel::select('id', 'title', 'sort_order', 'description')->get()->toArray();
     $categories = CategoryModel::select('id', 'title', 'sort_order')->get()->toArray();
     $courses = CourseModel::select('id', 'title')->with(['types', 'categories'])->with(['events' => function ($q) {
         $q->where('date_start', '>', \Carbon::now())->where('is_closed', '<>', 1);
     }])->get();
     foreach ($types as $type_id => &$type) {
         // $_courses = array_filter($courses, function ($course) {
         //     return $course->types->contains('id', $type->id);
         // });
         $_courses = $courses->filter(function ($course) use($type) {
             return $course->types->contains('id', $type['id']);
         });
         $type['courses'] = $_courses;
         $_cat = [];
         foreach ($categories as $cat_id => &$category) {
             // $__courses = array_filter($_courses, function ($course) {
             //     return $course->categories->contains('id', $category->id);
             // });
             $__courses = $_courses->filter(function ($course) use($category) {
                 return $course->categories->contains('id', $category['id']);
             });
             $category['courses'] = $__courses;
             $_cat[] = $category;
         }
         $type['categories'] = $_cat;
     }
     // $types->each(function ($type) use ($categories, $courses) {
     //     $_courses = $courses->filter(function ($course) use ($type) {
     //         return $course->types->contains('id', $type->id);
     //     });
     //     $type['_courses'] = $_courses;
     //     $categories->each(function ($category) use ($_courses, &$type) {
     //         $__courses = $_courses->filter(function ($course) use ($category) {
     //             return $course->categories->contains('id', $category->id);
     //         });
     //         // $type->categories[$category->id]['__courses'] = $__courses;
     //         $category['__courses'] = $__courses;
     //         // CW::info(['__', $__courses]);
     //     });
     //     // $type['_categories'] = $categories;
     //     $type['_categories'] = $_cats;
     // });
     CW::info(['Result' => $types]);
     return;
 }
コード例 #2
0
ファイル: Courses.php プロジェクト: abnmt/oc-mrc-plugin
 /**
  *  List Courses
  */
 protected function listCourses()
 {
     // Assign params
     $params = $this->params;
     $type_id = $params['type'];
     $cat_id = $params['category'];
     $search = '';
     $post = post();
     // CW::info(['POST' => $post]);
     // Check POST
     if (count($post) > 0) {
         if (array_key_exists('type', $post)) {
             $type_id = $post['type'];
         }
         if (array_key_exists('category', $post)) {
             $cat_id = $post['category'] | 0;
         }
         if (array_key_exists('search', $post)) {
             $search = $post['search'] | "";
         }
     }
     // Fetch All Types
     $types = TypeModel::select('id', 'title', 'sort_order', 'description', 'content');
     if ($type_id != 0) {
         $types = $types->where('id', $type_id);
     }
     $types = $types->get()->toArray();
     CW::info(['Types' => TypeModel::all()]);
     // Fetch All Categories
     $categories = CategoryModel::select('id', 'title', 'sort_order');
     if ($cat_id != 0) {
         $categories = $categories->where('id', $cat_id);
     }
     $categories = $categories->get()->toArray();
     $courses = new CourseModel();
     // Search query
     $search = trim($search);
     if (strlen($search)) {
         $searchableFields = ['title', 'content'];
         $courses = $courses->searchWhere($search, $searchableFields);
     }
     // Main query
     $courses = $courses->select('id', 'title', 'content', 'course_type_id', 'course_category_id', 'description_long')->with(['type' => function ($q) {
         $q->select('id');
     }, 'category' => function ($q) {
         $q->select('id');
     }, 'events' => function ($q) {
         $q->where('date_start', '>', \Carbon::now())->where('is_closed', '<>', 1)->orderBy('date_start', 'asc')->select('id', 'date_start', 'date_end', 'price', 'hours', 'course_id', 'teacher');
     }])->get();
     // Check logged User and fetch UserCourses (UserEvents) with States
     if (!is_null($cmsuser = $this->user())) {
         $user_courses = $cmsuser->userevents()->with(['course', 'state'])->get();
         // CW::info(['user_courses', $user_courses]);
     } else {
         $user_courses = null;
     }
     // Preparing Result
     $_types = [];
     foreach ($types as &$type) {
         // Filter Courses list by Type
         $_courses = $courses->filter(function ($course) use($type) {
             // return $course->types->contains('id', $type['id']);
             return $course->course_type_id == $type['id'];
         });
         // Skip empty courses type
         if ($_courses->count() == 0) {
             continue;
         }
         $type['courses'] = $_courses;
         // JSON fix
         if (is_string($type['content'])) {
             $type['content'] = json_decode($type['content'], true);
         }
         $_categories = [];
         foreach ($categories as &$category) {
             // Filter Courses list by Category
             $__courses = $_courses->filter(function ($course) use($category) {
                 // return $course->categories->contains('id', $category['id']);
                 return $course->course_category_id == $category['id'];
             });
             // Skip empty courses type
             if ($__courses->count() == 0) {
                 continue;
             }
             $__courses = $__courses->each(function (&$course) {
                 // CW::info(['Events Count' => $course->events->count()]);
                 // Add Last Event to Course
                 if (!$course->events->count()) {
                     $last_event = $course->events()->orderBy('date_start', 'desc')->select('id', 'price', 'hours', 'course_id', 'teacher')->take(1)->first();
                     $last_event['last'] = true;
                     $course['events'][] = $last_event;
                     // CW::info(['Last Event' => $course]);
                 }
             });
             // Sorting Courses by Event dates
             $__courses = $__courses->sortByDesc(function ($course) {
                 if ($course->events->first() && ($start = $course->events->first()->date_start)) {
                     return -$start->timestamp;
                 } else {
                     return false;
                 }
             });
             // CW::info(['Courses' => $__courses]);
             $___courses = $__courses->toArray();
             foreach ($___courses as &$course) {
                 // Fetch UserEvents with States
                 if (!is_null($user_courses) && !is_null($user_course = $user_courses->where('course_id', $course['id'])->where('course_type_id', $type['id'])->where('course_category_id', $category['id'])->first())) {
                     // extract($user_course->toArray());
                     $course['state'] = $user_course->state->title;
                 }
                 // CW::info(['Event Count' => count($course['events'])]);
                 // if ($events_count = count($course['events']) == 0) {
                 //     $last_event = CourseModel::where('id', $course['id'])
                 //         ->with([
                 //             'events' => function ($q) {
                 //                 $q
                 //                     ->orderBy('date_start', 'desc')
                 //                     ->select('id', 'date_start', 'date_end', 'price', 'hours', 'course_id', 'teacher')
                 //                     ->take(1)
                 //                 ;
                 //             },
                 //         ])
                 //         ->get()
                 //     ;
                 //     CW::info(['Last Event' => $last_event]);
                 // }
                 // Assign fast select fields
                 $course['prices'] = [];
                 $course['teachers'] = [];
                 $course['hours'] = [];
                 foreach ($course['events'] as $event) {
                     if (trim($event['price']) != '') {
                         $course['prices'][] = $event['price'];
                     }
                     if (trim($event['teacher']) != '') {
                         $course['teachers'][] = $event['teacher'];
                     }
                     if (trim($event['hours']) != '') {
                         $course['hours'][] = $event['hours'];
                     }
                 }
                 // CW::info($course);
             }
             $category['courses'] = $___courses;
             $_categories[$category['id']] = $category;
         }
         $type['categories'] = $_categories;
         $_types[$type['id']] = $type;
     }
     //
     CW::info(['Result' => $_types]);
     return $_types;
 }
コード例 #3
0
ファイル: UserCourses.php プロジェクト: abnmt/oc-mrc-plugin
 /**
  *  List Courses
  */
 protected function listCourses()
 {
     $params = $this->params;
     $type_id = $params['type'];
     $cat_id = $params['category'];
     $types = TypeModel::select('id', 'title', 'sort_order', 'description');
     if ($type_id != 0) {
         $types = $types->where('id', $type_id);
     }
     $types = $types->get()->toArray();
     $categories = CategoryModel::select('id', 'title', 'sort_order');
     if ($cat_id != 0) {
         $categories = $categories->where('id', $cat_id);
     }
     $categories = $categories->get()->toArray();
     if (is_null($cmsuser = $this->user())) {
         return null;
     }
     // $user_courses = $cmsuser->userevents()->with(['course', 'course.events'])->get();
     // CW::info(['user_courses', $user_courses]);
     // $courses = $courses->select('id', 'title', 'content', 'course_type_id', 'course_category_id')
     $userevents = $cmsuser->userevents()->with(['state', 'event', 'course' => function ($q) {
         $q->with(['events' => function ($q) {
             $q->where('date_start', '>', \Carbon::now())->where('is_closed', '<>', 1)->orderBy('date_start', 'asc')->select('id', 'date_start', 'date_end', 'price', 'hours', 'course_id', 'course_type_id', 'course_category_id', 'teacher');
         }]);
     }])->get();
     // CW::info(['userevents' => $userevents]);
     // CW::info(['events' => $cmsuser->events()->get()]);
     if (!$userevents) {
         return;
     }
     // Delete deleted UserEvents
     $userevents->each(function ($userevent) {
         if ($userevent->state_id == 9) {
             $userevent->delete();
         }
     });
     // Filter UserEvents from deleted UserEvents
     $userevents = $userevents->filter(function ($userevent) {
         return $userevent->state_id != 9;
     });
     //
     $_types = [];
     foreach ($types as $type_id => &$type) {
         $_userevents = $userevents->filter(function ($course) use($type) {
             return $course->course_type_id == $type['id'];
         });
         // CW::info(['_userevents' => $_userevents]);
         if ($_userevents->count() == 0) {
             continue;
         }
         $type['userevents'] = $_userevents;
         $_categories = [];
         foreach ($categories as $cat_id => &$category) {
             $__userevents = $_userevents->filter(function ($course) use($category) {
                 return $course->course_category_id == $category['id'];
             });
             // CW::info(['__userevents' => $_userevents]);
             if ($__userevents->count() == 0) {
                 continue;
             }
             // Sorting Courses by Event dates
             $__userevents = $__userevents->sortByDesc(function ($userevent) {
                 CW::info(['UserEvent' => $userevent]);
                 if ($userevent->course->events->first() && ($start = $userevent->course->events->first()->date_start)) {
                     return -$start->timestamp;
                 } else {
                     return false;
                 }
             });
             $___userevents = $__userevents->toArray();
             foreach ($___userevents as $course_id => &$course) {
                 // CW::info(['userevent_course' => $course]);
                 // $events = $course['course']['events'];
                 // CW::info(is_null($course['course']));
                 if (is_null($course['course'])) {
                     continue;
                 }
                 // $course = array_merge($course, $course['course']);
                 // CW::info(array_merge($course, $course['course']));
                 // CW::info($course);
                 $course['title'] = $course['course']['title'];
                 $course['description_long'] = $course['course']['description_long'];
                 $course['events'] = collect($course['course']['events'])->filter(function ($event) use($type, $category) {
                     return $event['course_type_id'] == $type['id'] && $event['course_category_id'] == $category['id'];
                 });
                 $course['prices'] = [];
                 $course['teachers'] = [];
                 $course['hours'] = [];
                 foreach ($course['events'] as $event) {
                     if (trim($event['price']) != '') {
                         $course['prices'][] = $event['price'];
                     }
                     if (trim($event['teacher']) != '') {
                         $course['teachers'][] = $event['teacher'];
                     }
                     if (trim($event['hours']) != '') {
                         $course['hours'][] = $event['hours'];
                     }
                 }
             }
             $category['userevents'] = $___userevents;
             $_categories[$category['id']] = $category;
         }
         $type['categories'] = $_categories;
         $_types[$type['id']] = $type;
     }
     //
     CW::info(['Result' => $_types]);
     return $_types;
 }