mirror of
https://github.com/shlinkio/shlink.git
synced 2026-03-07 07:43:12 +08:00
Removed more functional-php usages
This commit is contained in:
@@ -13,7 +13,6 @@ use Shlinkio\Shlink\Core\ErrorHandler\Model\NotFoundType;
|
||||
use Shlinkio\Shlink\Core\Util\RedirectResponseHelperInterface;
|
||||
|
||||
use function Functional\compose;
|
||||
use function Functional\id;
|
||||
use function str_replace;
|
||||
use function urlencode;
|
||||
|
||||
@@ -23,8 +22,8 @@ class NotFoundRedirectResolver implements NotFoundRedirectResolverInterface
|
||||
private const ORIGINAL_PATH_PLACEHOLDER = '{ORIGINAL_PATH}';
|
||||
|
||||
public function __construct(
|
||||
private RedirectResponseHelperInterface $redirectResponseHelper,
|
||||
private LoggerInterface $logger,
|
||||
private readonly RedirectResponseHelperInterface $redirectResponseHelper,
|
||||
private readonly LoggerInterface $logger,
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -73,7 +72,7 @@ class NotFoundRedirectResolver implements NotFoundRedirectResolverInterface
|
||||
$replacePlaceholderForPattern(self::ORIGINAL_PATH_PLACEHOLDER, $path, $modifier),
|
||||
);
|
||||
$replacePlaceholdersInPath = compose(
|
||||
$replacePlaceholders(id(...)),
|
||||
$replacePlaceholders(static fn (mixed $v) => $v),
|
||||
static fn (?string $path) => $path === null ? null : str_replace('//', '/', $path),
|
||||
);
|
||||
$replacePlaceholdersInQuery = $replacePlaceholders(urlencode(...));
|
||||
|
||||
@@ -9,25 +9,34 @@ use Mezzio\Router\Route;
|
||||
use Shlinkio\Shlink\Core\Action\RedirectAction;
|
||||
use Shlinkio\Shlink\Core\Util\RedirectStatus;
|
||||
|
||||
use function array_values;
|
||||
use function count;
|
||||
use function Functional\partition;
|
||||
|
||||
use const Shlinkio\Shlink\DEFAULT_REDIRECT_STATUS_CODE;
|
||||
|
||||
/**
|
||||
* Sets the appropriate allowed methods on the redirect route, based on the redirect status code that was configured.
|
||||
* * For "legacy" status codes (301 and 302) the redirect URL will work only on GET method.
|
||||
* * For other status codes (307 and 308) the redirect URL will work on any method.
|
||||
*/
|
||||
class ShortUrlMethodsProcessor
|
||||
{
|
||||
public function __invoke(array $config): array
|
||||
{
|
||||
[$redirectRoutes, $rest] = partition(
|
||||
$config['routes'] ?? [],
|
||||
static fn (array $route) => $route['name'] === RedirectAction::class,
|
||||
);
|
||||
if (count($redirectRoutes) === 0) {
|
||||
$allRoutes = $config['routes'] ?? [];
|
||||
$redirectRoute = null;
|
||||
$rest = [];
|
||||
|
||||
// Get default route from routes array
|
||||
foreach ($allRoutes as $route) {
|
||||
if ($route['name'] === RedirectAction::class) {
|
||||
$redirectRoute ??= $route;
|
||||
} else {
|
||||
$rest[] = $route;
|
||||
}
|
||||
}
|
||||
|
||||
if ($redirectRoute === null) {
|
||||
return $config;
|
||||
}
|
||||
|
||||
[$redirectRoute] = array_values($redirectRoutes);
|
||||
$redirectStatus = RedirectStatus::tryFrom(
|
||||
$config['redirects']['redirect_status_code'] ?? 0,
|
||||
) ?? DEFAULT_REDIRECT_STATUS_CODE;
|
||||
|
||||
@@ -15,8 +15,6 @@ use Shlinkio\Shlink\Rest\ApiKey\Role;
|
||||
use Shlinkio\Shlink\Rest\Entity\ApiKey;
|
||||
|
||||
use function array_map;
|
||||
use function Functional\first;
|
||||
use function Functional\group;
|
||||
|
||||
class DomainService implements DomainServiceInterface
|
||||
{
|
||||
@@ -49,12 +47,19 @@ class DomainService implements DomainServiceInterface
|
||||
{
|
||||
/** @var DomainRepositoryInterface $repo */
|
||||
$repo = $this->em->getRepository(Domain::class);
|
||||
$groups = group(
|
||||
$repo->findDomains($apiKey),
|
||||
fn (Domain $domain) => $domain->authority === $this->defaultDomain ? 'default' : 'domains',
|
||||
);
|
||||
$allDomains = $repo->findDomains($apiKey);
|
||||
$defaultDomain = null;
|
||||
$restOfDomains = [];
|
||||
|
||||
return [first($groups['default'] ?? []), $groups['domains'] ?? []];
|
||||
foreach ($allDomains as $domain) {
|
||||
if ($domain->authority === $this->defaultDomain) {
|
||||
$defaultDomain = $domain;
|
||||
} else {
|
||||
$restOfDomains[] = $domain;
|
||||
}
|
||||
}
|
||||
|
||||
return [$defaultDomain, $restOfDomains];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,7 +13,7 @@ use Shlinkio\Shlink\Core\EventDispatcher\PublishingUpdatesGeneratorInterface;
|
||||
use Shlinkio\Shlink\Core\Visit\Entity\Visit;
|
||||
use Throwable;
|
||||
|
||||
use function Functional\each;
|
||||
use function array_walk;
|
||||
|
||||
abstract class AbstractNotifyVisitListener extends AbstractAsyncListener
|
||||
{
|
||||
@@ -46,7 +46,7 @@ abstract class AbstractNotifyVisitListener extends AbstractAsyncListener
|
||||
$updates = $this->determineUpdatesForVisit($visit);
|
||||
|
||||
try {
|
||||
each($updates, fn (Update $update) => $this->publishingHelper->publishUpdate($update));
|
||||
array_walk($updates, fn (Update $update) => $this->publishingHelper->publishUpdate($update));
|
||||
} catch (Throwable $e) {
|
||||
$this->logger->debug(
|
||||
'Error while trying to notify {name} with new visit. {e}',
|
||||
|
||||
@@ -6,7 +6,6 @@ namespace Shlinkio\Shlink\Core\ShortUrl\Model;
|
||||
|
||||
use Shlinkio\Shlink\Core\Model\DeviceType;
|
||||
|
||||
use function Functional\group;
|
||||
use function trim;
|
||||
|
||||
final class DeviceLongUrlPair
|
||||
@@ -25,27 +24,20 @@ final class DeviceLongUrlPair
|
||||
* * The first one is a list of mapped instances for those entries in the map with non-null value
|
||||
* * The second is a list of DeviceTypes which have been provided with value null
|
||||
*
|
||||
* @param array<string, string> $map
|
||||
* @param array<string, string | null> $map
|
||||
* @return array{array<string, self>, DeviceType[]}
|
||||
*/
|
||||
public static function fromMapToChangeSet(array $map): array
|
||||
{
|
||||
$toRemove = []; // TODO Use when group is removed
|
||||
$toKeep = []; // TODO Use when group is removed
|
||||
$typesWithNullUrl = group($map, static fn (?string $longUrl) => $longUrl === null ? 'remove' : 'keep');
|
||||
|
||||
$deviceTypesToRemove = [];
|
||||
foreach ($typesWithNullUrl['remove'] ?? [] as $deviceType => $_) {
|
||||
$deviceTypesToRemove[] = DeviceType::from($deviceType);
|
||||
}
|
||||
|
||||
$pairsToKeep = [];
|
||||
/**
|
||||
* @var string $deviceType
|
||||
* @var string $longUrl
|
||||
*/
|
||||
foreach ($typesWithNullUrl['keep'] ?? [] as $deviceType => $longUrl) {
|
||||
$pairsToKeep[$deviceType] = self::fromRawTypeAndLongUrl($deviceType, $longUrl);
|
||||
$deviceTypesToRemove = [];
|
||||
|
||||
foreach ($map as $deviceType => $longUrl) {
|
||||
if ($longUrl === null) {
|
||||
$deviceTypesToRemove[] = DeviceType::from($deviceType);
|
||||
} else {
|
||||
$pairsToKeep[$deviceType] = self::fromRawTypeAndLongUrl($deviceType, $longUrl);
|
||||
}
|
||||
}
|
||||
|
||||
return [$pairsToKeep, $deviceTypesToRemove];
|
||||
|
||||
@@ -10,10 +10,10 @@ use Shlinkio\Shlink\Core\Model\DeviceType;
|
||||
|
||||
use function array_keys;
|
||||
use function array_values;
|
||||
use function Functional\every;
|
||||
use function is_array;
|
||||
use function Shlinkio\Shlink\Core\contains;
|
||||
use function Shlinkio\Shlink\Core\enumValues;
|
||||
use function Shlinkio\Shlink\Core\every;
|
||||
|
||||
class DeviceLongUrlsValidator extends AbstractValidator
|
||||
{
|
||||
|
||||
@@ -18,7 +18,7 @@ use Shlinkio\Shlink\Rest\ApiKey\Spec\WithApiKeySpecsEnsuringJoin;
|
||||
use Shlinkio\Shlink\Rest\Entity\ApiKey;
|
||||
|
||||
use function array_map;
|
||||
use function Functional\each;
|
||||
use function array_walk;
|
||||
use function Shlinkio\Shlink\Core\camelCaseToSnakeCase;
|
||||
|
||||
use const PHP_INT_MAX;
|
||||
@@ -95,7 +95,8 @@ class TagRepository extends EntitySpecificationRepository implements TagReposito
|
||||
$nonBotVisitsSubQb = $buildVisitsSubQb(true, 'non_bot_visits');
|
||||
|
||||
// Apply API key specification to all sub-queries
|
||||
each([$tagsSubQb, $allVisitsSubQb, $nonBotVisitsSubQb], $applyApiKeyToNativeQb);
|
||||
$queryBuilders = [$tagsSubQb, $allVisitsSubQb, $nonBotVisitsSubQb];
|
||||
array_walk($queryBuilders, $applyApiKeyToNativeQb);
|
||||
|
||||
// A native query builder needs to be used here, because DQL and ORM query builders do not support
|
||||
// sub-queries at "from" and "join" level.
|
||||
|
||||
Reference in New Issue
Block a user