コード例 #1
0
ファイル: apiController.php プロジェクト: harixxy/CrowdTruth
 /**
  * Display a listing of the resource.
  *
  * @return Response
  */
 public function index()
 {
     // $documents = $this->repository->returnCollectionObjectFor($collection)->where('documentType', $documentType);
     // if(Input::has('id')){
     // 	$documents = $this->repository->returnCollectionObjectFor("crowdagent")->with('hasDoneJobs')->with('hasGeneratedworkerunits');
     // } else {
     //The following  block returns one worker for the individual worker view
     if (Input::has('id')) {
         $id = Input::get('id');
         $result = \MongoDB\CrowdAgent::with('hasGeneratedWorkerunits.hasJob')->with('hasGeneratedWorkerunits.hasUnit')->where('_id', $id)->get();
         $result = $result->toArray();
         $flattened = array();
         foreach ($result as $resultValue) {
             if (count($resultValue['hasGeneratedWorkerunits']) > 0) {
                 $resultValue['jobs'] = array();
                 foreach ($resultValue['hasGeneratedWorkerunits'] as $hasGeneratedWorkerunitKey => $hasGeneratedWorkerunitVal) {
                     array_push($resultValue['jobs'], $hasGeneratedWorkerunitVal['hasJob']);
                     unset($resultValue['hasGeneratedWorkerunits'][$hasGeneratedWorkerunitKey]['hasJob']);
                 }
                 $resultValue['jobs'] = array_unique($resultValue['jobs'], SORT_REGULAR);
                 $resultValue['units'] = array();
                 foreach ($resultValue['hasGeneratedWorkerunits'] as $hasGeneratedWorkerunitKey => $hasGeneratedWorkerunitVal) {
                     array_push($resultValue['units'], $hasGeneratedWorkerunitVal['hasUnit']);
                     unset($resultValue['hasGeneratedWorkerunits'][$hasGeneratedWorkerunitKey]['hasUnit']);
                 }
                 $resultValue['units'] = array_unique($resultValue['units'], SORT_REGULAR);
                 array_push($flattened, $resultValue);
             }
         }
         return $flattened;
     }
     $documents = $this->repository->returnCollectionObjectFor("crowdagent")->with('hasGeneratedWorkerunits');
     if (Input::has('filter')) {
         foreach (Input::get('filter') as $filter => $value) {
             if (is_numeric($value)) {
                 $documents = $documents->where($filter, (int) $value);
                 continue;
             }
             if (is_array($value)) {
                 foreach ($value as $operator => $subvalue) {
                     if (in_array($operator, $this->operators)) {
                         if (is_numeric($subvalue)) {
                             $subvalue = (int) $subvalue;
                         }
                         if ($operator == 'like') {
                             $subvalue = '%' . $subvalue . '%';
                         }
                         $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');
     }
     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());
     return Response::json($paginator);
 }