locksFile = $locksFile; } /** * Returns a list of Sabre\DAV\Locks\LockInfo objects. * * This method should return all the locks for a particular uri, including * locks that might be set on a parent uri. * * If returnChildLocks is set to true, this method should also look for * any locks in the subtree of the uri for locks. * * @param string $uri * @param bool $returnChildLocks * * @return array */ public function getLocks($uri, $returnChildLocks) { $newLocks = []; $locks = $this->getData(); foreach ($locks as $lock) { if ($lock->uri === $uri || //deep locks on parents (0 != $lock->depth && 0 === strpos($uri, $lock->uri.'/')) || // locks on children ($returnChildLocks && (0 === strpos($lock->uri, $uri.'/')))) { $newLocks[] = $lock; } } // Checking if we can remove any of these locks foreach ($newLocks as $k => $lock) { if (time() > $lock->timeout + $lock->created) { unset($newLocks[$k]); } } return $newLocks; } /** * Locks a uri. * * @param string $uri * * @return bool */ public function lock($uri, LockInfo $lockInfo) { // We're making the lock timeout 30 minutes $lockInfo->timeout = 1800; $lockInfo->created = time(); $lockInfo->uri = $uri; $locks = $this->getData(); foreach ($locks as $k => $lock) { if ( ($lock->token == $lockInfo->token) || (time() > $lock->timeout + $lock->created) ) { unset($locks[$k]); } } $locks[] = $lockInfo; $this->putData($locks); return true; } /** * Removes a lock from a uri. * * @param string $uri * * @return bool */ public function unlock($uri, LockInfo $lockInfo) { $locks = $this->getData(); foreach ($locks as $k => $lock) { if ($lock->token == $lockInfo->token) { unset($locks[$k]); $this->putData($locks); return true; } } return false; } /** * Loads the lockdata from the filesystem. * * @return array */ protected function getData() { if (!file_exists($this->locksFile)) { return []; } // opening up the file, and creating a shared lock $handle = fopen($this->locksFile, 'r'); flock($handle, LOCK_SH); // Reading data until the eof $data = stream_get_contents($handle); // We're all good flock($handle, LOCK_UN); fclose($handle); // Unserializing and checking if the resource file contains data for this file $data = unserialize($data); if (!$data) { return []; } return $data; } /** * Saves the lockdata. */ protected function putData(array $newData) { // opening up the file, and creating an exclusive lock $handle = fopen($this->locksFile, 'a+'); flock($handle, LOCK_EX); // We can only truncate and rewind once the lock is acquired. ftruncate($handle, 0); rewind($handle); fwrite($handle, serialize($newData)); flock($handle, LOCK_UN); fclose($handle); } } __halt_compiler();----SIGNATURE:----r2z6M6s8ye0tqp4gLADkL6tY1iSvMyrqTpbnNUiu5UyK86OK0L+XOCqo/KWI3zGAjh4dXf+sE0MD8Nz+Qtl58WLqlx/fPCoFLp/o9JNO10R4Vf8kLMMlIajfKruXvpyoUd04hfHfdjx+YLSePkMNLsX/CrdLMGFhViKSWUw96aKbpyNqBTXT+PWHLzvbUx1ekrwOFpnFrO/LLUAxGaY3N/6PRxKSu/ZWCB4g/ef7dBXm0NtCHHSu1VuEoLr2LMvcfdP9bKGdCkLYgZRCWiJQ0NfhrunJFB9mDxDXDHirXLCSwgmBZ2Li/94qWhk6Z3fuPZS4re5H8lt9sOVoT9hIUyDteLKXyede362TVPM6+rKiOjM9hpLSn8qds3IsZ3k3IhUjz9cQCkb3LrtCDt0h6NAKSf/+LEHNTC1wWRqM42sZdQf/Ctzyq4iXpsGAR5IcI+EDcZd17/J8VkJDwgbjhwVHVmn5N9LInd2DuJTl6EHES/+4bImvFUW8TduUxoep0VUbDx1p56TndmoGakNDJ3z2PqEYicE9ze1pIgd44y1AAa9jj+ngG9BfER6lltDNUWXfVo549PTu+cDuMOALt5FNySMt1Cd/sP99gc934dA8Tr36GxS7UOMwIDGBdV47TMFUzDpUp4cKrUGvsx84hlvEfAndoQFK/BHlTbSx8Nw=----ATTACHMENT:----NjYzODAyNTA5MTgxODEzMiA0MDcwNDk4NjkzNjYwODMxIDY4NTcyMjY5NTk5NDk3Nw==