[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: CarbonCallFactory.php
File is not writable. Editing disabled.
<?php declare (strict_types=1); namespace Rector\Carbon\NodeFactory; use RectorPrefix202411\Nette\Utils\Strings; use PhpParser\Node\Arg; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Identifier; use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Scalar\LNumber; use PhpParser\Node\Scalar\String_; final class CarbonCallFactory { /** * @var string * @see https://regex101.com/r/LLMrFw/1 */ private const PLUS_MINUS_COUNT_REGEX = '#(?<operator>\\+|-)(\\s+)?(?<count>\\d+)(\\s+)?(?<unit>seconds|second|sec|minutes|minute|min|hours|hour|days|day|weeks|week|months|month|years|year)#'; /** * @var string * @see https://regex101.com/r/IhxHTO/1 */ private const STATIC_DATE_REGEX = '#now|yesterday|today|tomorrow#'; /** * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall */ public function createFromDateTimeString(FullyQualified $carbonFullyQualified, String_ $string) { $carbonCall = $this->createStaticCall($carbonFullyQualified, $string); $string->value = Strings::replace($string->value, self::STATIC_DATE_REGEX); // Handle add/sub multiple times while ($match = Strings::match($string->value, self::PLUS_MINUS_COUNT_REGEX)) { $methodCall = $this->createModifyMethodCall($carbonCall, new LNumber((int) $match['count']), $match['unit'], $match['operator']); if ($methodCall instanceof MethodCall) { $carbonCall = $methodCall; $string->value = Strings::replace($string->value, self::PLUS_MINUS_COUNT_REGEX, '', 1); } } // If we still have something in the string, we go back to the first method and replace this with a parse if (($rest = Strings::trim($string->value)) !== '') { $currentCall = $carbonCall; $callStack = []; while ($currentCall instanceof MethodCall) { $callStack[] = $currentCall; $currentCall = $currentCall->var; } if (!$currentCall instanceof StaticCall) { return $carbonCall; } // If we fallback to a parse we want to include tomorrow/today/yesterday etc if ($currentCall->name instanceof Identifier && $currentCall->name->name != 'now') { $rest .= ' ' . $currentCall->name->name; } $currentCall->name = new Identifier('parse'); $currentCall->args = [new Arg(new String_($rest))]; // Rebuild original call from callstack $carbonCall = $this->rebuildCallStack($currentCall, $callStack); } return $carbonCall; } private function createStaticCall(FullyQualified $carbonFullyQualified, String_ $string) : StaticCall { $startDate = Strings::match($string->value, self::STATIC_DATE_REGEX)[0] ?? 'now'; return new StaticCall($carbonFullyQualified, new Identifier($startDate)); } /** * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall $carbonCall */ private function createModifyMethodCall($carbonCall, LNumber $countLNumber, string $unit, string $operator) : ?MethodCall { switch ($unit) { case 'sec': case 'second': case 'seconds': $unit = 'seconds'; break; case 'min': case 'minute': case 'minutes': $unit = 'minutes'; break; case 'hour': case 'hours': $unit = 'hours'; break; case 'day': case 'days': $unit = 'days'; break; case 'week': case 'weeks': $unit = 'weeks'; break; case 'month': case 'months': $unit = 'months'; break; case 'year': case 'years': $unit = 'years'; break; default: $unit = null; break; } switch ($operator) { case '+': $operator = 'add'; break; case '-': $operator = 'sub'; break; default: $operator = null; break; } if ($unit === null || $operator === null) { return null; } $methodName = $operator . \ucfirst($unit); return new MethodCall($carbonCall, new Identifier($methodName), [new Arg($countLNumber)]); } /** * @param MethodCall[] $callStack * @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall */ private function rebuildCallStack(StaticCall $staticCall, array $callStack) { if ($callStack === []) { return $staticCall; } $currentCall = $staticCall; $callStack = \array_reverse($callStack); foreach ($callStack as $call) { $call->var = $currentCall; $currentCall = $call; } return $currentCall; } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium264.web-hosting.com
Server IP: 69.57.162.13
PHP Version: 8.1.34
Server Software: LiteSpeed
System: Linux premium264.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 73.56 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
No
pkexec:
No
git:
Yes
User Info
Username: kidscntx
User ID (UID): 1154
Group ID (GID): 1112
Script Owner UID: 1154
Current Dir Owner: N/A