Beispiel #1
0
 /**
  * Display a listing of the resource.
  *
  * @return Response
  */
 public function index()
 {
     /**
      * Return one entity
      *
      * @return one Entity
      */
     if (Input::has('id')) {
         $id = Input::get('id');
         // Check if is workerunit, when workerunit append units, if not append workerunits (assumption that it is a unit so far valid)
         $workerunitType = strpos($id, 'workerunit');
         if ($workerunitType === false) {
             $result = \MongoDB\Entity::with('hasWorkerunits')->where('_id', $id)->get();
         } else {
             $result = \MongoDB\Entity::with('hasUnit')->where('_id', $id)->get();
         }
         $result = $result->toArray();
         return $result;
     }
     $documents = $this->repository->returnCollectionObjectFor("entity")->where('documentType', 'job')->with('hasConfiguration')->with('wasAttributedToUserAgent');
     //Filter on wished for fields using using field of v2
     json_encode($documents);
     if (Input::has('filter')) {
         foreach (Input::get('filter') as $filter => $value) {
             if (is_numeric($value)) {
                 $documents = $documents->where($filter, (int) $value);
                 continue;
             }
             if ($filter == "userAgent") {
                 $filter = "user_id";
             }
             if (is_array($value)) {
                 foreach ($value as $operator => $subvalue) {
                     if ($filter == "username") {
                         $documents = $documents->where('user_id', 'like', '%' . $subvalue . '%');
                         continue;
                     }
                     if (in_array($operator, $this->operators)) {
                         if (is_numeric($subvalue)) {
                             $subvalue = (int) $subvalue;
                         }
                         if ($operator == 'like') {
                             $subvalue = '%' . $subvalue . '%';
                         }
                         // if (strpos($a,'are') !== false) {
                         // 	   echo 'true';
                         // }
                         if (strpos($filter, "hasConfiguration") !== false) {
                             $filter = explode(".", $filter);
                             $jobConf = Entity::where('documentType', '=', 'jobconf')->where(end($filter), 'like', $subvalue);
                             $allJobConfIDs = array_flatten($jobConf->get(['_id'])->toArray());
                             $documents = $documents->whereIn('jobConf_id', $allJobConfIDs);
                             continue;
                         }
                         $documents = $documents->where($filter, $operator, $subvalue);
                     }
                 }
                 continue;
             } else {
                 $value = array($value);
             }
             $documents = $documents->whereIn($filter, $value);
         }
     }
     // Make sort possible on
     if (Input::has('sortBy')) {
         $sortBy = Input::get('sortBy');
         if (Input::has('order')) {
             $order = Input::get('order');
         }
         $documents = $documents->OrderBy($sortBy, $order);
     }
     // If no sort is selected, newest jobs come on top
     if (!Input::has('sortBy')) {
         $documents = $documents->OrderBy('created_at', 'des');
     }
     // Take limit of 100 unless otherwise indicated
     // if(!$limit = (int) Input::get('limit'))
     // {
     // 	$limit = 100;
     // }
     if (!($perPage = (int) Input::get('perPage'))) {
         $perPage = 10;
     }
     if (!($page = (int) Input::get('page'))) {
         $page = 1;
         $calcPage = 0;
     } else {
         $calcPage = $page - 1;
     }
     $total = $documents->count();
     $skip = $calcPage * $perPage;
     $jobs = $documents->skip($skip)->take($perPage)->get();
     // Paginate results, total amount of records, records per page and currentPage etc.
     //todo efficiency improvement to cache $jobs for pagination
     $paginator = array("total" => $total, "perPage" => $perPage, "currentPage" => $page, "data" => $jobs->toArray());
     //dd($paginator);
     return Response::json($paginator);
     // Take limit of 100 unless otherwise indicated
     //Eager load jobConfiguration into job entity
     $entities = $documents->take($limit)->get();
     $jobs = array();
     //Push entity objects into array for paginator
     foreach ($entities as $entity) {
         array_push($jobs, $entity);
     }
     // Paginate results, current page, page of choice etc.
     if (!($perPage = (int) Input::get('perpage'))) {
         $perPage = 2;
     }
     $paginator = Paginator::make($jobs, count($entities), $perPage);
     //Return paginator
     return Response::json($paginator);
 }