2013-04-26 02:00:18 +04:00
|
|
|
<?php
|
|
|
|
/**
|
2015-02-26 13:37:37 +03:00
|
|
|
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
|
|
|
|
* This file is licensed under the Affero General Public License version 3 or
|
|
|
|
* later.
|
|
|
|
* See the COPYING-README file.
|
2013-04-26 02:00:18 +04:00
|
|
|
*/
|
2015-02-26 13:37:37 +03:00
|
|
|
|
2013-04-26 02:00:18 +04:00
|
|
|
namespace OC\Files\Cache;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class Storage
|
|
|
|
*
|
|
|
|
* cache storage specific data
|
|
|
|
*
|
|
|
|
* @package OC\Files\Cache
|
|
|
|
*/
|
|
|
|
class Storage {
|
|
|
|
private $storageId;
|
|
|
|
private $numericId;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param \OC\Files\Storage\Storage|string $storage
|
2015-03-11 11:33:50 +03:00
|
|
|
* @throws \RuntimeException
|
2013-04-26 02:00:18 +04:00
|
|
|
*/
|
|
|
|
public function __construct($storage) {
|
|
|
|
if ($storage instanceof \OC\Files\Storage\Storage) {
|
|
|
|
$this->storageId = $storage->getId();
|
|
|
|
} else {
|
|
|
|
$this->storageId = $storage;
|
|
|
|
}
|
2014-03-25 15:52:32 +04:00
|
|
|
$this->storageId = self::adjustStorageId($this->storageId);
|
2013-04-26 02:00:18 +04:00
|
|
|
|
2013-06-07 16:11:05 +04:00
|
|
|
$sql = 'SELECT `numeric_id` FROM `*PREFIX*storages` WHERE `id` = ?';
|
|
|
|
$result = \OC_DB::executeAudited($sql, array($this->storageId));
|
2013-04-26 02:00:18 +04:00
|
|
|
if ($row = $result->fetchRow()) {
|
|
|
|
$this->numericId = $row['numeric_id'];
|
|
|
|
} else {
|
2015-03-09 21:02:34 +03:00
|
|
|
$connection = \OC_DB::getConnection();
|
|
|
|
if ($connection->insertIfNotExist('*PREFIX*storages', ['id' => $this->storageId])) {
|
|
|
|
$this->numericId = \OC_DB::insertid('*PREFIX*storages');
|
|
|
|
} else {
|
|
|
|
$result = \OC_DB::executeAudited($sql, array($this->storageId));
|
|
|
|
if ($row = $result->fetchRow()) {
|
|
|
|
$this->numericId = $row['numeric_id'];
|
2015-03-09 21:07:22 +03:00
|
|
|
} else {
|
2015-03-11 11:33:50 +03:00
|
|
|
throw new \RuntimeException('Storage exists when inserting and does not exist on select... go away');
|
2015-03-09 21:02:34 +03:00
|
|
|
}
|
|
|
|
}
|
2013-04-26 02:00:18 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-03-25 15:52:32 +04:00
|
|
|
/**
|
|
|
|
* Adjusts the storage id to use md5 if too long
|
|
|
|
* @param string $storageId storage id
|
|
|
|
* @return unchanged $storageId if its length is less than 64 characters,
|
|
|
|
* else returns the md5 of $storageId
|
|
|
|
*/
|
|
|
|
public static function adjustStorageId($storageId) {
|
|
|
|
if (strlen($storageId) > 64) {
|
|
|
|
return md5($storageId);
|
|
|
|
}
|
|
|
|
return $storageId;
|
|
|
|
}
|
|
|
|
|
2014-06-06 13:39:35 +04:00
|
|
|
/**
|
|
|
|
* @return string
|
|
|
|
*/
|
2013-04-26 02:00:18 +04:00
|
|
|
public function getNumericId() {
|
|
|
|
return $this->numericId;
|
|
|
|
}
|
|
|
|
|
2014-02-06 19:30:58 +04:00
|
|
|
/**
|
2014-06-06 13:39:35 +04:00
|
|
|
* @return string|null
|
2014-02-06 19:30:58 +04:00
|
|
|
*/
|
2013-04-26 02:00:18 +04:00
|
|
|
public static function getStorageId($numericId) {
|
2013-10-29 03:26:35 +04:00
|
|
|
|
2013-06-07 16:11:05 +04:00
|
|
|
$sql = 'SELECT `id` FROM `*PREFIX*storages` WHERE `numeric_id` = ?';
|
|
|
|
$result = \OC_DB::executeAudited($sql, array($numericId));
|
2013-04-26 02:00:18 +04:00
|
|
|
if ($row = $result->fetchRow()) {
|
|
|
|
return $row['id'];
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
2013-10-29 03:26:35 +04:00
|
|
|
|
2014-02-06 19:30:58 +04:00
|
|
|
/**
|
2014-06-06 13:39:35 +04:00
|
|
|
* @return string|null
|
2014-02-06 19:30:58 +04:00
|
|
|
*/
|
2014-06-06 13:39:35 +04:00
|
|
|
public static function getNumericStorageId($storageId) {
|
2014-03-25 15:52:32 +04:00
|
|
|
$storageId = self::adjustStorageId($storageId);
|
2014-06-06 13:39:35 +04:00
|
|
|
|
2013-10-29 03:26:35 +04:00
|
|
|
$sql = 'SELECT `numeric_id` FROM `*PREFIX*storages` WHERE `id` = ?';
|
|
|
|
$result = \OC_DB::executeAudited($sql, array($storageId));
|
|
|
|
if ($row = $result->fetchRow()) {
|
2014-06-06 13:39:35 +04:00
|
|
|
return $row['numeric_id'];
|
2013-10-29 03:26:35 +04:00
|
|
|
} else {
|
2014-06-06 13:39:35 +04:00
|
|
|
return null;
|
2013-10-29 03:26:35 +04:00
|
|
|
}
|
|
|
|
}
|
2014-01-22 02:58:48 +04:00
|
|
|
|
2014-06-06 13:39:35 +04:00
|
|
|
/**
|
|
|
|
* @param string $storageId
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
public static function exists($storageId) {
|
|
|
|
return !is_null(self::getNumericStorageId($storageId));
|
|
|
|
}
|
|
|
|
|
2014-01-22 02:58:48 +04:00
|
|
|
/**
|
|
|
|
* remove the entry for the storage
|
|
|
|
*
|
|
|
|
* @param string $storageId
|
|
|
|
*/
|
|
|
|
public static function remove($storageId) {
|
2014-03-25 15:52:32 +04:00
|
|
|
$storageId = self::adjustStorageId($storageId);
|
2014-10-13 17:52:48 +04:00
|
|
|
$numericId = self::getNumericStorageId($storageId);
|
2014-01-22 02:58:48 +04:00
|
|
|
$sql = 'DELETE FROM `*PREFIX*storages` WHERE `id` = ?';
|
|
|
|
\OC_DB::executeAudited($sql, array($storageId));
|
2014-02-03 19:36:21 +04:00
|
|
|
|
2014-06-06 13:39:35 +04:00
|
|
|
if (!is_null($numericId)) {
|
|
|
|
$sql = 'DELETE FROM `*PREFIX*filecache` WHERE `storage` = ?';
|
|
|
|
\OC_DB::executeAudited($sql, array($numericId));
|
|
|
|
}
|
2014-01-22 02:58:48 +04:00
|
|
|
}
|
2013-04-26 02:00:18 +04:00
|
|
|
}
|