LessonScheduleCriteria.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace App\Repositories\Criteria\School;
  3. use App\Repositories\Enums\ModelStatusEnum;
  4. use App\Repositories\Enums\PermissionEnum;
  5. use App\Repositories\Enums\School\ScheduleTypeEnum;
  6. use Illuminate\Http\Request;
  7. use Prettus\Repository\Contracts\CriteriaInterface;
  8. use Prettus\Repository\Contracts\RepositoryInterface;
  9. /**
  10. * Class LessonScheduleCriteria.
  11. *
  12. * @package namespace App\Repositories\Criteria\School;
  13. */
  14. class LessonScheduleCriteria implements CriteriaInterface
  15. {
  16. private $request;
  17. public function __construct(Request $request = null)
  18. {
  19. if (is_null($request)) {
  20. $this->request = \request();
  21. } else {
  22. $this->request = $request;
  23. }
  24. }
  25. /**
  26. * Apply criteria in query repository
  27. *
  28. * @param string $model
  29. * @param RepositoryInterface $repository
  30. *
  31. * @return mixed
  32. */
  33. public function apply($model, RepositoryInterface $repository)
  34. {
  35. if ($this->request->filled('teach_title')) {
  36. $teach_title = $this->request->get('teach_title');
  37. $model = $model->where('teach_title', 'like', "%{$teach_title}%");
  38. }
  39. if ($this->request->filled('term_id')) {
  40. $term_id = $this->request->get('term_id');
  41. $model = $model->where('term_id', '=', $term_id);
  42. }
  43. if ($this->request->filled('lesson_teacher_id')) {
  44. $lesson_teacher_id = $this->request->get('lesson_teacher_id');
  45. $model = $model->where('lesson_teacher_id', '=', $lesson_teacher_id);
  46. }
  47. if ($this->request->filled('week')) {
  48. $week = $this->request->get('week');
  49. $model = $model->where('week', '=', $week);
  50. }
  51. if ($this->request->filled('time_id')) {
  52. $time_id = $this->request->get('time_id');
  53. $model = $model->where('time_id', '=', $time_id);
  54. }
  55. if ($this->request->filled('day')) {
  56. $day = $this->request->get('day');
  57. $model = $model->where('day', '=', $day);
  58. }
  59. if ($this->request->filled('week_index')) {
  60. $week_index = $this->request->get('week_index');
  61. $model = $model->where('week_index', '=', $week_index);
  62. }
  63. if ($this->request->filled('lesson_id')) {
  64. $lesson_id = $this->request->get('lesson_id');
  65. $model = $model->where('lesson_id', '=', $lesson_id);
  66. }
  67. if ($this->request->filled('lesson_name')) {
  68. $lesson_name = $this->request->get('lesson_name');
  69. $model = $model->whereHas('lesson', function ($query) use ($lesson_name) {
  70. return $query->where('name', 'like', "%{$lesson_name}%");
  71. });
  72. }
  73. if ($this->request->filled('grade_id')) {
  74. $grade_id = $this->request->get('grade_id');
  75. $model = $model->where('grade_id', '=', $grade_id);
  76. }
  77. if ($this->request->filled('grade_name')) {
  78. $grade_name = $this->request->get('grade_name');
  79. $model = $model->whereHas('grade', function ($query) use ($grade_name) {
  80. return $query->where('name', 'like', "%{$grade_name}%");
  81. });
  82. }
  83. if ($this->request->filled('room_id')) {
  84. $room_id = $this->request->get('room_id');
  85. $model = $model->where('room_id', '=', $room_id);
  86. }
  87. if ($this->request->filled('teacher_id')) {
  88. $teacher_id = $this->request->get('teacher_id');
  89. $model = $model->where('teacher_id', '=', $teacher_id);
  90. }
  91. if ($this->request->filled('teacher_name')) {
  92. $teacher_name = $this->request->get('teacher_name');
  93. $model = $model->whereHas('teacher', function ($query) use ($teacher_name) {
  94. return $query->where('name', 'like', "%{$teacher_name}%");
  95. });
  96. }
  97. if ($this->request->filled('status')) {
  98. $status = $this->request->get('status');
  99. if ($status == 4) {
  100. $model = $model->where('status', '=', ModelStatusEnum::OK)->where('migrate_id', '>', 0);
  101. } else {
  102. $model = $model->where('status', '=', $status);
  103. }
  104. }
  105. $model = $model->where('term_id', $this->request->header('term-id'));
  106. $model = $model->orderByDesc('day')->where('type', ScheduleTypeEnum::LESSON);
  107. //权限控制
  108. $admin = login_admin();
  109. $source = getControllerAndFunction();
  110. $controller = $source['controller'];
  111. $method = $source['method'];
  112. if (!$admin->can(PermissionEnum::model_schedule_all) && !in_array($method, ['show'])) {
  113. //教师
  114. if ($admin->can(PermissionEnum::model_schedule_me)) {
  115. $model = $model->where('teacher_admin_id', $admin['id']);
  116. }
  117. }
  118. return $model;
  119. }
  120. }