public function testNotifyPropertyNotFound() { // Setup request generator $lockReq = new ezcWebdavLockRequest('/some/path'); $activeLock = new ezcWebdavLockDiscoveryPropertyActiveLock(); $reqGen = new ezcWebdavLockLockRequestGenerator($lockReq, $activeLock); // Fake PROPFIND response $propStatRes = new ezcWebdavPropStatResponse(new ezcWebdavBasicPropertyStorage(), ezcWebdavResponse::STATUS_200); $propStatRes->storage->attach(new ezcWebdavGetEtagProperty()); $propStatRes2 = new ezcWebdavPropStatResponse(new ezcWebdavBasicPropertyStorage(), ezcWebdavResponse::STATUS_404); $propStatRes2->storage->attach(new ezcWebdavLockDiscoveryProperty()); $propFindRes = new ezcWebdavPropFindResponse(new ezcWebdavResource('/some/path'), $propStatRes, $propStatRes2); // Fake result $result = new ezcWebdavPropPatchRequest('/some/path'); $result->updates->attach(new ezcWebdavLockDiscoveryProperty(new ArrayObject(array($activeLock))), ezcWebdavPropPatchRequest::SET); // Perform notify $reqGen->notify($propFindRes); $this->assertAttributeEquals(array($result), 'requests', $reqGen); }
/** * Aquires a new lock. * * Performs all necessary checks for the lock to be acquired by $request. * If any failures occur, either an instance of {@link * ezcWebdavErrorResponse} or {@link ezcWebdavMultistatusResponse} is * returned. If the lock was acquired successfully, an instance of {@link * ezcWebdavLockResponse} is returned. * * @param ezcWebdavLockRequest $request * @return ezcWebdavResponse */ protected function acquireLock(ezcWebdavLockRequest $request) { $auth = ezcWebdavServer::getInstance()->auth; $authHeader = $request->getHeader('Authorization'); // Active lock part to be used in PROPPATCH requests and LOCK response $lockToken = $this->tools->generateLockToken($request); $activeLock = $this->tools->generateActiveLock($request, $lockToken); // Generates PROPPATCH requests while checking violations $requestGenerator = new ezcWebdavLockLockRequestGenerator($request, $activeLock); // Check violations and collect PROPPATCH requests $res = $this->tools->checkViolations(new ezcWebdavLockCheckInfo($request->requestUri, $request->getHeader('Depth'), $request->getHeader('If'), $authHeader, ezcWebdavAuthorizer::ACCESS_WRITE, $requestGenerator, $request->lockInfo->lockScope === ezcWebdavLockRequest::SCOPE_SHARED)); if ($res !== null) { if ($res->status === ezcWebdavResponse::STATUS_404) { return $this->createLockNullResource($request); } // Other violations -> return multistatus return $this->createLockError($res); } // Assign lock to user $auth->assignLock($authHeader->username, $lockToken); $affectedLockDiscovery = null; // Send all generated PROPPATCH requests to the backend to update lock information foreach ($requestGenerator->getRequests() as $propPatch) { // Authorization for lock assignement ezcWebdavLockTools::cloneRequestHeaders($request, $propPatch); $propPatch->validateHeaders(); $res = ezcWebdavServer::getInstance()->backend->performRequest($propPatch); if (!$res instanceof ezcWebdavPropPatchResponse) { // An error occured while performing PROPPATCH, very bad thing! // @TODO: Should usually cleanup successful patches again! return $res; } } return new ezcWebdavLockResponse($requestGenerator->getLockDiscoveryProperty($request->requestUri), ezcWebdavResponse::STATUS_200, $lockToken); }