mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-23 08:24:54 +00:00
e74a3ae3cb
- Specifying a non-integer parent no longer silently casts to 0 or 1 - Specifying a folder ID of 0 now always converts to null automatically - Performing both a rename and move to root in the same operation no longer results in potential duplicates - Calling folderSetProperties with an empty data array no peforms an update; it now returns false before the update call - Modification timestamps are now actually updated when a folder is modified - Constraint violation exceptions triggered by code (rather than the database) now print a message - Renaming a folder or subscription to a non-string value (e.g. an array) throws an exception rather than silently casting - Added tests to better cover all the above - Centralized the normalization of integers and title strings into a new ValueInfo static class
73 lines
No EOL
2 KiB
PHP
73 lines
No EOL
2 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
namespace JKingWeb\Arsse\Misc;
|
|
|
|
class ValueInfo {
|
|
// universal
|
|
const VALID = 1 << 0;
|
|
const NULL = 1 << 1;
|
|
// integers
|
|
const ZERO = 1 << 2;
|
|
const NEG = 1 << 3;
|
|
// strings
|
|
const EMPTY = 1 << 2;
|
|
const WHITE = 1 << 3;
|
|
|
|
static public function int($value): int {
|
|
$out = 0;
|
|
// check if the input is null
|
|
if (is_null($value)) {
|
|
$out += self::NULL;
|
|
}
|
|
// normalize the value to an integer or float if possible
|
|
if (is_string($value)) {
|
|
if (strval(@intval($value))===$value) {
|
|
$value = (int) $value;
|
|
} elseif (strval(@floatval($value))===$value) {
|
|
$value = (float) $value;
|
|
}
|
|
// the empty string is equivalent to null when evaluating an integer
|
|
if (!strlen((string) $value)) {
|
|
$out += self::NULL;
|
|
}
|
|
}
|
|
// if the value is not an integer or integral float, stop
|
|
if (!is_int($value) && (!is_float($value) || fmod($value, 1))) {
|
|
return $out;
|
|
}
|
|
// mark validity
|
|
$value = (int) $value;
|
|
$out += self::VALID;
|
|
// mark zeroness
|
|
if(!$value) {
|
|
$out += self::ZERO;
|
|
}
|
|
// mark negativeness
|
|
if ($value < 0) {
|
|
$out += self::NEG;
|
|
}
|
|
return $out;
|
|
}
|
|
|
|
static public function str($value): int {
|
|
$out = 0;
|
|
// check if the input is null
|
|
if (is_null($value)) {
|
|
$out += self::NULL;
|
|
}
|
|
// if the value is not scalar, it cannot be valid
|
|
if (!is_scalar($value)) {
|
|
return $out;
|
|
}
|
|
// mark validity
|
|
$out += self::VALID;
|
|
if (!strlen((string) $value)) {
|
|
// mark emptiness
|
|
$out += self::EMPTY;
|
|
} elseif (!strlen(trim((string) $value))) {
|
|
// mark whitespacedness
|
|
$out += self::WHITE;
|
|
}
|
|
return $out;
|
|
}
|
|
} |