Exemplo n.º 1
0
            sendFinalHttpResponse(201);
        }
        break;
    case RestfulRequest::TYPE_PUT_SUBRECORD:
        $record = new $request->record();
        $subRecord = new $request->subRecord();
        $original = $subRecord->loadById($request->subRecordId);
        $subRecordRelatedField = $record->getRelatedField($request->subRecord);
        if ($original[$subRecordRelatedField] != $request->recordId) {
            sendFinalHttpResponse(400);
        }
        $request->input[$subRecordRelatedField] = $request->recordId;
        $result = $subRecord->update($request->subRecordId, $request->input);
        sendFinalHttpResponse($result ? 200 : 400);
        break;
    case RestfulRequest::TYPE_DELETE_SUBRECORD:
        $record = new $request->record();
        $subRecord = new $request->subRecord();
        $original = $subRecord->loadById($request->subRecordId);
        if (!$original) {
            sendFinalHttpResponse(404);
        }
        $subRecordRelatedField = $record->getRelatedField($request->subRecord);
        if ($original[$subRecordRelatedField] != $request->recordId) {
            sendFinalHttpResponse(400);
        }
        sendFinalHttpResponse($subRecord->delete($request->subRecordId) ? 200 : 404);
        break;
    default:
        sendFinalHttpResponse(400);
}
Exemplo n.º 2
0
 /**
  * Load all fields from relation.
  * Results can also be filtered with an array
  * 
  * @param int       $id         parent id
  * @param string    $relation   relation name    
  * @param array     $filters    search filters
  * @return records array on succes, false otherwise
  */
 function loadAllRelated($id, $relation, $filters = null)
 {
     // Relation must exist
     if (array_key_exists($relation, $this->relations)) {
         $relatedField = $this->relations[$relation];
     } else {
         return false;
     }
     // Create related object
     $relatedObject = new $relation();
     $where = "";
     $bindArray = array();
     // If we have filters, create WHERE clause
     if ($filters) {
         foreach ($filters as $key => $value) {
             // Limit filters to searchable fields
             if (in_array($key, $relatedObject->searchables)) {
                 $where .= " AND {$key} LIKE :{$key}";
                 $bindArray[":" . $key] = $value;
             } else {
                 // If field isn't searchable we have a bad request
                 sendFinalHttpResponse(400);
             }
         }
     }
     $statement = $this->db->prepare("SELECT * FROM {$relatedObject->table} WHERE {$relatedField} = :id {$where}");
     $statement->bindValue(":id", $id);
     // Bind search vales
     foreach ($bindArray as $key => $value) {
         $statement->bindValue($key, $value);
     }
     $statement->execute();
     $output = array();
     // Map query result to model configured fields
     while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
         $current = array();
         foreach (array_keys($row) as $key) {
             if (array_key_exists($key, $relatedObject->fields)) {
                 $current[$key] = $row[$key];
             }
         }
         $output[] = $current;
     }
     return $output;
 }