/** * Performs actual purging of locks. * * Iterates over {@link $lockProperties} and purges all locks of which the * tokens have been collected in {$locksToPurge}. * * @return void * * @throws ezcWebdavLockAdministrationException * in case purging of a lock failed. */ protected function performPurge() { foreach ($this->lockProperties as $path => $lockDiscoveryProp) { $removeIds = array(); foreach ($lockDiscoveryProp->activeLock as $id => $activeLock) { if (isset($this->locksToPurge[(string) $activeLock->token])) { $removeIds[] = $id; } } if ($removeIds !== array()) { foreach ($removeIds as $id) { $lockDiscoveryProp->activeLock->offsetUnset($id); } $propPatchReq = new ezcWebdavPropPatchRequest($path); $propPatchReq->updates = new ezcWebdavFlaggedPropertyStorage(); $propPatchReq->updates->attach($lockDiscoveryProp, ezcWebdavPropPatchRequest::SET); $propPatchReq->validateHeaders(); $propPatchRes = $this->backend->propPatch($propPatchReq); if (!$propPatchRes instanceof ezcWebdavPropPatchResponse) { throw new ezcWebdavLockAdministrationException("PROPPATCH to remove timedout lock failed for '{$path}'.", $propPatchRes); } } } }