? AND ((uri = ?)'; $params = array(OC_User::getUser(),time(),$uri); // We need to check locks for every part in the uri. $uriParts = explode('/',$uri); // We already covered the last part of the uri array_pop($uriParts); $currentPath=''; foreach($uriParts as $part) { if ($currentPath) $currentPath.='/'; $currentPath.=$part; $query.=' OR (depth!=0 AND uri = ?)'; $params[] = $currentPath; } if ($returnChildLocks) { $query.=' OR (uri LIKE ?)'; $params[] = $uri . '/%'; } $query.=')'; $stmt = OC_DB::prepare($query); $result = $stmt->execute($params); $lockList = array(); while( $row = $result->fetchRow()){ $lockInfo = new Sabre_DAV_Locks_LockInfo(); $lockInfo->owner = $row['owner']; $lockInfo->token = $row['token']; $lockInfo->timeout = $row['timeout']; $lockInfo->created = $row['created']; $lockInfo->scope = $row['scope']; $lockInfo->depth = $row['depth']; $lockInfo->uri = $row['uri']; $lockList[] = $lockInfo; } return $lockList; } /** * Locks a uri * * @param string $uri * @param Sabre_DAV_Locks_LockInfo $lockInfo * @return bool */ public function lock($uri,Sabre_DAV_Locks_LockInfo $lockInfo) { // We're making the lock timeout 5 minutes $lockInfo->timeout = 300; $lockInfo->created = time(); $lockInfo->uri = $uri; $locks = $this->getLocks($uri,false); $exists = false; foreach($locks as $k=>$lock) { if ($lock->token == $lockInfo->token) $exists = true; } if ($exists) { $query = OC_DB::prepare( 'UPDATE *PREFIX*locks SET owner = ?, timeout = ?, scope = ?, depth = ?, uri = ?, created = ? WHERE userid = ? AND token = ?' ); $result = $query->execute( array($lockInfo->owner,$lockInfo->timeout,$lockInfo->scope,$lockInfo->depth,$uri,$lockInfo->created,OC_User::getUser(),$lockInfo->token)); } else { $query = OC_DB::prepare( 'INSERT INTO *PREFIX*locks (userid,owner,timeout,scope,depth,uri,created,token) VALUES (?,?,?,?,?,?,?,?)' ); $result = $query->execute( array(OC_User::getUser(),$lockInfo->owner,$lockInfo->timeout,$lockInfo->scope,$lockInfo->depth,$uri,$lockInfo->created,$lockInfo->token)); } return true; } /** * Removes a lock from a uri * * @param string $uri * @param Sabre_DAV_Locks_LockInfo $lockInfo * @return bool */ public function unlock($uri,Sabre_DAV_Locks_LockInfo $lockInfo) { $query = OC_DB::prepare( 'DELETE FROM *PREFIX*locks WHERE userid = ? AND uri=? AND token=?' ); $result = $query->execute( array(OC_User::getUser(),$uri,$lockInfo->token)); return $result->numRows() === 1; } }