bug fixes

This commit is contained in:
Dennis Eichhorn 2021-10-03 01:25:38 +02:00
parent 9d6e431c3b
commit d209c16831
6 changed files with 99 additions and 36 deletions

View File

@ -209,7 +209,7 @@ class Account implements \JsonSerializable, ArrayableInterface
/** /**
* User has group. * User has group.
* *
* @param int $group Group id * @param int $id Group id
* *
* @return void * @return void
* *

View File

@ -104,11 +104,11 @@ abstract class StatusAbstract
} }
if (!\is_file($destRoutePath)) { if (!\is_file($destRoutePath)) {
throw new PathException($destRoutePath); throw new PathException($destRoutePath); // @codeCoverageIgnore
} }
if (!\is_writable($destRoutePath)) { if (!\is_writable($destRoutePath)) {
throw new PermissionException($destRoutePath); throw new PermissionException($destRoutePath); // @codeCoverageIgnore
} }
/** @noinspection PhpIncludeInspection */ /** @noinspection PhpIncludeInspection */

View File

@ -28,6 +28,14 @@ use phpOMS\DataStorage\Cache\Exception\InvalidConnectionConfigException;
*/ */
final class MemCached extends ConnectionAbstract final class MemCached extends ConnectionAbstract
{ {
/**
* Delimiter for cache meta data
*
* @var string
* @since 1.0.0
*/
private const DELIM = '$';
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -90,7 +98,7 @@ final class MemCached extends ConnectionAbstract
throw new \InvalidArgumentException(); throw new \InvalidArgumentException();
} }
$this->con->set($key, $value, \max($expire, 0)); $this->con->set((string) $key, $value, \max($expire, 0));
} }
/** /**
@ -106,7 +114,7 @@ final class MemCached extends ConnectionAbstract
throw new \InvalidArgumentException(); throw new \InvalidArgumentException();
} }
return $this->con->add($key, $value, \max($expire, 0)); return $this->con->add((string) $key, $value, \max($expire, 0));
} }
/** /**
@ -118,7 +126,7 @@ final class MemCached extends ConnectionAbstract
return null; return null;
} }
$result = $this->con->get($key); $result = $this->con->get((string) $key);
if ($this->con->getResultCode() !== \Memcached::RES_SUCCESS) { if ($this->con->getResultCode() !== \Memcached::RES_SUCCESS) {
return null; return null;
@ -136,7 +144,7 @@ final class MemCached extends ConnectionAbstract
return false; return false;
} }
return $this->con->delete($key); return $this->con->delete((string) $key);
} }
/** /**
@ -148,7 +156,7 @@ final class MemCached extends ConnectionAbstract
return false; return false;
} }
return $this->con->get($key) !== false; return $this->con->get((string) $key) !== false;
} }
/** /**
@ -156,7 +164,7 @@ final class MemCached extends ConnectionAbstract
*/ */
public function increment(int | string $key, int $value = 1) : bool public function increment(int | string $key, int $value = 1) : bool
{ {
$this->con->increment($key, $value); $this->con->increment((string) $key, $value);
return true; return true;
} }
@ -166,7 +174,7 @@ final class MemCached extends ConnectionAbstract
*/ */
public function decrement(int | string $key, int $value = 1) : bool public function decrement(int | string $key, int $value = 1) : bool
{ {
$this->con->decrement($key, $value); $this->con->decrement((string) $key, $value);
return true; return true;
} }
@ -176,9 +184,9 @@ final class MemCached extends ConnectionAbstract
*/ */
public function rename(int | string $old, int | string $new, int $expire = -1) : void public function rename(int | string $old, int | string $new, int $expire = -1) : void
{ {
$value = $this->get($old); $value = $this->get((string) $old);
$this->set($new, $value, $expire); $this->set((string) $new, $value, $expire);
$this->delete($old); $this->delete((string) $old);
} }
/** /**
@ -209,6 +217,61 @@ final class MemCached extends ConnectionAbstract
return $values; return $values;
} }
/**
* Parse cached value
*
* @param int $type Cached value type
* @param string $raw Cached value
* @param int $expireEnd Value end position
*
* @return mixed
*
* @since 1.0.0
*/
private function reverseValue(int $type, string $raw, int $expireEnd) : mixed
{
switch ($type) {
case CacheValueType::_INT:
return (int) \substr($raw, $expireEnd + 1);
case CacheValueType::_FLOAT:
return (float) \substr($raw, $expireEnd + 1);
case CacheValueType::_BOOL:
return (bool) \substr($raw, $expireEnd + 1);
case CacheValueType::_STRING:
return \substr($raw, $expireEnd + 1);
case CacheValueType::_ARRAY:
$array = \substr($raw, $expireEnd + 1);
return \json_decode($array === false ? '[]' : $array, true);
case CacheValueType::_NULL:
return null;
case CacheValueType::_JSONSERIALIZABLE:
$namespaceStart = (int) \strpos($raw, self::DELIM, $expireEnd);
$namespaceEnd = (int) \strpos($raw, self::DELIM, $namespaceStart + 1);
$namespace = \substr($raw, $namespaceStart + 1, $namespaceEnd - $namespaceStart - 1);
if ($namespace === false) {
return null; // @codeCoverageIgnore
}
return new $namespace();
case CacheValueType::_SERIALIZABLE:
$namespaceStart = (int) \strpos($raw, self::DELIM, $expireEnd);
$namespaceEnd = (int) \strpos($raw, self::DELIM, $namespaceStart + 1);
$namespace = \substr($raw, $namespaceStart + 1, $namespaceEnd - $namespaceStart - 1);
if ($namespace === false) {
return null; // @codeCoverageIgnore
}
$obj = new $namespace();
$obj->unserialize(\substr($raw, $namespaceEnd + 1));
return $obj;
default:
return null;
}
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -234,7 +297,7 @@ final class MemCached extends ConnectionAbstract
public function updateExpire(int | string $key, int $expire = -1) : bool public function updateExpire(int | string $key, int $expire = -1) : bool
{ {
if ($expire > 0) { if ($expire > 0) {
$this->con->touch($key, $expire); $this->con->touch((string) $key, $expire);
} }
return true; return true;
@ -271,7 +334,7 @@ final class MemCached extends ConnectionAbstract
return false; return false;
} }
return $this->con->replace($key, $value, \max($expire, 0)); return $this->con->replace((string) $key, $value, \max($expire, 0));
} }
/** /**

View File

@ -111,12 +111,12 @@ final class RedisCache extends ConnectionAbstract
} }
if ($expire > 0) { if ($expire > 0) {
$this->con->setEx($key, $expire, $this->build($value)); $this->con->setEx((string) $key, $expire, $this->build($value));
return; return;
} }
$this->con->set($key, $this->build($value)); $this->con->set((string) $key, $this->build($value));
} }
/** /**
@ -129,10 +129,10 @@ final class RedisCache extends ConnectionAbstract
} }
if ($expire > 0) { if ($expire > 0) {
return $this->con->setNx($key, $this->build($value), $expire); return $this->con->setNx((string) $key, $this->build($value), $expire);
} }
return $this->con->setNx($key, $this->build($value)); return $this->con->setNx((string) $key, $this->build($value));
} }
/** /**
@ -140,11 +140,11 @@ final class RedisCache extends ConnectionAbstract
*/ */
public function get(int | string $key, int $expire = -1) : mixed public function get(int | string $key, int $expire = -1) : mixed
{ {
if ($this->status !== CacheStatus::OK || $this->con->exists($key) < 1) { if ($this->status !== CacheStatus::OK || $this->con->exists((string) $key) < 1) {
return null; return null;
} }
$result = $this->con->get($key); $result = $this->con->get((string) $key);
if (\is_string($result)) { if (\is_string($result)) {
$type = (int) $result[0]; $type = (int) $result[0];
@ -164,7 +164,7 @@ final class RedisCache extends ConnectionAbstract
return false; return false;
} }
return $this->con->del($key) > 0; return $this->con->del((string) $key) > 0;
} }
/** /**
@ -176,7 +176,7 @@ final class RedisCache extends ConnectionAbstract
return false; return false;
} }
return $this->con->exists($key); return $this->con->exists((string) $key) > 0;
} }
/** /**
@ -184,7 +184,7 @@ final class RedisCache extends ConnectionAbstract
*/ */
public function increment(int | string $key, int $value = 1) : bool public function increment(int | string $key, int $value = 1) : bool
{ {
$this->con->incrBy($key, $value); $this->con->incrBy((string) $key, $value);
return true; return true;
} }
@ -194,7 +194,7 @@ final class RedisCache extends ConnectionAbstract
*/ */
public function decrement(int | string $key, int $value = 1) : bool public function decrement(int | string $key, int $value = 1) : bool
{ {
$this->con->decrBy($key, $value); $this->con->decrBy((string) $key, $value);
return true; return true;
} }
@ -204,10 +204,10 @@ final class RedisCache extends ConnectionAbstract
*/ */
public function rename(int | string $old, int | string $new, int $expire = -1) : void public function rename(int | string $old, int | string $new, int $expire = -1) : void
{ {
$this->con->rename($old, $new); $this->con->rename((string) $old, (string) $new);
if ($expire > 0) { if ($expire > 0) {
$this->con->expire($new, $expire); $this->con->expire((string) $new, $expire);
} }
} }
@ -225,7 +225,7 @@ final class RedisCache extends ConnectionAbstract
foreach ($keys as $key) { foreach ($keys as $key) {
if (\preg_match('/' . $pattern . '/', $key) === 1) { if (\preg_match('/' . $pattern . '/', $key) === 1) {
$result = $this->con->get($key); $result = $this->con->get((string) $key);
if (\is_string($result)) { if (\is_string($result)) {
$type = (int) $result[0]; $type = (int) $result[0];
$start = (int) \strpos($result, self::DELIM); $start = (int) \strpos($result, self::DELIM);
@ -264,7 +264,7 @@ final class RedisCache extends ConnectionAbstract
public function updateExpire(int | string $key, int $expire = -1) : bool public function updateExpire(int | string $key, int $expire = -1) : bool
{ {
if ($expire > 0) { if ($expire > 0) {
$this->con->expire($key, $expire); $this->con->expire((string) $key, $expire);
} }
return true; return true;
@ -301,8 +301,8 @@ final class RedisCache extends ConnectionAbstract
return false; return false;
} }
if ($this->con->exists($key) > 0) { if ($this->con->exists((string) $key) > 0) {
$this->set($key, $value, $expire); $this->set((string) $key, $value, $expire);
return true; return true;
} }

View File

@ -121,7 +121,7 @@ abstract class ModuleAbstract
public static function getLocalization(string $language, string $destination) : array public static function getLocalization(string $language, string $destination) : array
{ {
$lang = []; $lang = [];
if (\is_file($oldPath = static::PATH . '/Theme/' . $destination . '/Lang/' . $language . '.lang.php')) { if (\is_file($oldPath = \rtrim(static::PATH, '/') . '/Theme/' . $destination . '/Lang/' . $language . '.lang.php')) {
/** @noinspection PhpIncludeInspection */ /** @noinspection PhpIncludeInspection */
return include $oldPath; return include $oldPath;
} }

View File

@ -114,11 +114,11 @@ abstract class StatusAbstract
} }
if (!\is_file($destRoutePath)) { if (!\is_file($destRoutePath)) {
throw new PathException($destRoutePath); throw new PathException($destRoutePath); // @codeCoverageIgnore
} }
if (!\is_writable($destRoutePath)) { if (!\is_writable($destRoutePath)) {
throw new PermissionException($destRoutePath); throw new PermissionException($destRoutePath); // @codeCoverageIgnore
} }
/** @noinspection PhpIncludeInspection */ /** @noinspection PhpIncludeInspection */
@ -246,11 +246,11 @@ abstract class StatusAbstract
} }
if (!\is_file($destRoutePath)) { if (!\is_file($destRoutePath)) {
throw new PathException($destRoutePath); throw new PathException($destRoutePath); // @codeCoverageIgnore
} }
if (!\is_writable($destRoutePath)) { if (!\is_writable($destRoutePath)) {
throw new PermissionException($destRoutePath); throw new PermissionException($destRoutePath); // @codeCoverageIgnore
} }
/** @noinspection PhpIncludeInspection */ /** @noinspection PhpIncludeInspection */