2013-01-03 03:26:13 +04: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 22:11:12 +04:00
|
|
|
private $cacheHasItems = null;
|
|
|
|
|
2013-01-03 03:26:13 +04:00
|
|
|
public function __construct($user) {
|
|
|
|
$this->user = $user;
|
|
|
|
}
|
|
|
|
|
2013-03-24 05:06:50 +04:00
|
|
|
/**
|
|
|
|
* get the numbers of items in the legacy cache
|
|
|
|
*
|
|
|
|
* @return int
|
|
|
|
*/
|
2013-01-03 03:26:13 +04: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 22:11:12 +04:00
|
|
|
if (!is_null($this->cacheHasItems)) {
|
|
|
|
return $this->cacheHasItems;
|
|
|
|
}
|
2013-01-03 03:26:13 +04:00
|
|
|
try {
|
|
|
|
$query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `user` = ? LIMIT 1');
|
|
|
|
} catch (\Exception $e) {
|
2013-01-15 22:11:12 +04:00
|
|
|
$this->cacheHasItems = false;
|
2013-01-03 03:26:13 +04:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
$result = $query->execute(array($this->user));
|
|
|
|
} catch (\Exception $e) {
|
2013-01-15 22:11:12 +04:00
|
|
|
$this->cacheHasItems = false;
|
2013-01-03 03:26:13 +04:00
|
|
|
return false;
|
|
|
|
}
|
2013-02-22 20:21:57 +04:00
|
|
|
|
2013-02-11 23:28:36 +04:00
|
|
|
if ($result === false || property_exists($result, 'error_message_prefix')) {
|
|
|
|
$this->cacheHasItems = false;
|
|
|
|
return false;
|
2013-02-22 20:21:57 +04:00
|
|
|
}
|
|
|
|
|
2013-01-15 22:11:12 +04:00
|
|
|
$this->cacheHasItems = (bool)$result->fetchRow();
|
|
|
|
return $this->cacheHasItems;
|
2013-01-03 03:26:13 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2013-03-24 05:06:50 +04:00
|
|
|
* get an item from the legacy cache
|
|
|
|
*
|
2013-01-03 03:26:13 +04: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 19:20:59 +04:00
|
|
|
$data = $result->fetchRow();
|
|
|
|
$data['etag'] = $this->getEtag($data['path']);
|
|
|
|
return $data;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getEtag($path) {
|
|
|
|
list(, $user, , $relativePath) = explode('/', $path, 4);
|
|
|
|
if (is_null($relativePath)) {
|
|
|
|
$relativePath = '';
|
|
|
|
}
|
|
|
|
$query = \OC_DB::prepare('SELECT `propertyvalue` FROM `*PREFIX*properties` WHERE `userid` = ? AND propertypath = ? AND propertyname = "{DAV:}getetag"');
|
2013-03-24 20:01:04 +04:00
|
|
|
$result = $query->execute(array($user, '/' . $relativePath));
|
2013-03-24 19:20:59 +04:00
|
|
|
if ($row = $result->fetchRow()) {
|
|
|
|
return trim($row['propertyvalue'], '"');
|
|
|
|
} else {
|
|
|
|
return '';
|
|
|
|
}
|
2013-01-03 03:26:13 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2013-03-24 05:06:50 +04:00
|
|
|
* get all child items of an item from the legacy cache
|
|
|
|
*
|
2013-01-03 03:26:13 +04: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 19:20:59 +04:00
|
|
|
$data = $result->fetchAll();
|
|
|
|
foreach ($data as $i => $item) {
|
|
|
|
$data[$i]['etag'] = $this->getEtag($item['path']);
|
|
|
|
}
|
|
|
|
return $data;
|
2013-01-03 03:26:13 +04:00
|
|
|
}
|
|
|
|
}
|