예제 #1
0
 /**
  * @return ServiceResponse
  */
 public function route(ServiceRequest $serviceRequest)
 {
     try {
         $this->service = $this->findService($serviceRequest);
         return $this->service->route($serviceRequest);
     } catch (\Psc\Form\ValidatorException $e) {
         $this->logError($e, $this->debugLevel, 2);
         throw HTTPException::BadRequest(sprintf("Beim Validieren der Daten ist ein Fehler aufgetreten. %s", $e->getMessage()), $e, array_merge(array('Content-Type' => 'text/html'), $this->metadataGenerator->validationError($e)->toHeaders()));
     } catch (\Psc\Form\ValidatorExceptionList $list) {
         $this->logError($list, $this->debugLevel, 2);
         throw $this->err->validationResponse($list, $this->request->accepts('application/json') ? ServiceResponse::JSON : ServiceResponse::HTML, $this->metadataGenerator);
     }
 }
예제 #2
0
 /**
  *
  * @controller-api
  * @TODO orderby?
  */
 public function getEntities(array $query = array(), $subResource = NULL)
 {
     if ($subResource === 'search') {
         return $this->getEntitySearchPanel($this->getEntityMeta(), $query);
     } elseif ($subResource !== NULL && array_key_exists($subResource, $this->customActions)) {
         return $this->callCustomAction($this->customActions[$subResource], array($query));
     }
     if (array_key_exists('autocomplete', $query) && $query['autocomplete'] === 'true') {
         $entityMeta = $this->getEntityMeta();
         $fields = array_keys($entityMeta->getAutoCompleteFields());
         $maxResults = isset($query['maxResults']) ? max(1, (int) $query['maxResults']) : NULL;
         $entities = $this->doAutoCompleteEntities($fields, $query['search'], array_key_exists('filters', $query) ? (array) $query['filters'] : array(), $maxResults);
         $exporter = new \Psc\CMS\Item\Exporter();
         $export = array();
         foreach ($entities as $entity) {
             // @TODO es wäre schön hier spezifizieren zu können welche interfaces exportiert werden müssen
             // dies muss vom request her passieren
             $export[] = $exporter->ComboDropBoxable($entityMeta->getAdapter($entity)->getComboDropBoxable());
             //$export[] = $exporter->AutoCompletable($entityMeta->getAdapter($entity)->getAutoCompletable());
             //$export[] = $exporter->merge($entityMeta->getAdapter($entity),
             //                           array('AutoCompletable','Identifyable','TabOpenable')
             //                           );
         }
         if (isset($maxResults) && count($export) === $maxResults) {
             // exceeds
             $this->metadata = new MetadataGenerator();
             $this->metadata->autoCompleteMaxResultsHit($maxResults);
         }
         return $export;
     } else {
         $entities = $this->findEntitiesFor($query, $this->getDefaultSort(), $subResource);
     }
     if ($subResource === NULL) {
         return Code::castCollection($entities);
     } elseif ($subResource === 'grid') {
         return $this->getEntityGrid($this->dc->getEntityMeta($this->getEntityName()), $entities);
     } else {
         throw $this->err->invalidArgument(__FUNCTION__, 'subResource', $subResource);
     }
 }
예제 #3
0
 /**
  * Validiert alle Felder im Validator anhand der Daten von FormData und benutzt $err um eine ValidationResponse zu erzeugen (falls es Fehler gab)
  *
  * @return FormData (aber validated + cleaned)
  */
 public function validateRequestData(FormData $requestData, Validator $validator, \Psc\Net\ServiceErrorPackage $err)
 {
     try {
         return (object) $validator->validateFields($requestData);
         // dieser Cast muss angepasst werden wenn FormData mal was andres ist
     } catch (\Psc\Form\ValidatorExceptionList $e) {
         throw $err->validationResponse($e);
     }
 }