2013-01-02 23:26:13 +00:00
< ? php
/**
* Copyright ( c ) 2012 Robin Appelman < icewind @ owncloud . com >
* This file is licensed under the Affero General Public License version 3 or
* later .
* See the COPYING - README file .
*/
namespace OC\Files\Cache ;
/**
* Provide read only support for the old filecache
*/
class Legacy {
private $user ;
2013-01-15 18:11:12 +00:00
private $cacheHasItems = null ;
2013-01-02 23:26:13 +00:00
public function __construct ( $user ) {
$this -> user = $user ;
}
2013-03-24 01:06:50 +00:00
/**
* get the numbers of items in the legacy cache
*
* @ return int
*/
2013-01-02 23:26:13 +00:00
function getCount () {
$query = \OC_DB :: prepare ( 'SELECT COUNT(`id`) AS `count` FROM `*PREFIX*fscache` WHERE `user` = ?' );
$result = $query -> execute ( array ( $this -> user ));
if ( $row = $result -> fetchRow ()) {
return $row [ 'count' ];
} else {
return 0 ;
}
}
/**
* check if a legacy cache is present and holds items
*
* @ return bool
*/
function hasItems () {
2013-01-15 18:11:12 +00:00
if ( ! is_null ( $this -> cacheHasItems )) {
return $this -> cacheHasItems ;
}
2013-01-02 23:26:13 +00:00
try {
$query = \OC_DB :: prepare ( 'SELECT `id` FROM `*PREFIX*fscache` WHERE `user` = ? LIMIT 1' );
} catch ( \Exception $e ) {
2013-01-15 18:11:12 +00:00
$this -> cacheHasItems = false ;
2013-01-02 23:26:13 +00:00
return false ;
}
try {
$result = $query -> execute ( array ( $this -> user ));
} catch ( \Exception $e ) {
2013-01-15 18:11:12 +00:00
$this -> cacheHasItems = false ;
2013-01-02 23:26:13 +00:00
return false ;
}
2013-02-22 16:21:57 +00:00
2013-02-11 19:28:36 +00:00
if ( $result === false || property_exists ( $result , 'error_message_prefix' )) {
$this -> cacheHasItems = false ;
return false ;
2013-02-22 16:21:57 +00:00
}
2013-01-15 18:11:12 +00:00
$this -> cacheHasItems = ( bool ) $result -> fetchRow ();
return $this -> cacheHasItems ;
2013-01-02 23:26:13 +00:00
}
/**
2013-03-24 01:06:50 +00:00
* get an item from the legacy cache
*
2013-01-02 23:26:13 +00:00
* @ param string | int $path
* @ return array
*/
function get ( $path ) {
if ( is_numeric ( $path )) {
$query = \OC_DB :: prepare ( 'SELECT * FROM `*PREFIX*fscache` WHERE `id` = ?' );
} else {
$query = \OC_DB :: prepare ( 'SELECT * FROM `*PREFIX*fscache` WHERE `path` = ?' );
}
$result = $query -> execute ( array ( $path ));
2013-03-24 15:20:59 +00:00
$data = $result -> fetchRow ();
2013-04-05 09:27:08 +00:00
$data [ 'etag' ] = $this -> getEtag ( $data [ 'path' ], $data [ 'user' ]);
2013-03-24 15:20:59 +00:00
return $data ;
}
2013-03-25 20:45:55 +00:00
/**
* Get the ETag for the given path
*
* @ param type $path
* @ return string
*/
2013-04-05 09:27:08 +00:00
function getEtag ( $path , $user = null ) {
2013-03-25 20:46:50 +00:00
static $query = null ;
2013-04-05 09:27:08 +00:00
$pathDetails = explode ( '/' , $path , 4 );
if (( ! $user ) && ! isset ( $pathDetails [ 1 ])) {
//no user!? Too odd, return empty string.
return '' ;
} else if ( ! $user ) {
//guess user from path, if no user passed.
$user = $pathDetails [ 1 ];
}
if ( ! isset ( $pathDetails [ 3 ]) || is_null ( $pathDetails [ 3 ])) {
2013-03-24 15:20:59 +00:00
$relativePath = '' ;
2013-04-05 09:27:08 +00:00
} else {
$relativePath = $pathDetails [ 3 ];
2013-03-24 15:20:59 +00:00
}
2013-04-05 09:27:08 +00:00
2013-03-25 20:46:50 +00:00
if ( is_null ( $query )){
2013-04-03 11:04:38 +00:00
$query = \OC_DB :: prepare ( 'SELECT `propertyvalue` FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = \'{DAV:}getetag\'' );
2013-03-25 20:46:50 +00:00
}
2013-03-24 16:01:04 +00:00
$result = $query -> execute ( array ( $user , '/' . $relativePath ));
2013-03-24 15:20:59 +00:00
if ( $row = $result -> fetchRow ()) {
return trim ( $row [ 'propertyvalue' ], '"' );
} else {
return '' ;
}
2013-01-02 23:26:13 +00:00
}
/**
2013-03-24 01:06:50 +00:00
* get all child items of an item from the legacy cache
*
2013-01-02 23:26:13 +00:00
* @ param int $id
* @ return array
*/
function getChildren ( $id ) {
$query = \OC_DB :: prepare ( 'SELECT * FROM `*PREFIX*fscache` WHERE `parent` = ?' );
$result = $query -> execute ( array ( $id ));
2013-03-24 15:20:59 +00:00
$data = $result -> fetchAll ();
foreach ( $data as $i => $item ) {
2013-04-05 09:27:08 +00:00
$data [ $i ][ 'etag' ] = $this -> getEtag ( $item [ 'path' ], $item [ 'user' ]);
2013-03-24 15:20:59 +00:00
}
return $data ;
2013-01-02 23:26:13 +00:00
}
}