*
  • {@link ezcWebdavBackendPut}
  • *
  • {@link ezcWebdavBackendChange}
  • *
  • {@link ezcWebdavBackendMakeCollection}
  • *
  • {@link ezcWebdavBackendLock}
  • * * * @version 1.0rc1 * @package Webdav */ abstract class ezcWebdavBackend { /** * Backend has native support for gzip compression. */ const COMPRESSION_GZIP = 1; /** * Backend has native support for bzip2 compression. */ const COMPRESSION_BZIP2 = 2; /** * Backend performs locking itself - no handling by server is required. */ const CUSTOM_LOCK = 4; /** * Backend has native support for partial requests. */ const PARTIAL = 8; /** * Backend has native support for multipart requests. */ const MULTIPART = 16; /** * Returns additional features supported by the backend. * * Returns a bitmap of additional features supported by the backend, referenced * by constants from the basic {@link ezcWebdavBackend} class. * * @return int */ public function getFeatures() { return 0; } /** * Performs the given request. * * This method takes an instance of {@link ezcWebdavRequest} in $request * and dispatches it locally to the correct handling method. A * corresponding {@link ezcWebdavResponse} object will be returned. If the * given request could not be dispatched, because the backend does not * implement the neccessary interface or the request type is unknown, a * {@link ezcWebdavRequestNotSupportedException} is thrown. * * @param ezcWebdavRequest $request * @return ezcWebdavResponse * @throws ezcWebdavRequestNotSupportedException * if the given request object could not be handled by the backend. */ public function performRequest( ezcWebdavRequest $request ) { switch ( true ) { case ( $request instanceof ezcWebdavGetRequest ): return $this->get( $request ); case ( $request instanceof ezcWebdavHeadRequest ): return $this->head( $request ); case ( $request instanceof ezcWebdavPropFindRequest ): return $this->propFind( $request ); case ( $request instanceof ezcWebdavPropPatchRequest ): return $this->propPatch( $request ); case ( $request instanceof ezcWebdavOptionsRequest ): return $this->options( $request ); case ( $request instanceof ezcWebdavDeleteRequest ): if ( $this instanceof ezcWebdavBackendChange ) { return $this->delete( $request ); } else { throw new ezcWebdavRequestNotSupportedException( $request, 'Backend does not implement ezcWebdavBackendChange.' ); } break; case ( $request instanceof ezcWebdavCopyRequest ): if ( $this instanceof ezcWebdavBackendChange ) { return $this->copy( $request ); } else { throw new ezcWebdavRequestNotSupportedException( $request, 'Backend does not implement ezcWebdavBackendChange.' ); } break; case ( $request instanceof ezcWebdavMoveRequest ): if ( $this instanceof ezcWebdavBackendChange ) { return $this->move( $request ); } else { throw new ezcWebdavRequestNotSupportedException( $request, 'Backend does not implement ezcWebdavBackendChange.' ); } break; case ( $request instanceof ezcWebdavMakeCollectionRequest ): if ( $this instanceof ezcWebdavBackendMakeCollection ) { return $this->makeCollection( $request ); } else { throw new ezcWebdavRequestNotSupportedException( $request, 'Backend does not implement ezcWebdavBackendMakeCollection.' ); } break; case ( $request instanceof ezcWebdavPutRequest ): if ( $this instanceof ezcWebdavBackendPut ) { return $this->put( $request ); } else { throw new ezcWebdavRequestNotSupportedException( $request, 'Backend does not implement ezcWebdavBackendPut.' ); } break; default: throw new ezcWebdavRequestNotSupportedException( $request, 'Backend could not dispatch request object.' ); } } /** * Serves GET requests. * * The method receives a {@link ezcWebdavGetRequest} object containing all * relevant information obout the clients request and will return an {@link * ezcWebdavErrorResponse} instance on error or an instance of {@link * ezcWebdavGetResourceResponse} or {@link ezcWebdavGetCollectionResponse} * on success, depending on the type of resource that is referenced by the * request. * * @param ezcWebdavGetRequest $request * @return ezcWebdavResponse */ abstract public function get( ezcWebdavGetRequest $request ); /** * Serves HEAD requests. * * The method receives a {@link ezcWebdavHeadRequest} object containing all * relevant information obout the clients request and will return an {@link * ezcWebdavErrorResponse} instance on error or an instance of {@link * ezcWebdavHeadResponse} on success. * * @param ezcWebdavHeadRequest $request * @return ezcWebdavResponse */ abstract public function head( ezcWebdavHeadRequest $request ); /** * Serves PROPFIND requests. * * The method receives a {@link ezcWebdavPropFindRequest} object containing * all relevant information obout the clients request and will either * return an instance of {@link ezcWebdavErrorResponse} to indicate an error * or a {@link ezcWebdavPropFindResponse} on success. If the referenced * resource is a collection or if some properties produced errors, an * instance of {@link ezcWebdavMultistatusResponse} may be returned. * * The {@link ezcWebdavPropFindRequest} object contains a definition to * find one or more properties of a given collection or non-collection * resource. * * @param ezcWebdavPropFindRequest $request * @return ezcWebdavResponse */ abstract public function propFind( ezcWebdavPropFindRequest $request ); /** * Serves PROPPATCH requests. * * The method receives a {@link ezcWebdavPropPatchRequest} object * containing all relevant information obout the clients request and will * return an instance of {@link ezcWebdavErrorResponse} on error or a * {@link ezcWebdavPropPatchResponse} response on success. If the * referenced resource is a collection or if only some properties produced * errors, an instance of {@link ezcWebdavMultistatusResponse} may be * returned. * * @param ezcWebdavPropPatchRequest $request * @return ezcWebdavResponse */ abstract public function propPatch( ezcWebdavPropPatchRequest $request ); /** * Required method to serve OPTIONS requests. * * The method receives a {@link ezcWebdavOptionsRequest} object containing all * relevant information obout the clients request and should either return * an error by returning an {@link ezcWebdavErrorResponse} object, or any * other {@link ezcWebdavResponse} objects. * * @param ezcWebdavOptionsRequest $request * @return ezcWebdavResponse */ public function options( ezcWebdavOptionsRequest $request ) { $response = new ezcWebdavOptionsResponse( ( $this instanceof ezcWebdavBackendLock) ? '1, 2' : '1' ); // Always allowed $allowed = 'GET, HEAD, PROPFIND, PROPPATCH, OPTIONS, '; // Check if modifications are allowed if ( $this instanceof ezcWebdavBackendChange ) { $allowed .= 'DELETE, COPY, MOVE, '; } // Check if MKCOL is allowed if ( $this instanceof ezcWebdavBackendMakeCollection ) { $allowed .= 'MKCOL, '; } // Check if PUT is allowed if ( $this instanceof ezcWebdavBackendPut ) { $allowed .= 'PUT, '; } // Check if locking is allowed if ( $this instanceof ezcWebdavBackendLock ) { $allowed .= 'LOCK, UNLOCK, '; } $response->setHeader( 'Allow', substr( $allowed, 0, -2 ) ); return $response; } } ?>