Vendor
This commit is contained in:
parent
3248eb0647
commit
3cf9a552ba
44
paragonik-backend/.env
Normal file
44
paragonik-backend/.env
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
APP_NAME=Laravel
|
||||||
|
APP_ENV=local
|
||||||
|
APP_KEY=base64:45+0NK9IcE9ivGTD9q/hzru/ZA0NfoR79rJBjXcwlU4=
|
||||||
|
APP_DEBUG=true
|
||||||
|
APP_URL=http://localhost
|
||||||
|
|
||||||
|
LOG_CHANNEL=stack
|
||||||
|
|
||||||
|
DB_CONNECTION=mysql
|
||||||
|
DB_HOST=127.0.0.1
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_DATABASE=laravel
|
||||||
|
DB_USERNAME=root
|
||||||
|
DB_PASSWORD=
|
||||||
|
|
||||||
|
BROADCAST_DRIVER=log
|
||||||
|
CACHE_DRIVER=file
|
||||||
|
QUEUE_CONNECTION=sync
|
||||||
|
SESSION_DRIVER=file
|
||||||
|
SESSION_LIFETIME=120
|
||||||
|
|
||||||
|
REDIS_HOST=127.0.0.1
|
||||||
|
REDIS_PASSWORD=null
|
||||||
|
REDIS_PORT=6379
|
||||||
|
|
||||||
|
MAIL_DRIVER=smtp
|
||||||
|
MAIL_HOST=smtp.mailtrap.io
|
||||||
|
MAIL_PORT=2525
|
||||||
|
MAIL_USERNAME=null
|
||||||
|
MAIL_PASSWORD=null
|
||||||
|
MAIL_ENCRYPTION=null
|
||||||
|
|
||||||
|
AWS_ACCESS_KEY_ID=
|
||||||
|
AWS_SECRET_ACCESS_KEY=
|
||||||
|
AWS_DEFAULT_REGION=us-east-1
|
||||||
|
AWS_BUCKET=
|
||||||
|
|
||||||
|
PUSHER_APP_ID=
|
||||||
|
PUSHER_APP_KEY=
|
||||||
|
PUSHER_APP_SECRET=
|
||||||
|
PUSHER_APP_CLUSTER=mt1
|
||||||
|
|
||||||
|
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||||
|
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
37
paragonik-backend/bootstrap/cache/packages.php
vendored
Normal file
37
paragonik-backend/bootstrap/cache/packages.php
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php return array (
|
||||||
|
'beyondcode/laravel-dump-server' =>
|
||||||
|
array (
|
||||||
|
'providers' =>
|
||||||
|
array (
|
||||||
|
0 => 'BeyondCode\\DumpServer\\DumpServerServiceProvider',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'fideloper/proxy' =>
|
||||||
|
array (
|
||||||
|
'providers' =>
|
||||||
|
array (
|
||||||
|
0 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'laravel/tinker' =>
|
||||||
|
array (
|
||||||
|
'providers' =>
|
||||||
|
array (
|
||||||
|
0 => 'Laravel\\Tinker\\TinkerServiceProvider',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'nesbot/carbon' =>
|
||||||
|
array (
|
||||||
|
'providers' =>
|
||||||
|
array (
|
||||||
|
0 => 'Carbon\\Laravel\\ServiceProvider',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'nunomaduro/collision' =>
|
||||||
|
array (
|
||||||
|
'providers' =>
|
||||||
|
array (
|
||||||
|
0 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
210
paragonik-backend/bootstrap/cache/services.php
vendored
Normal file
210
paragonik-backend/bootstrap/cache/services.php
vendored
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
<?php return array (
|
||||||
|
'providers' =>
|
||||||
|
array (
|
||||||
|
0 => 'Illuminate\\Auth\\AuthServiceProvider',
|
||||||
|
1 => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
|
||||||
|
2 => 'Illuminate\\Bus\\BusServiceProvider',
|
||||||
|
3 => 'Illuminate\\Cache\\CacheServiceProvider',
|
||||||
|
4 => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
5 => 'Illuminate\\Cookie\\CookieServiceProvider',
|
||||||
|
6 => 'Illuminate\\Database\\DatabaseServiceProvider',
|
||||||
|
7 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
|
||||||
|
8 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
|
||||||
|
9 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
|
||||||
|
10 => 'Illuminate\\Hashing\\HashServiceProvider',
|
||||||
|
11 => 'Illuminate\\Mail\\MailServiceProvider',
|
||||||
|
12 => 'Illuminate\\Notifications\\NotificationServiceProvider',
|
||||||
|
13 => 'Illuminate\\Pagination\\PaginationServiceProvider',
|
||||||
|
14 => 'Illuminate\\Pipeline\\PipelineServiceProvider',
|
||||||
|
15 => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||||
|
16 => 'Illuminate\\Redis\\RedisServiceProvider',
|
||||||
|
17 => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
|
||||||
|
18 => 'Illuminate\\Session\\SessionServiceProvider',
|
||||||
|
19 => 'Illuminate\\Translation\\TranslationServiceProvider',
|
||||||
|
20 => 'Illuminate\\Validation\\ValidationServiceProvider',
|
||||||
|
21 => 'Illuminate\\View\\ViewServiceProvider',
|
||||||
|
22 => 'BeyondCode\\DumpServer\\DumpServerServiceProvider',
|
||||||
|
23 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
|
||||||
|
24 => 'Laravel\\Tinker\\TinkerServiceProvider',
|
||||||
|
25 => 'Carbon\\Laravel\\ServiceProvider',
|
||||||
|
26 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
|
||||||
|
27 => 'App\\Providers\\AppServiceProvider',
|
||||||
|
28 => 'App\\Providers\\AuthServiceProvider',
|
||||||
|
29 => 'App\\Providers\\EventServiceProvider',
|
||||||
|
30 => 'App\\Providers\\RouteServiceProvider',
|
||||||
|
),
|
||||||
|
'eager' =>
|
||||||
|
array (
|
||||||
|
0 => 'Illuminate\\Auth\\AuthServiceProvider',
|
||||||
|
1 => 'Illuminate\\Cookie\\CookieServiceProvider',
|
||||||
|
2 => 'Illuminate\\Database\\DatabaseServiceProvider',
|
||||||
|
3 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
|
||||||
|
4 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
|
||||||
|
5 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
|
||||||
|
6 => 'Illuminate\\Notifications\\NotificationServiceProvider',
|
||||||
|
7 => 'Illuminate\\Pagination\\PaginationServiceProvider',
|
||||||
|
8 => 'Illuminate\\Session\\SessionServiceProvider',
|
||||||
|
9 => 'Illuminate\\View\\ViewServiceProvider',
|
||||||
|
10 => 'BeyondCode\\DumpServer\\DumpServerServiceProvider',
|
||||||
|
11 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
|
||||||
|
12 => 'Carbon\\Laravel\\ServiceProvider',
|
||||||
|
13 => 'App\\Providers\\AppServiceProvider',
|
||||||
|
14 => 'App\\Providers\\AuthServiceProvider',
|
||||||
|
15 => 'App\\Providers\\EventServiceProvider',
|
||||||
|
16 => 'App\\Providers\\RouteServiceProvider',
|
||||||
|
),
|
||||||
|
'deferred' =>
|
||||||
|
array (
|
||||||
|
'Illuminate\\Broadcasting\\BroadcastManager' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
|
||||||
|
'Illuminate\\Contracts\\Broadcasting\\Factory' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
|
||||||
|
'Illuminate\\Contracts\\Broadcasting\\Broadcaster' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
|
||||||
|
'Illuminate\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
|
||||||
|
'Illuminate\\Contracts\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
|
||||||
|
'Illuminate\\Contracts\\Bus\\QueueingDispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
|
||||||
|
'cache' => 'Illuminate\\Cache\\CacheServiceProvider',
|
||||||
|
'cache.store' => 'Illuminate\\Cache\\CacheServiceProvider',
|
||||||
|
'memcached.connector' => 'Illuminate\\Cache\\CacheServiceProvider',
|
||||||
|
'command.cache.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.cache.forget' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.clear-compiled' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.auth.resets.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.config.cache' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.config.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.down' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.environment' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.event.cache' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.event.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.event.list' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.key.generate' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.migrate' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.migrate.fresh' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.migrate.install' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.migrate.refresh' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.migrate.reset' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.migrate.rollback' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.migrate.status' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.optimize' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.optimize.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.package.discover' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.preset' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.queue.failed' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.queue.flush' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.queue.forget' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.queue.listen' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.queue.restart' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.queue.retry' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.queue.work' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.route.cache' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.route.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.route.list' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.seed' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'Illuminate\\Console\\Scheduling\\ScheduleFinishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'Illuminate\\Console\\Scheduling\\ScheduleRunCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.storage.link' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.up' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.view.cache' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.view.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.app.name' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.auth.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.cache.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.channel.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.console.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.controller.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.event.generate' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.event.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.exception.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.factory.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.job.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.listener.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.mail.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.middleware.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.migrate.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.model.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.notification.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.notification.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.observer.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.policy.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.provider.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.queue.failed-table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.queue.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.request.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.resource.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.rule.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.seeder.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.session.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.serve' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.test.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'command.vendor.publish' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'migrator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'migration.repository' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'migration.creator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'composer' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
|
||||||
|
'hash' => 'Illuminate\\Hashing\\HashServiceProvider',
|
||||||
|
'hash.driver' => 'Illuminate\\Hashing\\HashServiceProvider',
|
||||||
|
'mailer' => 'Illuminate\\Mail\\MailServiceProvider',
|
||||||
|
'swift.mailer' => 'Illuminate\\Mail\\MailServiceProvider',
|
||||||
|
'swift.transport' => 'Illuminate\\Mail\\MailServiceProvider',
|
||||||
|
'Illuminate\\Mail\\Markdown' => 'Illuminate\\Mail\\MailServiceProvider',
|
||||||
|
'Illuminate\\Contracts\\Pipeline\\Hub' => 'Illuminate\\Pipeline\\PipelineServiceProvider',
|
||||||
|
'queue' => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||||
|
'queue.worker' => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||||
|
'queue.listener' => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||||
|
'queue.failer' => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||||
|
'queue.connection' => 'Illuminate\\Queue\\QueueServiceProvider',
|
||||||
|
'redis' => 'Illuminate\\Redis\\RedisServiceProvider',
|
||||||
|
'redis.connection' => 'Illuminate\\Redis\\RedisServiceProvider',
|
||||||
|
'auth.password' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
|
||||||
|
'auth.password.broker' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
|
||||||
|
'translator' => 'Illuminate\\Translation\\TranslationServiceProvider',
|
||||||
|
'translation.loader' => 'Illuminate\\Translation\\TranslationServiceProvider',
|
||||||
|
'validator' => 'Illuminate\\Validation\\ValidationServiceProvider',
|
||||||
|
'validation.presence' => 'Illuminate\\Validation\\ValidationServiceProvider',
|
||||||
|
'command.tinker' => 'Laravel\\Tinker\\TinkerServiceProvider',
|
||||||
|
'NunoMaduro\\Collision\\Contracts\\Provider' => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
|
||||||
|
),
|
||||||
|
'when' =>
|
||||||
|
array (
|
||||||
|
'Illuminate\\Broadcasting\\BroadcastServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Bus\\BusServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Cache\\CacheServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Hashing\\HashServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Mail\\MailServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Pipeline\\PipelineServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Queue\\QueueServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Redis\\RedisServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Translation\\TranslationServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Illuminate\\Validation\\ValidationServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'Laravel\\Tinker\\TinkerServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider' =>
|
||||||
|
array (
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
@ -0,0 +1 @@
|
|||||||
|
a:3:{s:6:"_token";s:40:"H4CZuLpfqrOz3DIZ8PB4m5IElbtg7xacEjpfXyN6";s:9:"_previous";a:1:{s:3:"url";s:41:"http://localhost/paragonik-backend/public";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}
|
@ -0,0 +1 @@
|
|||||||
|
a:3:{s:6:"_token";s:40:"SHsNXCVKVaotUTjDBbFcP2rZcV5RvKYjOuyUah46";s:9:"_previous";a:1:{s:3:"url";s:19:"http://paragonik.me";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}
|
@ -0,0 +1,100 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="<?php echo e(str_replace('_', '-', app()->getLocale())); ?>">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
|
<title>Laravel</title>
|
||||||
|
|
||||||
|
<!-- Fonts -->
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
|
||||||
|
|
||||||
|
<!-- Styles -->
|
||||||
|
<style>
|
||||||
|
html, body {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #636b6f;
|
||||||
|
font-family: 'Nunito', sans-serif;
|
||||||
|
font-weight: 200;
|
||||||
|
height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-height {
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-center {
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.position-ref {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
top: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 84px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.links > a {
|
||||||
|
color: #636b6f;
|
||||||
|
padding: 0 25px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
letter-spacing: .1rem;
|
||||||
|
text-decoration: none;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-b-md {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="flex-center position-ref full-height">
|
||||||
|
<?php if(Route::has('login')): ?>
|
||||||
|
<div class="top-right links">
|
||||||
|
<?php if(auth()->guard()->check()): ?>
|
||||||
|
<a href="<?php echo e(url('/home')); ?>">Home</a>
|
||||||
|
<?php else: ?>
|
||||||
|
<a href="<?php echo e(route('login')); ?>">Login</a>
|
||||||
|
|
||||||
|
<?php if(Route::has('register')): ?>
|
||||||
|
<a href="<?php echo e(route('register')); ?>">Register</a>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="title m-b-md">
|
||||||
|
Laravel
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="links">
|
||||||
|
<a href="https://laravel.com/docs">Docs</a>
|
||||||
|
<a href="https://laracasts.com">Laracasts</a>
|
||||||
|
<a href="https://laravel-news.com">News</a>
|
||||||
|
<a href="https://blog.laravel.com">Blog</a>
|
||||||
|
<a href="https://nova.laravel.com">Nova</a>
|
||||||
|
<a href="https://forge.laravel.com">Forge</a>
|
||||||
|
<a href="https://github.com/laravel/laravel">GitHub</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
<?php /**PATH D:\xampp\htdocs\paragonik-backend\resources\views/welcome.blade.php ENDPATH**/ ?>
|
7
paragonik-backend/vendor/autoload.php
vendored
Normal file
7
paragonik-backend/vendor/autoload.php
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload.php @generated by Composer
|
||||||
|
|
||||||
|
require_once __DIR__ . '/composer/autoload_real.php';
|
||||||
|
|
||||||
|
return ComposerAutoloaderInit76924bd72d9b9f2ec5cdd3db4408b7ff::getLoader();
|
7
paragonik-backend/vendor/beyondcode/laravel-dump-server/CHANGELOG.md
vendored
Normal file
7
paragonik-backend/vendor/beyondcode/laravel-dump-server/CHANGELOG.md
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to `laravel-dump-server` will be documented in this file
|
||||||
|
|
||||||
|
## 1.0.0 - 2018-07-09
|
||||||
|
|
||||||
|
- initial release
|
55
paragonik-backend/vendor/beyondcode/laravel-dump-server/CONTRIBUTING.md
vendored
Normal file
55
paragonik-backend/vendor/beyondcode/laravel-dump-server/CONTRIBUTING.md
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
Contributions are **welcome** and will be fully **credited**.
|
||||||
|
|
||||||
|
Please read and understand the contribution guide before creating an issue or pull request.
|
||||||
|
|
||||||
|
## Etiquette
|
||||||
|
|
||||||
|
This project is open source, and as such, the maintainers give their free time to build and maintain the source code
|
||||||
|
held within. They make the code freely available in the hope that it will be of use to other developers. It would be
|
||||||
|
extremely unfair for them to suffer abuse or anger for their hard work.
|
||||||
|
|
||||||
|
Please be considerate towards maintainers when raising issues or presenting pull requests. Let's show the
|
||||||
|
world that developers are civilized and selfless people.
|
||||||
|
|
||||||
|
It's the duty of the maintainer to ensure that all submissions to the project are of sufficient
|
||||||
|
quality to benefit the project. Many developers have different skillsets, strengths, and weaknesses. Respect the maintainer's decision, and do not be upset or abusive if your submission is not used.
|
||||||
|
|
||||||
|
## Viability
|
||||||
|
|
||||||
|
When requesting or submitting new features, first consider whether it might be useful to others. Open
|
||||||
|
source projects are used by many developers, who may have entirely different needs to your own. Think about
|
||||||
|
whether or not your feature is likely to be used by other users of the project.
|
||||||
|
|
||||||
|
## Procedure
|
||||||
|
|
||||||
|
Before filing an issue:
|
||||||
|
|
||||||
|
- Attempt to replicate the problem, to ensure that it wasn't a coincidental incident.
|
||||||
|
- Check to make sure your feature suggestion isn't already present within the project.
|
||||||
|
- Check the pull requests tab to ensure that the bug doesn't have a fix in progress.
|
||||||
|
- Check the pull requests tab to ensure that the feature isn't already in progress.
|
||||||
|
|
||||||
|
Before submitting a pull request:
|
||||||
|
|
||||||
|
- Check the codebase to ensure that your feature doesn't already exist.
|
||||||
|
- Check the pull requests to ensure that another person hasn't already submitted the feature or fix.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
If the project maintainer has any additional requirements, you will find them listed here.
|
||||||
|
|
||||||
|
- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](https://pear.php.net/package/PHP_CodeSniffer).
|
||||||
|
|
||||||
|
- **Add tests!** - Your patch won't be accepted if it doesn't have tests.
|
||||||
|
|
||||||
|
- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date.
|
||||||
|
|
||||||
|
- **Consider our release cycle** - We try to follow [SemVer v2.0.0](https://semver.org/). Randomly breaking public APIs is not an option.
|
||||||
|
|
||||||
|
- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests.
|
||||||
|
|
||||||
|
- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](https://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting.
|
||||||
|
|
||||||
|
**Happy coding**!
|
21
paragonik-backend/vendor/beyondcode/laravel-dump-server/LICENSE.md
vendored
Normal file
21
paragonik-backend/vendor/beyondcode/laravel-dump-server/LICENSE.md
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) Beyond Code GmbH <hello@beyondco.de>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
73
paragonik-backend/vendor/beyondcode/laravel-dump-server/README.md
vendored
Normal file
73
paragonik-backend/vendor/beyondcode/laravel-dump-server/README.md
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
# Laravel Dump Server
|
||||||
|
|
||||||
|
[![Latest Version on Packagist](https://img.shields.io/packagist/v/beyondcode/laravel-dump-server.svg?style=flat-square)](https://packagist.org/packages/beyondcode/laravel-dump-server)
|
||||||
|
[![Quality Score](https://img.shields.io/scrutinizer/g/beyondcode/laravel-dump-server.svg?style=flat-square)](https://scrutinizer-ci.com/g/beyondcode/laravel-dump-server)
|
||||||
|
[![Total Downloads](https://img.shields.io/packagist/dt/beyondcode/laravel-dump-server.svg?style=flat-square)](https://packagist.org/packages/beyondcode/laravel-dump-server)
|
||||||
|
|
||||||
|
Bringing the [Symfony Var-Dump Server](https://symfony.com/doc/current/components/var_dumper.html#the-dump-server) to Laravel.
|
||||||
|
|
||||||
|
This package will give you a dump server, that collects all your `dump` call outputs, so that it does not interfere with HTTP / API responses.
|
||||||
|
|
||||||
|
> If you want to learn how to create reusable PHP packages yourself, take a look at my upcoming [PHP Package Development](https://phppackagedevelopment.com) video course.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
You can install the package via composer:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer require --dev beyondcode/laravel-dump-server
|
||||||
|
```
|
||||||
|
|
||||||
|
The package will register itself automatically.
|
||||||
|
|
||||||
|
Optionally you can publish the package configuration using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
php artisan vendor:publish --provider=BeyondCode\\DumpServer\\DumpServerServiceProvider
|
||||||
|
```
|
||||||
|
|
||||||
|
This will publish a file called `debug-server.php` in your `config` folder.
|
||||||
|
In the config file, you can specify the dump server host that you want to listen on, in case you want to change the default value.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Start the dump server by calling the artisan command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
php artisan dump-server
|
||||||
|
```
|
||||||
|
|
||||||
|
You can set the output format to HTML using the `--format` option:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
php artisan dump-server --format=html > dump.html
|
||||||
|
```
|
||||||
|
|
||||||
|
And then you can, as you are used to, put `dump` calls in your methods. But instead of dumping the output in your current HTTP request, they will be dumped in the artisan command.
|
||||||
|
This is very useful, when you want to dump data from API requests, without having to deal with HTTP errors.
|
||||||
|
|
||||||
|
You can see it in action here:
|
||||||
|
|
||||||
|
![Dump Server Demo](https://beyondco.de/github/dumpserver/dumpserver.gif)
|
||||||
|
|
||||||
|
### Changelog
|
||||||
|
|
||||||
|
Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
If you discover any security related issues, please email marcel@beyondco.de instead of using the issue tracker.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
- [Marcel Pociot](https://github.com/mpociot)
|
||||||
|
- [All Contributors](../../contributors)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.
|
||||||
|
|
56
paragonik-backend/vendor/beyondcode/laravel-dump-server/composer.json
vendored
Normal file
56
paragonik-backend/vendor/beyondcode/laravel-dump-server/composer.json
vendored
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"name": "beyondcode/laravel-dump-server",
|
||||||
|
"description": "Symfony Var-Dump Server for Laravel",
|
||||||
|
"keywords": [
|
||||||
|
"beyondcode",
|
||||||
|
"laravel-dump-server"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/beyondcode/laravel-dump-server",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Marcel Pociot",
|
||||||
|
"email": "marcel@beyondco.de",
|
||||||
|
"homepage": "https://beyondco.de",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1",
|
||||||
|
"illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0",
|
||||||
|
"illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0",
|
||||||
|
"illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0",
|
||||||
|
"symfony/var-dumper": "^4.1.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"larapack/dd": "^1.0",
|
||||||
|
"phpunit/phpunit": "^7.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"BeyondCode\\DumpServer\\": "src"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"helpers.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"BeyondCode\\DumpServer\\Tests\\": "tests"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "vendor/bin/phpunit",
|
||||||
|
"test-coverage": "vendor/bin/phpunit --coverage-html coverage"
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"sort-packages": true
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"laravel": {
|
||||||
|
"providers": [
|
||||||
|
"BeyondCode\\DumpServer\\DumpServerServiceProvider"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
8
paragonik-backend/vendor/beyondcode/laravel-dump-server/config/config.php
vendored
Normal file
8
paragonik-backend/vendor/beyondcode/laravel-dump-server/config/config.php
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
/*
|
||||||
|
* The host to use when listening for debug server connections.
|
||||||
|
*/
|
||||||
|
'host' => 'tcp://127.0.0.1:9912',
|
||||||
|
];
|
16
paragonik-backend/vendor/beyondcode/laravel-dump-server/helpers.php
vendored
Normal file
16
paragonik-backend/vendor/beyondcode/laravel-dump-server/helpers.php
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! function_exists('config_path')) {
|
||||||
|
/**
|
||||||
|
* Get the configuration path.
|
||||||
|
*
|
||||||
|
* This is a polyfill for the missing shorthand function in lumen.
|
||||||
|
*
|
||||||
|
* @param string $path
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function config_path($path = '')
|
||||||
|
{
|
||||||
|
return app()->basePath('config').($path ? DIRECTORY_SEPARATOR.$path : $path);
|
||||||
|
}
|
||||||
|
}
|
84
paragonik-backend/vendor/beyondcode/laravel-dump-server/src/DumpServerCommand.php
vendored
Normal file
84
paragonik-backend/vendor/beyondcode/laravel-dump-server/src/DumpServerCommand.php
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace BeyondCode\DumpServer;
|
||||||
|
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
|
use InvalidArgumentException;
|
||||||
|
use Symfony\Component\VarDumper\Cloner\Data;
|
||||||
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
|
use Symfony\Component\VarDumper\Dumper\CliDumper;
|
||||||
|
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
|
||||||
|
use Symfony\Component\VarDumper\Server\DumpServer;
|
||||||
|
use Symfony\Component\VarDumper\Command\Descriptor\CliDescriptor;
|
||||||
|
use Symfony\Component\VarDumper\Command\Descriptor\HtmlDescriptor;
|
||||||
|
|
||||||
|
class DumpServerCommand extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The console command name.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'dump-server {--format=cli : The output format (cli,html).}';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Start the dump server to collect dump information.';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Dump server.
|
||||||
|
*
|
||||||
|
* @var \Symfony\Component\VarDumper\Server\DumpServer
|
||||||
|
*/
|
||||||
|
protected $server;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DumpServerCommand constructor.
|
||||||
|
*
|
||||||
|
* @param \Symfony\Component\VarDumper\Server\DumpServer $server
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct(DumpServer $server)
|
||||||
|
{
|
||||||
|
$this->server = $server;
|
||||||
|
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the command.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
switch ($format = $this->option('format')) {
|
||||||
|
case 'cli':
|
||||||
|
$descriptor = new CliDescriptor(new CliDumper);
|
||||||
|
break;
|
||||||
|
case 'html':
|
||||||
|
$descriptor = new HtmlDescriptor(new HtmlDumper);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new InvalidArgumentException(sprintf('Unsupported format "%s".', $format));
|
||||||
|
}
|
||||||
|
|
||||||
|
$io = new SymfonyStyle($this->input, $this->output);
|
||||||
|
|
||||||
|
$errorIo = $io->getErrorStyle();
|
||||||
|
$errorIo->title('Laravel Var Dump Server');
|
||||||
|
|
||||||
|
$this->server->start();
|
||||||
|
|
||||||
|
$errorIo->success(sprintf('Server listening on %s', $this->server->getHost()));
|
||||||
|
$errorIo->comment('Quit the server with CONTROL-C.');
|
||||||
|
|
||||||
|
$this->server->listen(function (Data $data, array $context, int $clientId) use ($descriptor, $io) {
|
||||||
|
$descriptor->describe($io, $data, $context, $clientId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
56
paragonik-backend/vendor/beyondcode/laravel-dump-server/src/DumpServerServiceProvider.php
vendored
Normal file
56
paragonik-backend/vendor/beyondcode/laravel-dump-server/src/DumpServerServiceProvider.php
vendored
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace BeyondCode\DumpServer;
|
||||||
|
|
||||||
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
use Symfony\Component\VarDumper\VarDumper;
|
||||||
|
use Symfony\Component\VarDumper\Server\Connection;
|
||||||
|
use Symfony\Component\VarDumper\Server\DumpServer;
|
||||||
|
use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider;
|
||||||
|
|
||||||
|
class DumpServerServiceProvider extends ServiceProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Bootstrap the application services.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function boot()
|
||||||
|
{
|
||||||
|
if ($this->app->runningInConsole()) {
|
||||||
|
|
||||||
|
$this->publishes([
|
||||||
|
__DIR__.'/../config/config.php' => config_path('debug-server.php'),
|
||||||
|
], 'config');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register the application services.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function register()
|
||||||
|
{
|
||||||
|
$this->mergeConfigFrom(__DIR__.'/../config/config.php', 'debug-server');
|
||||||
|
|
||||||
|
$this->app->bind('command.dumpserver', DumpServerCommand::class);
|
||||||
|
|
||||||
|
$this->commands([
|
||||||
|
'command.dumpserver',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$host = $this->app['config']->get('debug-server.host');
|
||||||
|
|
||||||
|
$this->app->when(DumpServer::class)->needs('$host')->give($host);
|
||||||
|
|
||||||
|
$connection = new Connection($host, [
|
||||||
|
'request' => new RequestContextProvider($this->app['request']),
|
||||||
|
'source' => new SourceContextProvider('utf-8', base_path()),
|
||||||
|
]);
|
||||||
|
|
||||||
|
VarDumper::setHandler(function ($var) use ($connection) {
|
||||||
|
(new Dumper($connection))->dump($var);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
49
paragonik-backend/vendor/beyondcode/laravel-dump-server/src/Dumper.php
vendored
Normal file
49
paragonik-backend/vendor/beyondcode/laravel-dump-server/src/Dumper.php
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace BeyondCode\DumpServer;
|
||||||
|
|
||||||
|
use Symfony\Component\VarDumper\Cloner\VarCloner;
|
||||||
|
use Symfony\Component\VarDumper\Dumper\CliDumper;
|
||||||
|
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
|
||||||
|
use Symfony\Component\VarDumper\Server\Connection;
|
||||||
|
|
||||||
|
class Dumper
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The connection.
|
||||||
|
*
|
||||||
|
* @var \Symfony\Component\VarDumper\Server\Connection|null
|
||||||
|
*/
|
||||||
|
private $connection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dumper constructor.
|
||||||
|
*
|
||||||
|
* @param \Symfony\Component\VarDumper\Server\Connection|null $connection
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct(Connection $connection = null)
|
||||||
|
{
|
||||||
|
$this->connection = $connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dump a value with elegance.
|
||||||
|
*
|
||||||
|
* @param mixed $value
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function dump($value)
|
||||||
|
{
|
||||||
|
if (class_exists(CliDumper::class)) {
|
||||||
|
$data = (new VarCloner)->cloneVar($value);
|
||||||
|
|
||||||
|
if ($this->connection === null || $this->connection->write($data) === false) {
|
||||||
|
$dumper = in_array(PHP_SAPI, ['cli', 'phpdbg']) ? new CliDumper : new HtmlDumper;
|
||||||
|
$dumper->dump($data);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var_dump($value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
66
paragonik-backend/vendor/beyondcode/laravel-dump-server/src/RequestContextProvider.php
vendored
Normal file
66
paragonik-backend/vendor/beyondcode/laravel-dump-server/src/RequestContextProvider.php
vendored
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace BeyondCode\DumpServer;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Symfony\Component\VarDumper\Cloner\VarCloner;
|
||||||
|
use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface;
|
||||||
|
|
||||||
|
class RequestContextProvider implements ContextProviderInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The current request.
|
||||||
|
*
|
||||||
|
* @var \Illuminate\Http\Request|null
|
||||||
|
*/
|
||||||
|
private $currentRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The variable cloner.
|
||||||
|
*
|
||||||
|
* @var \Symfony\Component\VarDumper\Cloner\VarCloner
|
||||||
|
*/
|
||||||
|
private $cloner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RequestContextProvider constructor.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request|null $currentRequest
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct(Request $currentRequest = null)
|
||||||
|
{
|
||||||
|
$this->currentRequest = $currentRequest;
|
||||||
|
$this->cloner = new VarCloner;
|
||||||
|
$this->cloner->setMaxItems(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the context.
|
||||||
|
*
|
||||||
|
* @return array|null
|
||||||
|
*/
|
||||||
|
public function getContext(): ?array
|
||||||
|
{
|
||||||
|
if ($this->currentRequest === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$controller = null;
|
||||||
|
|
||||||
|
if ($route = $this->currentRequest->route()) {
|
||||||
|
$controller = $route->controller;
|
||||||
|
|
||||||
|
if (! $controller && ! is_string($route->action['uses'])) {
|
||||||
|
$controller = $route->action['uses'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'uri' => $this->currentRequest->getUri(),
|
||||||
|
'method' => $this->currentRequest->getMethod(),
|
||||||
|
'controller' => $controller ? $this->cloner->cloneVar(class_basename($controller)) : $this->cloner->cloneVar(null),
|
||||||
|
'identifier' => spl_object_hash($this->currentRequest),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
14
paragonik-backend/vendor/bin/carbon
vendored
Normal file
14
paragonik-backend/vendor/bin/carbon
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../nesbot/carbon/bin" && pwd)
|
||||||
|
|
||||||
|
if [ -d /proc/cygdrive ]; then
|
||||||
|
case $(which php) in
|
||||||
|
$(readlink -n /proc/cygdrive)/*)
|
||||||
|
# We are in Cygwin using Windows php, so the path must be translated
|
||||||
|
dir=$(cygpath -m "$dir");
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
"${dir}/carbon" "$@"
|
4
paragonik-backend/vendor/bin/carbon.bat
vendored
Normal file
4
paragonik-backend/vendor/bin/carbon.bat
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
setlocal DISABLEDELAYEDEXPANSION
|
||||||
|
SET BIN_TARGET=%~dp0/../nesbot/carbon/bin/carbon
|
||||||
|
php "%BIN_TARGET%" %*
|
14
paragonik-backend/vendor/bin/php-parse
vendored
Normal file
14
paragonik-backend/vendor/bin/php-parse
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../nikic/php-parser/bin" && pwd)
|
||||||
|
|
||||||
|
if [ -d /proc/cygdrive ]; then
|
||||||
|
case $(which php) in
|
||||||
|
$(readlink -n /proc/cygdrive)/*)
|
||||||
|
# We are in Cygwin using Windows php, so the path must be translated
|
||||||
|
dir=$(cygpath -m "$dir");
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
"${dir}/php-parse" "$@"
|
4
paragonik-backend/vendor/bin/php-parse.bat
vendored
Normal file
4
paragonik-backend/vendor/bin/php-parse.bat
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
setlocal DISABLEDELAYEDEXPANSION
|
||||||
|
SET BIN_TARGET=%~dp0/../nikic/php-parser/bin/php-parse
|
||||||
|
php "%BIN_TARGET%" %*
|
14
paragonik-backend/vendor/bin/phpunit
vendored
Normal file
14
paragonik-backend/vendor/bin/phpunit
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../phpunit/phpunit" && pwd)
|
||||||
|
|
||||||
|
if [ -d /proc/cygdrive ]; then
|
||||||
|
case $(which php) in
|
||||||
|
$(readlink -n /proc/cygdrive)/*)
|
||||||
|
# We are in Cygwin using Windows php, so the path must be translated
|
||||||
|
dir=$(cygpath -m "$dir");
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
"${dir}/phpunit" "$@"
|
4
paragonik-backend/vendor/bin/phpunit.bat
vendored
Normal file
4
paragonik-backend/vendor/bin/phpunit.bat
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
setlocal DISABLEDELAYEDEXPANSION
|
||||||
|
SET BIN_TARGET=%~dp0/../phpunit/phpunit/phpunit
|
||||||
|
php "%BIN_TARGET%" %*
|
14
paragonik-backend/vendor/bin/psysh
vendored
Normal file
14
paragonik-backend/vendor/bin/psysh
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../psy/psysh/bin" && pwd)
|
||||||
|
|
||||||
|
if [ -d /proc/cygdrive ]; then
|
||||||
|
case $(which php) in
|
||||||
|
$(readlink -n /proc/cygdrive)/*)
|
||||||
|
# We are in Cygwin using Windows php, so the path must be translated
|
||||||
|
dir=$(cygpath -m "$dir");
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
"${dir}/psysh" "$@"
|
4
paragonik-backend/vendor/bin/psysh.bat
vendored
Normal file
4
paragonik-backend/vendor/bin/psysh.bat
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
setlocal DISABLEDELAYEDEXPANSION
|
||||||
|
SET BIN_TARGET=%~dp0/../psy/psysh/bin/psysh
|
||||||
|
php "%BIN_TARGET%" %*
|
14
paragonik-backend/vendor/bin/var-dump-server
vendored
Normal file
14
paragonik-backend/vendor/bin/var-dump-server
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../symfony/var-dumper/Resources/bin" && pwd)
|
||||||
|
|
||||||
|
if [ -d /proc/cygdrive ]; then
|
||||||
|
case $(which php) in
|
||||||
|
$(readlink -n /proc/cygdrive)/*)
|
||||||
|
# We are in Cygwin using Windows php, so the path must be translated
|
||||||
|
dir=$(cygpath -m "$dir");
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
"${dir}/var-dump-server" "$@"
|
4
paragonik-backend/vendor/bin/var-dump-server.bat
vendored
Normal file
4
paragonik-backend/vendor/bin/var-dump-server.bat
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
setlocal DISABLEDELAYEDEXPANSION
|
||||||
|
SET BIN_TARGET=%~dp0/../symfony/var-dumper/Resources/bin/var-dump-server
|
||||||
|
php "%BIN_TARGET%" %*
|
445
paragonik-backend/vendor/composer/ClassLoader.php
vendored
Normal file
445
paragonik-backend/vendor/composer/ClassLoader.php
vendored
Normal file
@ -0,0 +1,445 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Composer.
|
||||||
|
*
|
||||||
|
* (c) Nils Adermann <naderman@naderman.de>
|
||||||
|
* Jordi Boggiano <j.boggiano@seld.be>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Composer\Autoload;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
||||||
|
*
|
||||||
|
* $loader = new \Composer\Autoload\ClassLoader();
|
||||||
|
*
|
||||||
|
* // register classes with namespaces
|
||||||
|
* $loader->add('Symfony\Component', __DIR__.'/component');
|
||||||
|
* $loader->add('Symfony', __DIR__.'/framework');
|
||||||
|
*
|
||||||
|
* // activate the autoloader
|
||||||
|
* $loader->register();
|
||||||
|
*
|
||||||
|
* // to enable searching the include path (eg. for PEAR packages)
|
||||||
|
* $loader->setUseIncludePath(true);
|
||||||
|
*
|
||||||
|
* In this example, if you try to use a class in the Symfony\Component
|
||||||
|
* namespace or one of its children (Symfony\Component\Console for instance),
|
||||||
|
* the autoloader will first look for the class under the component/
|
||||||
|
* directory, and it will then fallback to the framework/ directory if not
|
||||||
|
* found before giving up.
|
||||||
|
*
|
||||||
|
* This class is loosely based on the Symfony UniversalClassLoader.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||||
|
* @see http://www.php-fig.org/psr/psr-0/
|
||||||
|
* @see http://www.php-fig.org/psr/psr-4/
|
||||||
|
*/
|
||||||
|
class ClassLoader
|
||||||
|
{
|
||||||
|
// PSR-4
|
||||||
|
private $prefixLengthsPsr4 = array();
|
||||||
|
private $prefixDirsPsr4 = array();
|
||||||
|
private $fallbackDirsPsr4 = array();
|
||||||
|
|
||||||
|
// PSR-0
|
||||||
|
private $prefixesPsr0 = array();
|
||||||
|
private $fallbackDirsPsr0 = array();
|
||||||
|
|
||||||
|
private $useIncludePath = false;
|
||||||
|
private $classMap = array();
|
||||||
|
private $classMapAuthoritative = false;
|
||||||
|
private $missingClasses = array();
|
||||||
|
private $apcuPrefix;
|
||||||
|
|
||||||
|
public function getPrefixes()
|
||||||
|
{
|
||||||
|
if (!empty($this->prefixesPsr0)) {
|
||||||
|
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPrefixesPsr4()
|
||||||
|
{
|
||||||
|
return $this->prefixDirsPsr4;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFallbackDirs()
|
||||||
|
{
|
||||||
|
return $this->fallbackDirsPsr0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFallbackDirsPsr4()
|
||||||
|
{
|
||||||
|
return $this->fallbackDirsPsr4;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClassMap()
|
||||||
|
{
|
||||||
|
return $this->classMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $classMap Class to filename map
|
||||||
|
*/
|
||||||
|
public function addClassMap(array $classMap)
|
||||||
|
{
|
||||||
|
if ($this->classMap) {
|
||||||
|
$this->classMap = array_merge($this->classMap, $classMap);
|
||||||
|
} else {
|
||||||
|
$this->classMap = $classMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a set of PSR-0 directories for a given prefix, either
|
||||||
|
* appending or prepending to the ones previously set for this prefix.
|
||||||
|
*
|
||||||
|
* @param string $prefix The prefix
|
||||||
|
* @param array|string $paths The PSR-0 root directories
|
||||||
|
* @param bool $prepend Whether to prepend the directories
|
||||||
|
*/
|
||||||
|
public function add($prefix, $paths, $prepend = false)
|
||||||
|
{
|
||||||
|
if (!$prefix) {
|
||||||
|
if ($prepend) {
|
||||||
|
$this->fallbackDirsPsr0 = array_merge(
|
||||||
|
(array) $paths,
|
||||||
|
$this->fallbackDirsPsr0
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$this->fallbackDirsPsr0 = array_merge(
|
||||||
|
$this->fallbackDirsPsr0,
|
||||||
|
(array) $paths
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$first = $prefix[0];
|
||||||
|
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
||||||
|
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ($prepend) {
|
||||||
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||||
|
(array) $paths,
|
||||||
|
$this->prefixesPsr0[$first][$prefix]
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||||
|
$this->prefixesPsr0[$first][$prefix],
|
||||||
|
(array) $paths
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a set of PSR-4 directories for a given namespace, either
|
||||||
|
* appending or prepending to the ones previously set for this namespace.
|
||||||
|
*
|
||||||
|
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||||
|
* @param array|string $paths The PSR-4 base directories
|
||||||
|
* @param bool $prepend Whether to prepend the directories
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function addPsr4($prefix, $paths, $prepend = false)
|
||||||
|
{
|
||||||
|
if (!$prefix) {
|
||||||
|
// Register directories for the root namespace.
|
||||||
|
if ($prepend) {
|
||||||
|
$this->fallbackDirsPsr4 = array_merge(
|
||||||
|
(array) $paths,
|
||||||
|
$this->fallbackDirsPsr4
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$this->fallbackDirsPsr4 = array_merge(
|
||||||
|
$this->fallbackDirsPsr4,
|
||||||
|
(array) $paths
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
||||||
|
// Register directories for a new namespace.
|
||||||
|
$length = strlen($prefix);
|
||||||
|
if ('\\' !== $prefix[$length - 1]) {
|
||||||
|
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||||
|
}
|
||||||
|
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||||
|
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||||
|
} elseif ($prepend) {
|
||||||
|
// Prepend directories for an already registered namespace.
|
||||||
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||||
|
(array) $paths,
|
||||||
|
$this->prefixDirsPsr4[$prefix]
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// Append directories for an already registered namespace.
|
||||||
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||||
|
$this->prefixDirsPsr4[$prefix],
|
||||||
|
(array) $paths
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a set of PSR-0 directories for a given prefix,
|
||||||
|
* replacing any others previously set for this prefix.
|
||||||
|
*
|
||||||
|
* @param string $prefix The prefix
|
||||||
|
* @param array|string $paths The PSR-0 base directories
|
||||||
|
*/
|
||||||
|
public function set($prefix, $paths)
|
||||||
|
{
|
||||||
|
if (!$prefix) {
|
||||||
|
$this->fallbackDirsPsr0 = (array) $paths;
|
||||||
|
} else {
|
||||||
|
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a set of PSR-4 directories for a given namespace,
|
||||||
|
* replacing any others previously set for this namespace.
|
||||||
|
*
|
||||||
|
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||||
|
* @param array|string $paths The PSR-4 base directories
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function setPsr4($prefix, $paths)
|
||||||
|
{
|
||||||
|
if (!$prefix) {
|
||||||
|
$this->fallbackDirsPsr4 = (array) $paths;
|
||||||
|
} else {
|
||||||
|
$length = strlen($prefix);
|
||||||
|
if ('\\' !== $prefix[$length - 1]) {
|
||||||
|
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||||
|
}
|
||||||
|
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||||
|
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turns on searching the include path for class files.
|
||||||
|
*
|
||||||
|
* @param bool $useIncludePath
|
||||||
|
*/
|
||||||
|
public function setUseIncludePath($useIncludePath)
|
||||||
|
{
|
||||||
|
$this->useIncludePath = $useIncludePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be used to check if the autoloader uses the include path to check
|
||||||
|
* for classes.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function getUseIncludePath()
|
||||||
|
{
|
||||||
|
return $this->useIncludePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turns off searching the prefix and fallback directories for classes
|
||||||
|
* that have not been registered with the class map.
|
||||||
|
*
|
||||||
|
* @param bool $classMapAuthoritative
|
||||||
|
*/
|
||||||
|
public function setClassMapAuthoritative($classMapAuthoritative)
|
||||||
|
{
|
||||||
|
$this->classMapAuthoritative = $classMapAuthoritative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should class lookup fail if not found in the current class map?
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isClassMapAuthoritative()
|
||||||
|
{
|
||||||
|
return $this->classMapAuthoritative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
||||||
|
*
|
||||||
|
* @param string|null $apcuPrefix
|
||||||
|
*/
|
||||||
|
public function setApcuPrefix($apcuPrefix)
|
||||||
|
{
|
||||||
|
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The APCu prefix in use, or null if APCu caching is not enabled.
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getApcuPrefix()
|
||||||
|
{
|
||||||
|
return $this->apcuPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers this instance as an autoloader.
|
||||||
|
*
|
||||||
|
* @param bool $prepend Whether to prepend the autoloader or not
|
||||||
|
*/
|
||||||
|
public function register($prepend = false)
|
||||||
|
{
|
||||||
|
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregisters this instance as an autoloader.
|
||||||
|
*/
|
||||||
|
public function unregister()
|
||||||
|
{
|
||||||
|
spl_autoload_unregister(array($this, 'loadClass'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the given class or interface.
|
||||||
|
*
|
||||||
|
* @param string $class The name of the class
|
||||||
|
* @return bool|null True if loaded, null otherwise
|
||||||
|
*/
|
||||||
|
public function loadClass($class)
|
||||||
|
{
|
||||||
|
if ($file = $this->findFile($class)) {
|
||||||
|
includeFile($file);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the path to the file where the class is defined.
|
||||||
|
*
|
||||||
|
* @param string $class The name of the class
|
||||||
|
*
|
||||||
|
* @return string|false The path if found, false otherwise
|
||||||
|
*/
|
||||||
|
public function findFile($class)
|
||||||
|
{
|
||||||
|
// class map lookup
|
||||||
|
if (isset($this->classMap[$class])) {
|
||||||
|
return $this->classMap[$class];
|
||||||
|
}
|
||||||
|
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (null !== $this->apcuPrefix) {
|
||||||
|
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
||||||
|
if ($hit) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$file = $this->findFileWithExtension($class, '.php');
|
||||||
|
|
||||||
|
// Search for Hack files if we are running on HHVM
|
||||||
|
if (false === $file && defined('HHVM_VERSION')) {
|
||||||
|
$file = $this->findFileWithExtension($class, '.hh');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null !== $this->apcuPrefix) {
|
||||||
|
apcu_add($this->apcuPrefix.$class, $file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (false === $file) {
|
||||||
|
// Remember that this class does not exist.
|
||||||
|
$this->missingClasses[$class] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function findFileWithExtension($class, $ext)
|
||||||
|
{
|
||||||
|
// PSR-4 lookup
|
||||||
|
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
||||||
|
|
||||||
|
$first = $class[0];
|
||||||
|
if (isset($this->prefixLengthsPsr4[$first])) {
|
||||||
|
$subPath = $class;
|
||||||
|
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
||||||
|
$subPath = substr($subPath, 0, $lastPos);
|
||||||
|
$search = $subPath . '\\';
|
||||||
|
if (isset($this->prefixDirsPsr4[$search])) {
|
||||||
|
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
||||||
|
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
||||||
|
if (file_exists($file = $dir . $pathEnd)) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PSR-4 fallback dirs
|
||||||
|
foreach ($this->fallbackDirsPsr4 as $dir) {
|
||||||
|
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PSR-0 lookup
|
||||||
|
if (false !== $pos = strrpos($class, '\\')) {
|
||||||
|
// namespaced class name
|
||||||
|
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
||||||
|
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
||||||
|
} else {
|
||||||
|
// PEAR-like class name
|
||||||
|
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($this->prefixesPsr0[$first])) {
|
||||||
|
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
||||||
|
if (0 === strpos($class, $prefix)) {
|
||||||
|
foreach ($dirs as $dir) {
|
||||||
|
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PSR-0 fallback dirs
|
||||||
|
foreach ($this->fallbackDirsPsr0 as $dir) {
|
||||||
|
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PSR-0 include paths.
|
||||||
|
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope isolated include.
|
||||||
|
*
|
||||||
|
* Prevents access to $this/self from included files.
|
||||||
|
*/
|
||||||
|
function includeFile($file)
|
||||||
|
{
|
||||||
|
include $file;
|
||||||
|
}
|
21
paragonik-backend/vendor/composer/LICENSE
vendored
Normal file
21
paragonik-backend/vendor/composer/LICENSE
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
Copyright (c) Nils Adermann, Jordi Boggiano
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is furnished
|
||||||
|
to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
3702
paragonik-backend/vendor/composer/autoload_classmap.php
vendored
Normal file
3702
paragonik-backend/vendor/composer/autoload_classmap.php
vendored
Normal file
File diff suppressed because it is too large
Load Diff
24
paragonik-backend/vendor/composer/autoload_files.php
vendored
Normal file
24
paragonik-backend/vendor/composer/autoload_files.php
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_files.php @generated by Composer
|
||||||
|
|
||||||
|
$vendorDir = dirname(dirname(__FILE__));
|
||||||
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||||
|
'25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php',
|
||||||
|
'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php',
|
||||||
|
'0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
|
||||||
|
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
||||||
|
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||||
|
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php',
|
||||||
|
'2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php',
|
||||||
|
'538ca81a9a966a6716601ecf48f4eaef' => $vendorDir . '/opis/closure/functions.php',
|
||||||
|
'e39a8b23c42d4e1452234d762b03835a' => $vendorDir . '/ramsey/uuid/src/functions.php',
|
||||||
|
'f0906e6318348a765ffb6eb24e0d0938' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/helpers.php',
|
||||||
|
'58571171fd5812e6e447dce228f52f4d' => $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php',
|
||||||
|
'6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
|
||||||
|
'801c31d8ed748cfa537fa45402288c95' => $vendorDir . '/psy/psysh/src/functions.php',
|
||||||
|
'0d8253363903f0ac7b0978dcde4e28a0' => $vendorDir . '/beyondcode/laravel-dump-server/helpers.php',
|
||||||
|
);
|
11
paragonik-backend/vendor/composer/autoload_namespaces.php
vendored
Normal file
11
paragonik-backend/vendor/composer/autoload_namespaces.php
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_namespaces.php @generated by Composer
|
||||||
|
|
||||||
|
$vendorDir = dirname(dirname(__FILE__));
|
||||||
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'Parsedown' => array($vendorDir . '/erusev/parsedown'),
|
||||||
|
'Mockery' => array($vendorDir . '/mockery/mockery/library'),
|
||||||
|
);
|
65
paragonik-backend/vendor/composer/autoload_psr4.php
vendored
Normal file
65
paragonik-backend/vendor/composer/autoload_psr4.php
vendored
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_psr4.php @generated by Composer
|
||||||
|
|
||||||
|
$vendorDir = dirname(dirname(__FILE__));
|
||||||
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'),
|
||||||
|
'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'),
|
||||||
|
'Whoops\\' => array($vendorDir . '/filp/whoops/src/Whoops'),
|
||||||
|
'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'),
|
||||||
|
'TijsVerkoyen\\CssToInlineStyles\\' => array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'),
|
||||||
|
'Tests\\' => array($baseDir . '/tests'),
|
||||||
|
'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'),
|
||||||
|
'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'),
|
||||||
|
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
|
||||||
|
'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'),
|
||||||
|
'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'),
|
||||||
|
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
|
||||||
|
'Symfony\\Contracts\\Translation\\' => array($vendorDir . '/symfony/translation-contracts'),
|
||||||
|
'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'),
|
||||||
|
'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'),
|
||||||
|
'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'),
|
||||||
|
'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
|
||||||
|
'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'),
|
||||||
|
'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
|
||||||
|
'Symfony\\Component\\Mime\\' => array($vendorDir . '/symfony/mime'),
|
||||||
|
'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'),
|
||||||
|
'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
|
||||||
|
'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'),
|
||||||
|
'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
|
||||||
|
'Symfony\\Component\\ErrorHandler\\' => array($vendorDir . '/symfony/error-handler'),
|
||||||
|
'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'),
|
||||||
|
'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
|
||||||
|
'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'),
|
||||||
|
'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'),
|
||||||
|
'Psy\\' => array($vendorDir . '/psy/psysh/src'),
|
||||||
|
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
|
||||||
|
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
||||||
|
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
||||||
|
'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src/Prophecy'),
|
||||||
|
'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'),
|
||||||
|
'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption'),
|
||||||
|
'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'),
|
||||||
|
'NunoMaduro\\Collision\\' => array($vendorDir . '/nunomaduro/collision/src'),
|
||||||
|
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
|
||||||
|
'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'),
|
||||||
|
'Laravel\\Tinker\\' => array($vendorDir . '/laravel/tinker/src'),
|
||||||
|
'JakubOnderka\\PhpConsoleHighlighter\\' => array($vendorDir . '/jakub-onderka/php-console-highlighter/src'),
|
||||||
|
'JakubOnderka\\PhpConsoleColor\\' => array($vendorDir . '/jakub-onderka/php-console-color/src'),
|
||||||
|
'Illuminate\\' => array($vendorDir . '/laravel/framework/src/Illuminate'),
|
||||||
|
'Fideloper\\Proxy\\' => array($vendorDir . '/fideloper/proxy/src'),
|
||||||
|
'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'),
|
||||||
|
'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'),
|
||||||
|
'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'),
|
||||||
|
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'),
|
||||||
|
'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'),
|
||||||
|
'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'),
|
||||||
|
'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
|
||||||
|
'Cron\\' => array($vendorDir . '/dragonmantank/cron-expression/src/Cron'),
|
||||||
|
'Carbon\\' => array($vendorDir . '/nesbot/carbon/src/Carbon'),
|
||||||
|
'BeyondCode\\DumpServer\\' => array($vendorDir . '/beyondcode/laravel-dump-server/src'),
|
||||||
|
'App\\' => array($baseDir . '/app'),
|
||||||
|
);
|
70
paragonik-backend/vendor/composer/autoload_real.php
vendored
Normal file
70
paragonik-backend/vendor/composer/autoload_real.php
vendored
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_real.php @generated by Composer
|
||||||
|
|
||||||
|
class ComposerAutoloaderInit76924bd72d9b9f2ec5cdd3db4408b7ff
|
||||||
|
{
|
||||||
|
private static $loader;
|
||||||
|
|
||||||
|
public static function loadClassLoader($class)
|
||||||
|
{
|
||||||
|
if ('Composer\Autoload\ClassLoader' === $class) {
|
||||||
|
require __DIR__ . '/ClassLoader.php';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getLoader()
|
||||||
|
{
|
||||||
|
if (null !== self::$loader) {
|
||||||
|
return self::$loader;
|
||||||
|
}
|
||||||
|
|
||||||
|
spl_autoload_register(array('ComposerAutoloaderInit76924bd72d9b9f2ec5cdd3db4408b7ff', 'loadClassLoader'), true, true);
|
||||||
|
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||||
|
spl_autoload_unregister(array('ComposerAutoloaderInit76924bd72d9b9f2ec5cdd3db4408b7ff', 'loadClassLoader'));
|
||||||
|
|
||||||
|
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
||||||
|
if ($useStaticLoader) {
|
||||||
|
require_once __DIR__ . '/autoload_static.php';
|
||||||
|
|
||||||
|
call_user_func(\Composer\Autoload\ComposerStaticInit76924bd72d9b9f2ec5cdd3db4408b7ff::getInitializer($loader));
|
||||||
|
} else {
|
||||||
|
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||||
|
foreach ($map as $namespace => $path) {
|
||||||
|
$loader->set($namespace, $path);
|
||||||
|
}
|
||||||
|
|
||||||
|
$map = require __DIR__ . '/autoload_psr4.php';
|
||||||
|
foreach ($map as $namespace => $path) {
|
||||||
|
$loader->setPsr4($namespace, $path);
|
||||||
|
}
|
||||||
|
|
||||||
|
$classMap = require __DIR__ . '/autoload_classmap.php';
|
||||||
|
if ($classMap) {
|
||||||
|
$loader->addClassMap($classMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$loader->register(true);
|
||||||
|
|
||||||
|
if ($useStaticLoader) {
|
||||||
|
$includeFiles = Composer\Autoload\ComposerStaticInit76924bd72d9b9f2ec5cdd3db4408b7ff::$files;
|
||||||
|
} else {
|
||||||
|
$includeFiles = require __DIR__ . '/autoload_files.php';
|
||||||
|
}
|
||||||
|
foreach ($includeFiles as $fileIdentifier => $file) {
|
||||||
|
composerRequire76924bd72d9b9f2ec5cdd3db4408b7ff($fileIdentifier, $file);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $loader;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function composerRequire76924bd72d9b9f2ec5cdd3db4408b7ff($fileIdentifier, $file)
|
||||||
|
{
|
||||||
|
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||||
|
require $file;
|
||||||
|
|
||||||
|
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||||
|
}
|
||||||
|
}
|
4095
paragonik-backend/vendor/composer/autoload_static.php
vendored
Normal file
4095
paragonik-backend/vendor/composer/autoload_static.php
vendored
Normal file
File diff suppressed because it is too large
Load Diff
4879
paragonik-backend/vendor/composer/installed.json
vendored
Normal file
4879
paragonik-backend/vendor/composer/installed.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/.gitignore
vendored
Normal file
1
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/vendor/
|
19
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/LICENSE
vendored
Normal file
19
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2014 Daniel Nögel
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
38
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/README.md
vendored
Normal file
38
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/README.md
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# XDG Base Directory
|
||||||
|
|
||||||
|
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md)
|
||||||
|
|
||||||
|
Implementation of XDG Base Directory specification for php
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Via Composer
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ composer require dnoegel/php-xdg-base-dir
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
``` php
|
||||||
|
$xdg = \XdgBaseDir\Xdg();
|
||||||
|
|
||||||
|
echo $xdg->getHomeDir();
|
||||||
|
echo $xdg->getHomeConfigDir()
|
||||||
|
echo $xdg->getHomeDataDir()
|
||||||
|
echo $xdg->getHomeCacheDir()
|
||||||
|
echo $xdg->getRuntimeDir()
|
||||||
|
|
||||||
|
$xdg->getDataDirs() // returns array
|
||||||
|
$xdg->getConfigDirs() // returns array
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ phpunit
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
The MIT License (MIT). Please see [License File](https://github.com/dnoegel/php-xdg-base-dir/blob/master/LICENSE) for more information.
|
17
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/composer.json
vendored
Normal file
17
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/composer.json
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"name": "dnoegel/php-xdg-base-dir",
|
||||||
|
"description": "implementation of xdg base directory specification for php",
|
||||||
|
"type": "project",
|
||||||
|
"license": "MIT",
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.2"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "@stable"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"XdgBaseDir\\": "src/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
24
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist
vendored
Normal file
24
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<phpunit colors="true"
|
||||||
|
convertErrorsToExceptions="true"
|
||||||
|
convertNoticesToExceptions="true"
|
||||||
|
convertWarningsToExceptions="true"
|
||||||
|
processIsolation="false"
|
||||||
|
stopOnFailure="false"
|
||||||
|
syntaxCheck="false"
|
||||||
|
bootstrap="vendor/autoload.php"
|
||||||
|
>
|
||||||
|
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="php-xdg-base-dir unit tests">
|
||||||
|
<directory>./tests/</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
|
||||||
|
<filter>
|
||||||
|
<whitelist>
|
||||||
|
<directory>./src/</directory>
|
||||||
|
</whitelist>
|
||||||
|
</filter>
|
||||||
|
</phpunit>
|
121
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
vendored
Normal file
121
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
vendored
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace XdgBaseDir;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple implementation of the XDG standard http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||||
|
*
|
||||||
|
* Based on the python implementation https://github.com/takluyver/pyxdg/blob/master/xdg/BaseDirectory.py
|
||||||
|
*
|
||||||
|
* Class Xdg
|
||||||
|
* @package ShopwareCli\Application
|
||||||
|
*/
|
||||||
|
class Xdg
|
||||||
|
{
|
||||||
|
const S_IFDIR = 040000; // directory
|
||||||
|
const S_IRWXO = 00007; // rwx other
|
||||||
|
const S_IRWXG = 00056; // rwx group
|
||||||
|
const RUNTIME_DIR_FALLBACK = 'php-xdg-runtime-dir-fallback-';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getHomeDir()
|
||||||
|
{
|
||||||
|
return getenv('HOME') ?: (getenv('HOMEDRIVE') . DIRECTORY_SEPARATOR . getenv('HOMEPATH'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getHomeConfigDir()
|
||||||
|
{
|
||||||
|
$path = getenv('XDG_CONFIG_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.config';
|
||||||
|
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getHomeDataDir()
|
||||||
|
{
|
||||||
|
$path = getenv('XDG_DATA_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.local' . DIRECTORY_SEPARATOR . 'share';
|
||||||
|
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getConfigDirs()
|
||||||
|
{
|
||||||
|
$configDirs = getenv('XDG_CONFIG_DIRS') ? explode(':', getenv('XDG_CONFIG_DIRS')) : array('/etc/xdg');
|
||||||
|
|
||||||
|
$paths = array_merge(array($this->getHomeConfigDir()), $configDirs);
|
||||||
|
|
||||||
|
return $paths;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getDataDirs()
|
||||||
|
{
|
||||||
|
$dataDirs = getenv('XDG_DATA_DIRS') ? explode(':', getenv('XDG_DATA_DIRS')) : array('/usr/local/share', '/usr/share');
|
||||||
|
|
||||||
|
$paths = array_merge(array($this->getHomeDataDir()), $dataDirs);
|
||||||
|
|
||||||
|
return $paths;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getHomeCacheDir()
|
||||||
|
{
|
||||||
|
$path = getenv('XDG_CACHE_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.cache';
|
||||||
|
|
||||||
|
return $path;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRuntimeDir($strict=true)
|
||||||
|
{
|
||||||
|
if ($runtimeDir = getenv('XDG_RUNTIME_DIR')) {
|
||||||
|
return $runtimeDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($strict) {
|
||||||
|
throw new \RuntimeException('XDG_RUNTIME_DIR was not set');
|
||||||
|
}
|
||||||
|
|
||||||
|
$fallback = sys_get_temp_dir() . DIRECTORY_SEPARATOR . self::RUNTIME_DIR_FALLBACK . getenv('USER');
|
||||||
|
|
||||||
|
$create = false;
|
||||||
|
|
||||||
|
if (!is_dir($fallback)) {
|
||||||
|
mkdir($fallback, 0700, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$st = lstat($fallback);
|
||||||
|
|
||||||
|
# The fallback must be a directory
|
||||||
|
if (!$st['mode'] & self::S_IFDIR) {
|
||||||
|
rmdir($fallback);
|
||||||
|
$create = true;
|
||||||
|
} elseif ($st['uid'] != getmyuid() ||
|
||||||
|
$st['mode'] & (self::S_IRWXG | self::S_IRWXO)
|
||||||
|
) {
|
||||||
|
rmdir($fallback);
|
||||||
|
$create = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($create) {
|
||||||
|
mkdir($fallback, 0700, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $fallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
116
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php
vendored
Normal file
116
paragonik-backend/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php
vendored
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class XdgTest extends PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return \XdgBaseDir\Xdg
|
||||||
|
*/
|
||||||
|
public function getXdg()
|
||||||
|
{
|
||||||
|
return new \XdgBaseDir\Xdg();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetHomeDir()
|
||||||
|
{
|
||||||
|
putenv('HOME=/fake-dir');
|
||||||
|
$this->assertEquals('/fake-dir', $this->getXdg()->getHomeDir());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetFallbackHomeDir()
|
||||||
|
{
|
||||||
|
putenv('HOME=');
|
||||||
|
putenv('HOMEDRIVE=C:');
|
||||||
|
putenv('HOMEPATH=fake-dir');
|
||||||
|
$this->assertEquals('C:/fake-dir', $this->getXdg()->getHomeDir());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testXdgPutCache()
|
||||||
|
{
|
||||||
|
putenv('XDG_DATA_HOME=tmp/');
|
||||||
|
putenv('XDG_CONFIG_HOME=tmp/');
|
||||||
|
putenv('XDG_CACHE_HOME=tmp/');
|
||||||
|
$this->assertEquals('tmp/', $this->getXdg()->getHomeCacheDir());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testXdgPutData()
|
||||||
|
{
|
||||||
|
putenv('XDG_DATA_HOME=tmp/');
|
||||||
|
$this->assertEquals('tmp/', $this->getXdg()->getHomeDataDir());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testXdgPutConfig()
|
||||||
|
{
|
||||||
|
putenv('XDG_CONFIG_HOME=tmp/');
|
||||||
|
$this->assertEquals('tmp/', $this->getXdg()->getHomeConfigDir());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testXdgDataDirsShouldIncludeHomeDataDir()
|
||||||
|
{
|
||||||
|
putenv('XDG_DATA_HOME=tmp/');
|
||||||
|
putenv('XDG_CONFIG_HOME=tmp/');
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getDataDirs()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testXdgConfigDirsShouldIncludeHomeConfigDir()
|
||||||
|
{
|
||||||
|
putenv('XDG_CONFIG_HOME=tmp/');
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getConfigDirs()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If XDG_RUNTIME_DIR is set, it should be returned
|
||||||
|
*/
|
||||||
|
public function testGetRuntimeDir()
|
||||||
|
{
|
||||||
|
putenv('XDG_RUNTIME_DIR=/tmp/');
|
||||||
|
$runtimeDir = $this->getXdg()->getRuntimeDir();
|
||||||
|
|
||||||
|
$this->assertEquals(is_dir($runtimeDir), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In strict mode, an exception should be shown if XDG_RUNTIME_DIR does not exist
|
||||||
|
*
|
||||||
|
* @expectedException \RuntimeException
|
||||||
|
*/
|
||||||
|
public function testGetRuntimeDirShouldThrowException()
|
||||||
|
{
|
||||||
|
putenv('XDG_RUNTIME_DIR=');
|
||||||
|
$this->getXdg()->getRuntimeDir(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In fallback mode a directory should be created
|
||||||
|
*/
|
||||||
|
public function testGetRuntimeDirShouldCreateDirectory()
|
||||||
|
{
|
||||||
|
putenv('XDG_RUNTIME_DIR=');
|
||||||
|
$dir = $this->getXdg()->getRuntimeDir(false);
|
||||||
|
$permission = decoct(fileperms($dir) & 0777);
|
||||||
|
$this->assertEquals(700, $permission);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensure, that the fallback directories are created with correct permission
|
||||||
|
*/
|
||||||
|
public function testGetRuntimeShouldDeleteDirsWithWrongPermission()
|
||||||
|
{
|
||||||
|
$runtimeDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . XdgBaseDir\Xdg::RUNTIME_DIR_FALLBACK . getenv('USER');
|
||||||
|
|
||||||
|
rmdir($runtimeDir);
|
||||||
|
mkdir($runtimeDir, 0764, true);
|
||||||
|
|
||||||
|
// Permission should be wrong now
|
||||||
|
$permission = decoct(fileperms($runtimeDir) & 0777);
|
||||||
|
$this->assertEquals(764, $permission);
|
||||||
|
|
||||||
|
putenv('XDG_RUNTIME_DIR=');
|
||||||
|
$dir = $this->getXdg()->getRuntimeDir(false);
|
||||||
|
|
||||||
|
// Permission should be fixed
|
||||||
|
$permission = decoct(fileperms($dir) & 0777);
|
||||||
|
$this->assertEquals(700, $permission);
|
||||||
|
}
|
||||||
|
}
|
19
paragonik-backend/vendor/doctrine/inflector/LICENSE
vendored
Normal file
19
paragonik-backend/vendor/doctrine/inflector/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2006-2015 Doctrine Project
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
6
paragonik-backend/vendor/doctrine/inflector/README.md
vendored
Normal file
6
paragonik-backend/vendor/doctrine/inflector/README.md
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Doctrine Inflector
|
||||||
|
|
||||||
|
Doctrine Inflector is a small library that can perform string manipulations
|
||||||
|
with regard to upper-/lowercase and singular/plural forms of words.
|
||||||
|
|
||||||
|
[![Build Status](https://travis-ci.org/doctrine/inflector.svg?branch=master)](https://travis-ci.org/doctrine/inflector)
|
32
paragonik-backend/vendor/doctrine/inflector/composer.json
vendored
Normal file
32
paragonik-backend/vendor/doctrine/inflector/composer.json
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "doctrine/inflector",
|
||||||
|
"type": "library",
|
||||||
|
"description": "Common String Manipulations with regard to casing and singular/plural rules.",
|
||||||
|
"keywords": ["string", "inflection", "singularize", "pluralize"],
|
||||||
|
"homepage": "http://www.doctrine-project.org",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"},
|
||||||
|
{"name": "Roman Borschel", "email": "roman@code-factory.org"},
|
||||||
|
{"name": "Benjamin Eberlei", "email": "kontakt@beberlei.de"},
|
||||||
|
{"name": "Jonathan Wage", "email": "jonwage@gmail.com"},
|
||||||
|
{"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^6.2"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": { "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" }
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": { "Doctrine\\Tests\\Common\\Inflector\\": "tests/Doctrine/Tests/Common/Inflector" }
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.3.x-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
125
paragonik-backend/vendor/doctrine/inflector/docs/en/index.rst
vendored
Normal file
125
paragonik-backend/vendor/doctrine/inflector/docs/en/index.rst
vendored
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
The Doctrine Inflector has static methods for inflecting text.
|
||||||
|
The features include pluralization, singularization,
|
||||||
|
converting between camelCase and under_score and capitalizing
|
||||||
|
words.
|
||||||
|
|
||||||
|
All you need to use the Inflector is the ``Doctrine\Common\Inflector\Inflector``
|
||||||
|
class.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
You can install the Inflector with composer:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
$ composer require doctrine/inflector
|
||||||
|
|
||||||
|
Here are the available methods that you can use:
|
||||||
|
|
||||||
|
Tableize
|
||||||
|
========
|
||||||
|
|
||||||
|
Converts ``ModelName`` to ``model_name``:
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
echo Inflector::tableize('ModelName'); // model_name
|
||||||
|
|
||||||
|
Classify
|
||||||
|
========
|
||||||
|
|
||||||
|
Converts ``model_name`` to ``ModelName``:
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
echo Inflector::classify('model_name'); // ModelName
|
||||||
|
|
||||||
|
Camelize
|
||||||
|
========
|
||||||
|
|
||||||
|
This method uses `Classify`_ and then converts the first character to lowercase:
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
echo Inflector::camelize('model_name'); // modelName
|
||||||
|
|
||||||
|
ucwords
|
||||||
|
=======
|
||||||
|
|
||||||
|
Takes a string and capitalizes all of the words, like PHP's built-in
|
||||||
|
ucwords function. This extends that behavior, however, by allowing the
|
||||||
|
word delimiters to be configured, rather than only separating on
|
||||||
|
whitespace.
|
||||||
|
|
||||||
|
Here is an example:
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
$string = 'top-o-the-morning to all_of_you!';
|
||||||
|
|
||||||
|
echo Inflector::ucwords($string); // Top-O-The-Morning To All_of_you!
|
||||||
|
|
||||||
|
echo Inflector::ucwords($string, '-_ '); // Top-O-The-Morning To All_Of_You!
|
||||||
|
|
||||||
|
Pluralize
|
||||||
|
=========
|
||||||
|
|
||||||
|
Returns a word in plural form.
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
echo Inflector::pluralize('browser'); // browsers
|
||||||
|
|
||||||
|
Singularize
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
echo Inflector::singularize('browsers'); // browser
|
||||||
|
|
||||||
|
Rules
|
||||||
|
=====
|
||||||
|
|
||||||
|
Customize the rules for pluralization and singularization:
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']);
|
||||||
|
Inflector::rules('plural', [
|
||||||
|
'rules' => ['/^(inflect)ors$/i' => '\1ables'],
|
||||||
|
'uninflected' => ['dontinflectme'],
|
||||||
|
'irregular' => ['red' => 'redlings']
|
||||||
|
]);
|
||||||
|
|
||||||
|
The arguments for the ``rules`` method are:
|
||||||
|
|
||||||
|
- ``$type`` - The type of inflection, either ``plural`` or ``singular``
|
||||||
|
- ``$rules`` - An array of rules to be added.
|
||||||
|
- ``$reset`` - If true, will unset default inflections for all new rules that are being defined in $rules.
|
||||||
|
|
||||||
|
Reset
|
||||||
|
=====
|
||||||
|
|
||||||
|
Clears Inflectors inflected value caches, and resets the inflection
|
||||||
|
rules to the initial values.
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
Inflector::reset();
|
||||||
|
|
||||||
|
Slugify
|
||||||
|
=======
|
||||||
|
|
||||||
|
You can easily use the Inflector to create a slug from a string of text
|
||||||
|
by using the `tableize`_ method and replacing underscores with hyphens:
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
public static function slugify(string $text) : string
|
||||||
|
{
|
||||||
|
return str_replace('_', '-', Inflector::tableize($text));
|
||||||
|
}
|
492
paragonik-backend/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php
vendored
Normal file
492
paragonik-backend/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php
vendored
Normal file
@ -0,0 +1,492 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many individuals
|
||||||
|
* and is licensed under the MIT license. For more information, see
|
||||||
|
* <http://www.doctrine-project.org>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Doctrine\Common\Inflector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Doctrine inflector has static methods for inflecting text.
|
||||||
|
*
|
||||||
|
* The methods in these classes are from several different sources collected
|
||||||
|
* across several different php projects and several different authors. The
|
||||||
|
* original author names and emails are not known.
|
||||||
|
*
|
||||||
|
* Pluralize & Singularize implementation are borrowed from CakePHP with some modifications.
|
||||||
|
*
|
||||||
|
* @link www.doctrine-project.org
|
||||||
|
* @since 1.0
|
||||||
|
* @author Konsta Vesterinen <kvesteri@cc.hut.fi>
|
||||||
|
* @author Jonathan H. Wage <jonwage@gmail.com>
|
||||||
|
*/
|
||||||
|
class Inflector
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Plural inflector rules.
|
||||||
|
*
|
||||||
|
* @var string[][]
|
||||||
|
*/
|
||||||
|
private static $plural = array(
|
||||||
|
'rules' => array(
|
||||||
|
'/(s)tatus$/i' => '\1\2tatuses',
|
||||||
|
'/(quiz)$/i' => '\1zes',
|
||||||
|
'/^(ox)$/i' => '\1\2en',
|
||||||
|
'/([m|l])ouse$/i' => '\1ice',
|
||||||
|
'/(matr|vert|ind)(ix|ex)$/i' => '\1ices',
|
||||||
|
'/(x|ch|ss|sh)$/i' => '\1es',
|
||||||
|
'/([^aeiouy]|qu)y$/i' => '\1ies',
|
||||||
|
'/(hive|gulf)$/i' => '\1s',
|
||||||
|
'/(?:([^f])fe|([lr])f)$/i' => '\1\2ves',
|
||||||
|
'/sis$/i' => 'ses',
|
||||||
|
'/([ti])um$/i' => '\1a',
|
||||||
|
'/(c)riterion$/i' => '\1riteria',
|
||||||
|
'/(p)erson$/i' => '\1eople',
|
||||||
|
'/(m)an$/i' => '\1en',
|
||||||
|
'/(c)hild$/i' => '\1hildren',
|
||||||
|
'/(f)oot$/i' => '\1eet',
|
||||||
|
'/(buffal|her|potat|tomat|volcan)o$/i' => '\1\2oes',
|
||||||
|
'/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|vir)us$/i' => '\1i',
|
||||||
|
'/us$/i' => 'uses',
|
||||||
|
'/(alias)$/i' => '\1es',
|
||||||
|
'/(analys|ax|cris|test|thes)is$/i' => '\1es',
|
||||||
|
'/s$/' => 's',
|
||||||
|
'/^$/' => '',
|
||||||
|
'/$/' => 's',
|
||||||
|
),
|
||||||
|
'uninflected' => array(
|
||||||
|
'.*[nrlm]ese',
|
||||||
|
'.*deer',
|
||||||
|
'.*fish',
|
||||||
|
'.*measles',
|
||||||
|
'.*ois',
|
||||||
|
'.*pox',
|
||||||
|
'.*sheep',
|
||||||
|
'people',
|
||||||
|
'cookie',
|
||||||
|
'police',
|
||||||
|
),
|
||||||
|
'irregular' => array(
|
||||||
|
'atlas' => 'atlases',
|
||||||
|
'axe' => 'axes',
|
||||||
|
'beef' => 'beefs',
|
||||||
|
'brother' => 'brothers',
|
||||||
|
'cafe' => 'cafes',
|
||||||
|
'canvas' => 'canvases',
|
||||||
|
'chateau' => 'chateaux',
|
||||||
|
'niveau' => 'niveaux',
|
||||||
|
'child' => 'children',
|
||||||
|
'cookie' => 'cookies',
|
||||||
|
'corpus' => 'corpuses',
|
||||||
|
'cow' => 'cows',
|
||||||
|
'criterion' => 'criteria',
|
||||||
|
'curriculum' => 'curricula',
|
||||||
|
'demo' => 'demos',
|
||||||
|
'domino' => 'dominoes',
|
||||||
|
'echo' => 'echoes',
|
||||||
|
'foot' => 'feet',
|
||||||
|
'fungus' => 'fungi',
|
||||||
|
'ganglion' => 'ganglions',
|
||||||
|
'gas' => 'gases',
|
||||||
|
'genie' => 'genies',
|
||||||
|
'genus' => 'genera',
|
||||||
|
'goose' => 'geese',
|
||||||
|
'graffito' => 'graffiti',
|
||||||
|
'hippopotamus' => 'hippopotami',
|
||||||
|
'hoof' => 'hoofs',
|
||||||
|
'human' => 'humans',
|
||||||
|
'iris' => 'irises',
|
||||||
|
'larva' => 'larvae',
|
||||||
|
'leaf' => 'leaves',
|
||||||
|
'loaf' => 'loaves',
|
||||||
|
'man' => 'men',
|
||||||
|
'medium' => 'media',
|
||||||
|
'memorandum' => 'memoranda',
|
||||||
|
'money' => 'monies',
|
||||||
|
'mongoose' => 'mongooses',
|
||||||
|
'motto' => 'mottoes',
|
||||||
|
'move' => 'moves',
|
||||||
|
'mythos' => 'mythoi',
|
||||||
|
'niche' => 'niches',
|
||||||
|
'nucleus' => 'nuclei',
|
||||||
|
'numen' => 'numina',
|
||||||
|
'occiput' => 'occiputs',
|
||||||
|
'octopus' => 'octopuses',
|
||||||
|
'opus' => 'opuses',
|
||||||
|
'ox' => 'oxen',
|
||||||
|
'passerby' => 'passersby',
|
||||||
|
'penis' => 'penises',
|
||||||
|
'person' => 'people',
|
||||||
|
'plateau' => 'plateaux',
|
||||||
|
'runner-up' => 'runners-up',
|
||||||
|
'sex' => 'sexes',
|
||||||
|
'soliloquy' => 'soliloquies',
|
||||||
|
'son-in-law' => 'sons-in-law',
|
||||||
|
'syllabus' => 'syllabi',
|
||||||
|
'testis' => 'testes',
|
||||||
|
'thief' => 'thieves',
|
||||||
|
'tooth' => 'teeth',
|
||||||
|
'tornado' => 'tornadoes',
|
||||||
|
'trilby' => 'trilbys',
|
||||||
|
'turf' => 'turfs',
|
||||||
|
'valve' => 'valves',
|
||||||
|
'volcano' => 'volcanoes',
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Singular inflector rules.
|
||||||
|
*
|
||||||
|
* @var string[][]
|
||||||
|
*/
|
||||||
|
private static $singular = array(
|
||||||
|
'rules' => array(
|
||||||
|
'/(s)tatuses$/i' => '\1\2tatus',
|
||||||
|
'/^(.*)(menu)s$/i' => '\1\2',
|
||||||
|
'/(quiz)zes$/i' => '\\1',
|
||||||
|
'/(matr)ices$/i' => '\1ix',
|
||||||
|
'/(vert|ind)ices$/i' => '\1ex',
|
||||||
|
'/^(ox)en/i' => '\1',
|
||||||
|
'/(alias)(es)*$/i' => '\1',
|
||||||
|
'/(buffal|her|potat|tomat|volcan)oes$/i' => '\1o',
|
||||||
|
'/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|viri?)i$/i' => '\1us',
|
||||||
|
'/([ftw]ax)es/i' => '\1',
|
||||||
|
'/(analys|ax|cris|test|thes)es$/i' => '\1is',
|
||||||
|
'/(shoe|slave)s$/i' => '\1',
|
||||||
|
'/(o)es$/i' => '\1',
|
||||||
|
'/ouses$/' => 'ouse',
|
||||||
|
'/([^a])uses$/' => '\1us',
|
||||||
|
'/([m|l])ice$/i' => '\1ouse',
|
||||||
|
'/(x|ch|ss|sh)es$/i' => '\1',
|
||||||
|
'/(m)ovies$/i' => '\1\2ovie',
|
||||||
|
'/(s)eries$/i' => '\1\2eries',
|
||||||
|
'/([^aeiouy]|qu)ies$/i' => '\1y',
|
||||||
|
'/([lr])ves$/i' => '\1f',
|
||||||
|
'/(tive)s$/i' => '\1',
|
||||||
|
'/(hive)s$/i' => '\1',
|
||||||
|
'/(drive)s$/i' => '\1',
|
||||||
|
'/(dive)s$/i' => '\1',
|
||||||
|
'/(olive)s$/i' => '\1',
|
||||||
|
'/([^fo])ves$/i' => '\1fe',
|
||||||
|
'/(^analy)ses$/i' => '\1sis',
|
||||||
|
'/(analy|diagno|^ba|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\1\2sis',
|
||||||
|
'/(c)riteria$/i' => '\1riterion',
|
||||||
|
'/([ti])a$/i' => '\1um',
|
||||||
|
'/(p)eople$/i' => '\1\2erson',
|
||||||
|
'/(m)en$/i' => '\1an',
|
||||||
|
'/(c)hildren$/i' => '\1\2hild',
|
||||||
|
'/(f)eet$/i' => '\1oot',
|
||||||
|
'/(n)ews$/i' => '\1\2ews',
|
||||||
|
'/eaus$/' => 'eau',
|
||||||
|
'/^(.*us)$/' => '\\1',
|
||||||
|
'/s$/i' => '',
|
||||||
|
),
|
||||||
|
'uninflected' => array(
|
||||||
|
'.*[nrlm]ese',
|
||||||
|
'.*deer',
|
||||||
|
'.*fish',
|
||||||
|
'.*measles',
|
||||||
|
'.*ois',
|
||||||
|
'.*pox',
|
||||||
|
'.*sheep',
|
||||||
|
'.*ss',
|
||||||
|
'data',
|
||||||
|
'police',
|
||||||
|
'pants',
|
||||||
|
'clothes',
|
||||||
|
),
|
||||||
|
'irregular' => array(
|
||||||
|
'abuses' => 'abuse',
|
||||||
|
'avalanches' => 'avalanche',
|
||||||
|
'caches' => 'cache',
|
||||||
|
'criteria' => 'criterion',
|
||||||
|
'curves' => 'curve',
|
||||||
|
'emphases' => 'emphasis',
|
||||||
|
'foes' => 'foe',
|
||||||
|
'geese' => 'goose',
|
||||||
|
'graves' => 'grave',
|
||||||
|
'hoaxes' => 'hoax',
|
||||||
|
'media' => 'medium',
|
||||||
|
'neuroses' => 'neurosis',
|
||||||
|
'waves' => 'wave',
|
||||||
|
'oases' => 'oasis',
|
||||||
|
'valves' => 'valve',
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Words that should not be inflected.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $uninflected = array(
|
||||||
|
'.*?media', 'Amoyese', 'audio', 'bison', 'Borghese', 'bream', 'breeches',
|
||||||
|
'britches', 'buffalo', 'cantus', 'carp', 'chassis', 'clippers', 'cod', 'coitus', 'compensation', 'Congoese',
|
||||||
|
'contretemps', 'coreopsis', 'corps', 'data', 'debris', 'deer', 'diabetes', 'djinn', 'education', 'eland',
|
||||||
|
'elk', 'emoji', 'equipment', 'evidence', 'Faroese', 'feedback', 'fish', 'flounder', 'Foochowese',
|
||||||
|
'Furniture', 'furniture', 'gallows', 'Genevese', 'Genoese', 'Gilbertese', 'gold',
|
||||||
|
'headquarters', 'herpes', 'hijinks', 'Hottentotese', 'information', 'innings', 'jackanapes', 'jedi',
|
||||||
|
'Kiplingese', 'knowledge', 'Kongoese', 'love', 'Lucchese', 'Luggage', 'mackerel', 'Maltese', 'metadata',
|
||||||
|
'mews', 'moose', 'mumps', 'Nankingese', 'news', 'nexus', 'Niasese', 'nutrition', 'offspring',
|
||||||
|
'Pekingese', 'Piedmontese', 'pincers', 'Pistoiese', 'plankton', 'pliers', 'pokemon', 'police', 'Portuguese',
|
||||||
|
'proceedings', 'rabies', 'rain', 'rhinoceros', 'rice', 'salmon', 'Sarawakese', 'scissors', 'sea[- ]bass',
|
||||||
|
'series', 'Shavese', 'shears', 'sheep', 'siemens', 'species', 'staff', 'swine', 'traffic',
|
||||||
|
'trousers', 'trout', 'tuna', 'us', 'Vermontese', 'Wenchowese', 'wheat', 'whiting', 'wildebeest', 'Yengeese'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method cache array.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $cache = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The initial state of Inflector so reset() works.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $initialState = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a word into the format for a Doctrine table name. Converts 'ModelName' to 'model_name'.
|
||||||
|
*/
|
||||||
|
public static function tableize(string $word) : string
|
||||||
|
{
|
||||||
|
return strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $word));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a word into the format for a Doctrine class name. Converts 'table_name' to 'TableName'.
|
||||||
|
*/
|
||||||
|
public static function classify(string $word) : string
|
||||||
|
{
|
||||||
|
return str_replace([' ', '_', '-'], '', ucwords($word, ' _-'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Camelizes a word. This uses the classify() method and turns the first character to lowercase.
|
||||||
|
*/
|
||||||
|
public static function camelize(string $word) : string
|
||||||
|
{
|
||||||
|
return lcfirst(self::classify($word));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uppercases words with configurable delimeters between words.
|
||||||
|
*
|
||||||
|
* Takes a string and capitalizes all of the words, like PHP's built-in
|
||||||
|
* ucwords function. This extends that behavior, however, by allowing the
|
||||||
|
* word delimeters to be configured, rather than only separating on
|
||||||
|
* whitespace.
|
||||||
|
*
|
||||||
|
* Here is an example:
|
||||||
|
* <code>
|
||||||
|
* <?php
|
||||||
|
* $string = 'top-o-the-morning to all_of_you!';
|
||||||
|
* echo \Doctrine\Common\Inflector\Inflector::ucwords($string);
|
||||||
|
* // Top-O-The-Morning To All_of_you!
|
||||||
|
*
|
||||||
|
* echo \Doctrine\Common\Inflector\Inflector::ucwords($string, '-_ ');
|
||||||
|
* // Top-O-The-Morning To All_Of_You!
|
||||||
|
* ?>
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param string $string The string to operate on.
|
||||||
|
* @param string $delimiters A list of word separators.
|
||||||
|
*
|
||||||
|
* @return string The string with all delimeter-separated words capitalized.
|
||||||
|
*/
|
||||||
|
public static function ucwords(string $string, string $delimiters = " \n\t\r\0\x0B-") : string
|
||||||
|
{
|
||||||
|
return ucwords($string, $delimiters);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears Inflectors inflected value caches, and resets the inflection
|
||||||
|
* rules to the initial values.
|
||||||
|
*/
|
||||||
|
public static function reset() : void
|
||||||
|
{
|
||||||
|
if (empty(self::$initialState)) {
|
||||||
|
self::$initialState = get_class_vars('Inflector');
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (self::$initialState as $key => $val) {
|
||||||
|
if ($key !== 'initialState') {
|
||||||
|
self::${$key} = $val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds custom inflection $rules, of either 'plural' or 'singular' $type.
|
||||||
|
*
|
||||||
|
* ### Usage:
|
||||||
|
*
|
||||||
|
* {{{
|
||||||
|
* Inflector::rules('plural', array('/^(inflect)or$/i' => '\1ables'));
|
||||||
|
* Inflector::rules('plural', array(
|
||||||
|
* 'rules' => array('/^(inflect)ors$/i' => '\1ables'),
|
||||||
|
* 'uninflected' => array('dontinflectme'),
|
||||||
|
* 'irregular' => array('red' => 'redlings')
|
||||||
|
* ));
|
||||||
|
* }}}
|
||||||
|
*
|
||||||
|
* @param string $type The type of inflection, either 'plural' or 'singular'
|
||||||
|
* @param array|iterable $rules An array of rules to be added.
|
||||||
|
* @param boolean $reset If true, will unset default inflections for all
|
||||||
|
* new rules that are being defined in $rules.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function rules(string $type, iterable $rules, bool $reset = false) : void
|
||||||
|
{
|
||||||
|
foreach ($rules as $rule => $pattern) {
|
||||||
|
if ( ! is_array($pattern)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($reset) {
|
||||||
|
self::${$type}[$rule] = $pattern;
|
||||||
|
} else {
|
||||||
|
self::${$type}[$rule] = ($rule === 'uninflected')
|
||||||
|
? array_merge($pattern, self::${$type}[$rule])
|
||||||
|
: $pattern + self::${$type}[$rule];
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($rules[$rule], self::${$type}['cache' . ucfirst($rule)]);
|
||||||
|
|
||||||
|
if (isset(self::${$type}['merged'][$rule])) {
|
||||||
|
unset(self::${$type}['merged'][$rule]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($type === 'plural') {
|
||||||
|
self::$cache['pluralize'] = self::$cache['tableize'] = array();
|
||||||
|
} elseif ($type === 'singular') {
|
||||||
|
self::$cache['singularize'] = array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self::${$type}['rules'] = $rules + self::${$type}['rules'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a word in plural form.
|
||||||
|
*
|
||||||
|
* @param string $word The word in singular form.
|
||||||
|
*
|
||||||
|
* @return string The word in plural form.
|
||||||
|
*/
|
||||||
|
public static function pluralize(string $word) : string
|
||||||
|
{
|
||||||
|
if (isset(self::$cache['pluralize'][$word])) {
|
||||||
|
return self::$cache['pluralize'][$word];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset(self::$plural['merged']['irregular'])) {
|
||||||
|
self::$plural['merged']['irregular'] = self::$plural['irregular'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset(self::$plural['merged']['uninflected'])) {
|
||||||
|
self::$plural['merged']['uninflected'] = array_merge(self::$plural['uninflected'], self::$uninflected);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset(self::$plural['cacheUninflected']) || !isset(self::$plural['cacheIrregular'])) {
|
||||||
|
self::$plural['cacheUninflected'] = '(?:' . implode('|', self::$plural['merged']['uninflected']) . ')';
|
||||||
|
self::$plural['cacheIrregular'] = '(?:' . implode('|', array_keys(self::$plural['merged']['irregular'])) . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preg_match('/(.*)\\b(' . self::$plural['cacheIrregular'] . ')$/i', $word, $regs)) {
|
||||||
|
self::$cache['pluralize'][$word] = $regs[1] . $word[0] . substr(self::$plural['merged']['irregular'][strtolower($regs[2])], 1);
|
||||||
|
|
||||||
|
return self::$cache['pluralize'][$word];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preg_match('/^(' . self::$plural['cacheUninflected'] . ')$/i', $word, $regs)) {
|
||||||
|
self::$cache['pluralize'][$word] = $word;
|
||||||
|
|
||||||
|
return $word;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (self::$plural['rules'] as $rule => $replacement) {
|
||||||
|
if (preg_match($rule, $word)) {
|
||||||
|
self::$cache['pluralize'][$word] = preg_replace($rule, $replacement, $word);
|
||||||
|
|
||||||
|
return self::$cache['pluralize'][$word];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a word in singular form.
|
||||||
|
*
|
||||||
|
* @param string $word The word in plural form.
|
||||||
|
*
|
||||||
|
* @return string The word in singular form.
|
||||||
|
*/
|
||||||
|
public static function singularize(string $word) : string
|
||||||
|
{
|
||||||
|
if (isset(self::$cache['singularize'][$word])) {
|
||||||
|
return self::$cache['singularize'][$word];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset(self::$singular['merged']['uninflected'])) {
|
||||||
|
self::$singular['merged']['uninflected'] = array_merge(
|
||||||
|
self::$singular['uninflected'],
|
||||||
|
self::$uninflected
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset(self::$singular['merged']['irregular'])) {
|
||||||
|
self::$singular['merged']['irregular'] = array_merge(
|
||||||
|
self::$singular['irregular'],
|
||||||
|
array_flip(self::$plural['irregular'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset(self::$singular['cacheUninflected']) || !isset(self::$singular['cacheIrregular'])) {
|
||||||
|
self::$singular['cacheUninflected'] = '(?:' . implode('|', self::$singular['merged']['uninflected']) . ')';
|
||||||
|
self::$singular['cacheIrregular'] = '(?:' . implode('|', array_keys(self::$singular['merged']['irregular'])) . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preg_match('/(.*)\\b(' . self::$singular['cacheIrregular'] . ')$/i', $word, $regs)) {
|
||||||
|
self::$cache['singularize'][$word] = $regs[1] . $word[0] . substr(self::$singular['merged']['irregular'][strtolower($regs[2])], 1);
|
||||||
|
|
||||||
|
return self::$cache['singularize'][$word];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preg_match('/^(' . self::$singular['cacheUninflected'] . ')$/i', $word, $regs)) {
|
||||||
|
self::$cache['singularize'][$word] = $word;
|
||||||
|
|
||||||
|
return $word;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (self::$singular['rules'] as $rule => $replacement) {
|
||||||
|
if (preg_match($rule, $word)) {
|
||||||
|
self::$cache['singularize'][$word] = preg_replace($rule, $replacement, $word);
|
||||||
|
|
||||||
|
return self::$cache['singularize'][$word];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$cache['singularize'][$word] = $word;
|
||||||
|
|
||||||
|
return $word;
|
||||||
|
}
|
||||||
|
}
|
26
paragonik-backend/vendor/doctrine/instantiator/.doctrine-project.json
vendored
Normal file
26
paragonik-backend/vendor/doctrine/instantiator/.doctrine-project.json
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"active": true,
|
||||||
|
"name": "Instantiator",
|
||||||
|
"slug": "instantiator",
|
||||||
|
"docsSlug": "doctrine-instantiator",
|
||||||
|
"codePath": "/src",
|
||||||
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "1.1",
|
||||||
|
"branchName": "master",
|
||||||
|
"slug": "latest",
|
||||||
|
"aliases": [
|
||||||
|
"current",
|
||||||
|
"stable"
|
||||||
|
],
|
||||||
|
"maintained": true,
|
||||||
|
"current": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "1.0",
|
||||||
|
"branchName": "1.0.x",
|
||||||
|
"slug": "1.0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
3
paragonik-backend/vendor/doctrine/instantiator/.github/FUNDING.yml
vendored
Normal file
3
paragonik-backend/vendor/doctrine/instantiator/.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
patreon: phpdoctrine
|
||||||
|
tidelift: packagist/doctrine%2Finstantiator
|
||||||
|
custom: https://www.doctrine-project.org/sponsorship.html
|
35
paragonik-backend/vendor/doctrine/instantiator/CONTRIBUTING.md
vendored
Normal file
35
paragonik-backend/vendor/doctrine/instantiator/CONTRIBUTING.md
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
* Follow the [Doctrine Coding Standard](https://github.com/doctrine/coding-standard)
|
||||||
|
* The project will follow strict [object calisthenics](http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php)
|
||||||
|
* Any contribution must provide tests for additional introduced conditions
|
||||||
|
* Any un-confirmed issue needs a failing test case before being accepted
|
||||||
|
* Pull requests must be sent from a new hotfix/feature branch, not from `master`.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To install the project and run the tests, you need to clone it first:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ git clone git://github.com/doctrine/instantiator.git
|
||||||
|
```
|
||||||
|
|
||||||
|
You will then need to run a composer installation:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ cd Instantiator
|
||||||
|
$ curl -s https://getcomposer.org/installer | php
|
||||||
|
$ php composer.phar update
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
The PHPUnit version to be used is the one installed as a dev- dependency via composer:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ ./vendor/bin/phpunit
|
||||||
|
```
|
||||||
|
|
||||||
|
Accepted coverage for new contributions is 80%. Any contribution not satisfying this requirement
|
||||||
|
won't be merged.
|
||||||
|
|
19
paragonik-backend/vendor/doctrine/instantiator/LICENSE
vendored
Normal file
19
paragonik-backend/vendor/doctrine/instantiator/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2014 Doctrine Project
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
39
paragonik-backend/vendor/doctrine/instantiator/README.md
vendored
Normal file
39
paragonik-backend/vendor/doctrine/instantiator/README.md
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Instantiator
|
||||||
|
|
||||||
|
This library provides a way of avoiding usage of constructors when instantiating PHP classes.
|
||||||
|
|
||||||
|
[![Build Status](https://travis-ci.org/doctrine/instantiator.svg?branch=master)](https://travis-ci.org/doctrine/instantiator)
|
||||||
|
[![Code Coverage](https://scrutinizer-ci.com/g/doctrine/instantiator/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/doctrine/instantiator/?branch=master)
|
||||||
|
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/doctrine/instantiator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/doctrine/instantiator/?branch=master)
|
||||||
|
[![Dependency Status](https://www.versioneye.com/package/php--doctrine--instantiator/badge.svg)](https://www.versioneye.com/package/php--doctrine--instantiator)
|
||||||
|
|
||||||
|
[![Latest Stable Version](https://poser.pugx.org/doctrine/instantiator/v/stable.png)](https://packagist.org/packages/doctrine/instantiator)
|
||||||
|
[![Latest Unstable Version](https://poser.pugx.org/doctrine/instantiator/v/unstable.png)](https://packagist.org/packages/doctrine/instantiator)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
The suggested installation method is via [composer](https://getcomposer.org/):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
php composer.phar require "doctrine/instantiator:~1.0.3"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
The instantiator is able to create new instances of any class without using the constructor or any API of the class
|
||||||
|
itself:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$instantiator = new \Doctrine\Instantiator\Instantiator();
|
||||||
|
|
||||||
|
$instance = $instantiator->instantiate(\My\ClassName\Here::class);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Please read the [CONTRIBUTING.md](CONTRIBUTING.md) contents if you wish to help out!
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
This library was migrated from [ocramius/instantiator](https://github.com/Ocramius/Instantiator), which
|
||||||
|
has been donated to the doctrine organization, and which is now deprecated in favour of this package.
|
47
paragonik-backend/vendor/doctrine/instantiator/composer.json
vendored
Normal file
47
paragonik-backend/vendor/doctrine/instantiator/composer.json
vendored
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"name": "doctrine/instantiator",
|
||||||
|
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
|
||||||
|
"type": "library",
|
||||||
|
"license": "MIT",
|
||||||
|
"homepage": "https://www.doctrine-project.org/projects/instantiator.html",
|
||||||
|
"keywords": [
|
||||||
|
"instantiate",
|
||||||
|
"constructor"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Marco Pivetta",
|
||||||
|
"email": "ocramius@gmail.com",
|
||||||
|
"homepage": "http://ocramius.github.com/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ext-phar": "*",
|
||||||
|
"ext-pdo": "*",
|
||||||
|
"doctrine/coding-standard": "^6.0",
|
||||||
|
"phpbench/phpbench": "^0.13",
|
||||||
|
"phpstan/phpstan-phpunit": "^0.11",
|
||||||
|
"phpstan/phpstan-shim": "^0.11",
|
||||||
|
"phpunit/phpunit": "^7.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-0": {
|
||||||
|
"DoctrineTest\\InstantiatorPerformance\\": "tests",
|
||||||
|
"DoctrineTest\\InstantiatorTest\\": "tests",
|
||||||
|
"DoctrineTest\\InstantiatorTestAsset\\": "tests"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.2.x-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
68
paragonik-backend/vendor/doctrine/instantiator/docs/en/index.rst
vendored
Normal file
68
paragonik-backend/vendor/doctrine/instantiator/docs/en/index.rst
vendored
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
This library provides a way of avoiding usage of constructors when instantiating PHP classes.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
The suggested installation method is via `composer`_:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ composer require doctrine/instantiator
|
||||||
|
|
||||||
|
Usage
|
||||||
|
=====
|
||||||
|
|
||||||
|
The instantiator is able to create new instances of any class without
|
||||||
|
using the constructor or any API of the class itself:
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Doctrine\Instantiator\Instantiator;
|
||||||
|
use App\Entities\User;
|
||||||
|
|
||||||
|
$instantiator = new Instantiator();
|
||||||
|
|
||||||
|
$user = $instantiator->instantiate(User::class);
|
||||||
|
|
||||||
|
Contributing
|
||||||
|
============
|
||||||
|
|
||||||
|
- Follow the `Doctrine Coding Standard`_
|
||||||
|
- The project will follow strict `object calisthenics`_
|
||||||
|
- Any contribution must provide tests for additional introduced
|
||||||
|
conditions
|
||||||
|
- Any un-confirmed issue needs a failing test case before being
|
||||||
|
accepted
|
||||||
|
- Pull requests must be sent from a new hotfix/feature branch, not from
|
||||||
|
``master``.
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
The PHPUnit version to be used is the one installed as a dev- dependency
|
||||||
|
via composer:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ ./vendor/bin/phpunit
|
||||||
|
|
||||||
|
Accepted coverage for new contributions is 80%. Any contribution not
|
||||||
|
satisfying this requirement won’t be merged.
|
||||||
|
|
||||||
|
Credits
|
||||||
|
=======
|
||||||
|
|
||||||
|
This library was migrated from `ocramius/instantiator`_, which has been
|
||||||
|
donated to the doctrine organization, and which is now deprecated in
|
||||||
|
favour of this package.
|
||||||
|
|
||||||
|
.. _composer: https://getcomposer.org/
|
||||||
|
.. _CONTRIBUTING.md: CONTRIBUTING.md
|
||||||
|
.. _ocramius/instantiator: https://github.com/Ocramius/Instantiator
|
||||||
|
.. _Doctrine Coding Standard: https://github.com/doctrine/coding-standard
|
||||||
|
.. _object calisthenics: http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php
|
4
paragonik-backend/vendor/doctrine/instantiator/docs/en/sidebar.rst
vendored
Normal file
4
paragonik-backend/vendor/doctrine/instantiator/docs/en/sidebar.rst
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.. toctree::
|
||||||
|
:depth: 3
|
||||||
|
|
||||||
|
index
|
4
paragonik-backend/vendor/doctrine/instantiator/phpbench.json
vendored
Normal file
4
paragonik-backend/vendor/doctrine/instantiator/phpbench.json
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"bootstrap": "vendor/autoload.php",
|
||||||
|
"path": "tests/DoctrineTest/InstantiatorPerformance"
|
||||||
|
}
|
35
paragonik-backend/vendor/doctrine/instantiator/phpcs.xml.dist
vendored
Normal file
35
paragonik-backend/vendor/doctrine/instantiator/phpcs.xml.dist
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<ruleset>
|
||||||
|
<arg name="basepath" value="."/>
|
||||||
|
<arg name="extensions" value="php"/>
|
||||||
|
<arg name="parallel" value="80"/>
|
||||||
|
<arg name="cache" value=".phpcs-cache"/>
|
||||||
|
<arg name="colors"/>
|
||||||
|
|
||||||
|
<!-- Ignore warnings, show progress of the run and show sniff names -->
|
||||||
|
<arg value="nps"/>
|
||||||
|
|
||||||
|
<file>src</file>
|
||||||
|
<file>tests</file>
|
||||||
|
|
||||||
|
<rule ref="Doctrine">
|
||||||
|
<exclude name="SlevomatCodingStandard.TypeHints.DeclareStrictTypes"/>
|
||||||
|
<exclude name="SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingParameterTypeHint"/>
|
||||||
|
<exclude name="SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint"/>
|
||||||
|
<exclude name="SlevomatCodingStandard.Exceptions.ReferenceThrowableOnly.ReferencedGeneralException"/>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<rule ref="SlevomatCodingStandard.Classes.SuperfluousAbstractClassNaming">
|
||||||
|
<exclude-pattern>tests/DoctrineTest/InstantiatorTestAsset/AbstractClassAsset.php</exclude-pattern>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<rule ref="SlevomatCodingStandard.Classes.SuperfluousExceptionNaming">
|
||||||
|
<exclude-pattern>src/Doctrine/Instantiator/Exception/UnexpectedValueException.php</exclude-pattern>
|
||||||
|
<exclude-pattern>src/Doctrine/Instantiator/Exception/InvalidArgumentException.php</exclude-pattern>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<rule ref="SlevomatCodingStandard.Classes.SuperfluousInterfaceNaming">
|
||||||
|
<exclude-pattern>src/Doctrine/Instantiator/Exception/ExceptionInterface.php</exclude-pattern>
|
||||||
|
<exclude-pattern>src/Doctrine/Instantiator/InstantiatorInterface.php</exclude-pattern>
|
||||||
|
</rule>
|
||||||
|
</ruleset>
|
19
paragonik-backend/vendor/doctrine/instantiator/phpstan.neon.dist
vendored
Normal file
19
paragonik-backend/vendor/doctrine/instantiator/phpstan.neon.dist
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
includes:
|
||||||
|
- vendor/phpstan/phpstan-phpunit/extension.neon
|
||||||
|
- vendor/phpstan/phpstan-phpunit/rules.neon
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
level: max
|
||||||
|
paths:
|
||||||
|
- src
|
||||||
|
- tests
|
||||||
|
|
||||||
|
ignoreErrors:
|
||||||
|
-
|
||||||
|
message: '#::__construct\(\) does not call parent constructor from#'
|
||||||
|
path: '*/tests/DoctrineTest/InstantiatorTestAsset/*.php'
|
||||||
|
|
||||||
|
# dynamic properties confuse static analysis
|
||||||
|
-
|
||||||
|
message: '#Access to an undefined property object::\$foo\.#'
|
||||||
|
path: '*/tests/DoctrineTest/InstantiatorTest/InstantiatorTest.php'
|
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Instantiator\Exception;
|
||||||
|
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base exception marker interface for the instantiator component
|
||||||
|
*/
|
||||||
|
interface ExceptionInterface extends Throwable
|
||||||
|
{
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Instantiator\Exception;
|
||||||
|
|
||||||
|
use InvalidArgumentException as BaseInvalidArgumentException;
|
||||||
|
use ReflectionClass;
|
||||||
|
use const PHP_VERSION_ID;
|
||||||
|
use function interface_exists;
|
||||||
|
use function sprintf;
|
||||||
|
use function trait_exists;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception for invalid arguments provided to the instantiator
|
||||||
|
*/
|
||||||
|
class InvalidArgumentException extends BaseInvalidArgumentException implements ExceptionInterface
|
||||||
|
{
|
||||||
|
public static function fromNonExistingClass(string $className) : self
|
||||||
|
{
|
||||||
|
if (interface_exists($className)) {
|
||||||
|
return new self(sprintf('The provided type "%s" is an interface, and can not be instantiated', $className));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PHP_VERSION_ID >= 50400 && trait_exists($className)) {
|
||||||
|
return new self(sprintf('The provided type "%s" is a trait, and can not be instantiated', $className));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new self(sprintf('The provided class "%s" does not exist', $className));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function fromAbstractClass(ReflectionClass $reflectionClass) : self
|
||||||
|
{
|
||||||
|
return new self(sprintf(
|
||||||
|
'The provided class "%s" is abstract, and can not be instantiated',
|
||||||
|
$reflectionClass->getName()
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Instantiator\Exception;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use ReflectionClass;
|
||||||
|
use UnexpectedValueException as BaseUnexpectedValueException;
|
||||||
|
use function sprintf;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception for given parameters causing invalid/unexpected state on instantiation
|
||||||
|
*/
|
||||||
|
class UnexpectedValueException extends BaseUnexpectedValueException implements ExceptionInterface
|
||||||
|
{
|
||||||
|
public static function fromSerializationTriggeredException(
|
||||||
|
ReflectionClass $reflectionClass,
|
||||||
|
Exception $exception
|
||||||
|
) : self {
|
||||||
|
return new self(
|
||||||
|
sprintf(
|
||||||
|
'An exception was raised while trying to instantiate an instance of "%s" via un-serialization',
|
||||||
|
$reflectionClass->getName()
|
||||||
|
),
|
||||||
|
0,
|
||||||
|
$exception
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function fromUncleanUnSerialization(
|
||||||
|
ReflectionClass $reflectionClass,
|
||||||
|
string $errorString,
|
||||||
|
int $errorCode,
|
||||||
|
string $errorFile,
|
||||||
|
int $errorLine
|
||||||
|
) : self {
|
||||||
|
return new self(
|
||||||
|
sprintf(
|
||||||
|
'Could not produce an instance of "%s" via un-serialization, since an error was triggered '
|
||||||
|
. 'in file "%s" at line "%d"',
|
||||||
|
$reflectionClass->getName(),
|
||||||
|
$errorFile,
|
||||||
|
$errorLine
|
||||||
|
),
|
||||||
|
0,
|
||||||
|
new Exception($errorString, $errorCode)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
203
paragonik-backend/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php
vendored
Normal file
203
paragonik-backend/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php
vendored
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Instantiator;
|
||||||
|
|
||||||
|
use ArrayIterator;
|
||||||
|
use Doctrine\Instantiator\Exception\InvalidArgumentException;
|
||||||
|
use Doctrine\Instantiator\Exception\UnexpectedValueException;
|
||||||
|
use Exception;
|
||||||
|
use ReflectionClass;
|
||||||
|
use ReflectionException;
|
||||||
|
use Serializable;
|
||||||
|
use function class_exists;
|
||||||
|
use function is_subclass_of;
|
||||||
|
use function restore_error_handler;
|
||||||
|
use function set_error_handler;
|
||||||
|
use function sprintf;
|
||||||
|
use function strlen;
|
||||||
|
use function unserialize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
final class Instantiator implements InstantiatorInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Markers used internally by PHP to define whether {@see \unserialize} should invoke
|
||||||
|
* the method {@see \Serializable::unserialize()} when dealing with classes implementing
|
||||||
|
* the {@see \Serializable} interface.
|
||||||
|
*/
|
||||||
|
public const SERIALIZATION_FORMAT_USE_UNSERIALIZER = 'C';
|
||||||
|
public const SERIALIZATION_FORMAT_AVOID_UNSERIALIZER = 'O';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to instantiate specific classes, indexed by class name.
|
||||||
|
*
|
||||||
|
* @var callable[]
|
||||||
|
*/
|
||||||
|
private static $cachedInstantiators = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array of objects that can directly be cloned, indexed by class name.
|
||||||
|
*
|
||||||
|
* @var object[]
|
||||||
|
*/
|
||||||
|
private static $cachedCloneables = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function instantiate($className)
|
||||||
|
{
|
||||||
|
if (isset(self::$cachedCloneables[$className])) {
|
||||||
|
return clone self::$cachedCloneables[$className];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset(self::$cachedInstantiators[$className])) {
|
||||||
|
$factory = self::$cachedInstantiators[$className];
|
||||||
|
|
||||||
|
return $factory();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->buildAndCacheFromFactory($className);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds the requested object and caches it in static properties for performance
|
||||||
|
*
|
||||||
|
* @return object
|
||||||
|
*/
|
||||||
|
private function buildAndCacheFromFactory(string $className)
|
||||||
|
{
|
||||||
|
$factory = self::$cachedInstantiators[$className] = $this->buildFactory($className);
|
||||||
|
$instance = $factory();
|
||||||
|
|
||||||
|
if ($this->isSafeToClone(new ReflectionClass($instance))) {
|
||||||
|
self::$cachedCloneables[$className] = clone $instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds a callable capable of instantiating the given $className without
|
||||||
|
* invoking its constructor.
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
* @throws UnexpectedValueException
|
||||||
|
* @throws ReflectionException
|
||||||
|
*/
|
||||||
|
private function buildFactory(string $className) : callable
|
||||||
|
{
|
||||||
|
$reflectionClass = $this->getReflectionClass($className);
|
||||||
|
|
||||||
|
if ($this->isInstantiableViaReflection($reflectionClass)) {
|
||||||
|
return [$reflectionClass, 'newInstanceWithoutConstructor'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$serializedString = sprintf(
|
||||||
|
'%s:%d:"%s":0:{}',
|
||||||
|
is_subclass_of($className, Serializable::class) ? self::SERIALIZATION_FORMAT_USE_UNSERIALIZER : self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER,
|
||||||
|
strlen($className),
|
||||||
|
$className
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->checkIfUnSerializationIsSupported($reflectionClass, $serializedString);
|
||||||
|
|
||||||
|
return static function () use ($serializedString) {
|
||||||
|
return unserialize($serializedString);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
* @throws ReflectionException
|
||||||
|
*/
|
||||||
|
private function getReflectionClass(string $className) : ReflectionClass
|
||||||
|
{
|
||||||
|
if (! class_exists($className)) {
|
||||||
|
throw InvalidArgumentException::fromNonExistingClass($className);
|
||||||
|
}
|
||||||
|
|
||||||
|
$reflection = new ReflectionClass($className);
|
||||||
|
|
||||||
|
if ($reflection->isAbstract()) {
|
||||||
|
throw InvalidArgumentException::fromAbstractClass($reflection);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $reflection;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnexpectedValueException
|
||||||
|
*/
|
||||||
|
private function checkIfUnSerializationIsSupported(ReflectionClass $reflectionClass, string $serializedString) : void
|
||||||
|
{
|
||||||
|
set_error_handler(static function (int $code, string $message, string $file, int $line) use ($reflectionClass, &$error) : bool {
|
||||||
|
$error = UnexpectedValueException::fromUncleanUnSerialization(
|
||||||
|
$reflectionClass,
|
||||||
|
$message,
|
||||||
|
$code,
|
||||||
|
$file,
|
||||||
|
$line
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->attemptInstantiationViaUnSerialization($reflectionClass, $serializedString);
|
||||||
|
} finally {
|
||||||
|
restore_error_handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($error) {
|
||||||
|
throw $error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnexpectedValueException
|
||||||
|
*/
|
||||||
|
private function attemptInstantiationViaUnSerialization(ReflectionClass $reflectionClass, string $serializedString) : void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
unserialize($serializedString);
|
||||||
|
} catch (Exception $exception) {
|
||||||
|
throw UnexpectedValueException::fromSerializationTriggeredException($reflectionClass, $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function isInstantiableViaReflection(ReflectionClass $reflectionClass) : bool
|
||||||
|
{
|
||||||
|
return ! ($this->hasInternalAncestors($reflectionClass) && $reflectionClass->isFinal());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies whether the given class is to be considered internal
|
||||||
|
*/
|
||||||
|
private function hasInternalAncestors(ReflectionClass $reflectionClass) : bool
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
if ($reflectionClass->isInternal()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$reflectionClass = $reflectionClass->getParentClass();
|
||||||
|
} while ($reflectionClass);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a class is cloneable
|
||||||
|
*
|
||||||
|
* Classes implementing `__clone` cannot be safely cloned, as that may cause side-effects.
|
||||||
|
*/
|
||||||
|
private function isSafeToClone(ReflectionClass $reflection) : bool
|
||||||
|
{
|
||||||
|
return $reflection->isCloneable()
|
||||||
|
&& ! $reflection->hasMethod('__clone')
|
||||||
|
&& ! $reflection->isSubclassOf(ArrayIterator::class);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Instantiator;
|
||||||
|
|
||||||
|
use Doctrine\Instantiator\Exception\ExceptionInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiator provides utility methods to build objects without invoking their constructors
|
||||||
|
*/
|
||||||
|
interface InstantiatorInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string $className
|
||||||
|
*
|
||||||
|
* @return object
|
||||||
|
*
|
||||||
|
* @throws ExceptionInterface
|
||||||
|
*/
|
||||||
|
public function instantiate($className);
|
||||||
|
}
|
19
paragonik-backend/vendor/doctrine/lexer/LICENSE
vendored
Normal file
19
paragonik-backend/vendor/doctrine/lexer/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2006-2018 Doctrine Project
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
9
paragonik-backend/vendor/doctrine/lexer/README.md
vendored
Normal file
9
paragonik-backend/vendor/doctrine/lexer/README.md
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Doctrine Lexer
|
||||||
|
|
||||||
|
Build Status: [![Build Status](https://travis-ci.org/doctrine/lexer.svg?branch=master)](https://travis-ci.org/doctrine/lexer)
|
||||||
|
|
||||||
|
Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.
|
||||||
|
|
||||||
|
This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL).
|
||||||
|
|
||||||
|
https://www.doctrine-project.org/projects/lexer.html
|
41
paragonik-backend/vendor/doctrine/lexer/composer.json
vendored
Normal file
41
paragonik-backend/vendor/doctrine/lexer/composer.json
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"name": "doctrine/lexer",
|
||||||
|
"type": "library",
|
||||||
|
"description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
|
||||||
|
"keywords": [
|
||||||
|
"php",
|
||||||
|
"parser",
|
||||||
|
"lexer",
|
||||||
|
"annotations",
|
||||||
|
"docblock"
|
||||||
|
],
|
||||||
|
"homepage": "https://www.doctrine-project.org/projects/lexer.html",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"},
|
||||||
|
{"name": "Roman Borschel", "email": "roman@code-factory.org"},
|
||||||
|
{"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"doctrine/coding-standard": "^6.0",
|
||||||
|
"phpstan/phpstan": "^0.11.8",
|
||||||
|
"phpunit/phpunit": "^8.2"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" }
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": { "Doctrine\\Tests\\": "tests/Doctrine" }
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.2.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"sort-packages": true
|
||||||
|
}
|
||||||
|
}
|
328
paragonik-backend/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php
vendored
Normal file
328
paragonik-backend/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php
vendored
Normal file
@ -0,0 +1,328 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Doctrine\Common\Lexer;
|
||||||
|
|
||||||
|
use ReflectionClass;
|
||||||
|
use const PREG_SPLIT_DELIM_CAPTURE;
|
||||||
|
use const PREG_SPLIT_NO_EMPTY;
|
||||||
|
use const PREG_SPLIT_OFFSET_CAPTURE;
|
||||||
|
use function implode;
|
||||||
|
use function in_array;
|
||||||
|
use function preg_split;
|
||||||
|
use function sprintf;
|
||||||
|
use function substr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class for writing simple lexers, i.e. for creating small DSLs.
|
||||||
|
*/
|
||||||
|
abstract class AbstractLexer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Lexer original input string.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $input;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array of scanned tokens.
|
||||||
|
*
|
||||||
|
* Each token is an associative array containing three items:
|
||||||
|
* - 'value' : the string value of the token in the input string
|
||||||
|
* - 'type' : the type of the token (identifier, numeric, string, input
|
||||||
|
* parameter, none)
|
||||||
|
* - 'position' : the position of the token in the input string
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $tokens = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Current lexer position in input string.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $position = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Current peek of current lexer position.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $peek = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The next token in the input.
|
||||||
|
*
|
||||||
|
* @var array|null
|
||||||
|
*/
|
||||||
|
public $lookahead;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The last matched/seen token.
|
||||||
|
*
|
||||||
|
* @var array|null
|
||||||
|
*/
|
||||||
|
public $token;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Composed regex for input parsing.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $regex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the input data to be tokenized.
|
||||||
|
*
|
||||||
|
* The Lexer is immediately reset and the new input tokenized.
|
||||||
|
* Any unprocessed tokens from any previous input are lost.
|
||||||
|
*
|
||||||
|
* @param string $input The input to be tokenized.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setInput($input)
|
||||||
|
{
|
||||||
|
$this->input = $input;
|
||||||
|
$this->tokens = [];
|
||||||
|
|
||||||
|
$this->reset();
|
||||||
|
$this->scan($input);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the lexer.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function reset()
|
||||||
|
{
|
||||||
|
$this->lookahead = null;
|
||||||
|
$this->token = null;
|
||||||
|
$this->peek = 0;
|
||||||
|
$this->position = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the peek pointer to 0.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function resetPeek()
|
||||||
|
{
|
||||||
|
$this->peek = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the lexer position on the input to the given position.
|
||||||
|
*
|
||||||
|
* @param int $position Position to place the lexical scanner.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function resetPosition($position = 0)
|
||||||
|
{
|
||||||
|
$this->position = $position;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the original lexer's input until a given position.
|
||||||
|
*
|
||||||
|
* @param int $position
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getInputUntilPosition($position)
|
||||||
|
{
|
||||||
|
return substr($this->input, 0, $position);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether a given token matches the current lookahead.
|
||||||
|
*
|
||||||
|
* @param int|string $token
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isNextToken($token)
|
||||||
|
{
|
||||||
|
return $this->lookahead !== null && $this->lookahead['type'] === $token;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether any of the given tokens matches the current lookahead.
|
||||||
|
*
|
||||||
|
* @param array $tokens
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isNextTokenAny(array $tokens)
|
||||||
|
{
|
||||||
|
return $this->lookahead !== null && in_array($this->lookahead['type'], $tokens, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves to the next token in the input string.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function moveNext()
|
||||||
|
{
|
||||||
|
$this->peek = 0;
|
||||||
|
$this->token = $this->lookahead;
|
||||||
|
$this->lookahead = isset($this->tokens[$this->position])
|
||||||
|
? $this->tokens[$this->position++] : null;
|
||||||
|
|
||||||
|
return $this->lookahead !== null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells the lexer to skip input tokens until it sees a token with the given value.
|
||||||
|
*
|
||||||
|
* @param string $type The token type to skip until.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function skipUntil($type)
|
||||||
|
{
|
||||||
|
while ($this->lookahead !== null && $this->lookahead['type'] !== $type) {
|
||||||
|
$this->moveNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if given value is identical to the given token.
|
||||||
|
*
|
||||||
|
* @param mixed $value
|
||||||
|
* @param int|string $token
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isA($value, $token)
|
||||||
|
{
|
||||||
|
return $this->getType($value) === $token;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves the lookahead token forward.
|
||||||
|
*
|
||||||
|
* @return array|null The next token or NULL if there are no more tokens ahead.
|
||||||
|
*/
|
||||||
|
public function peek()
|
||||||
|
{
|
||||||
|
if (isset($this->tokens[$this->position + $this->peek])) {
|
||||||
|
return $this->tokens[$this->position + $this->peek++];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Peeks at the next token, returns it and immediately resets the peek.
|
||||||
|
*
|
||||||
|
* @return array|null The next token or NULL if there are no more tokens ahead.
|
||||||
|
*/
|
||||||
|
public function glimpse()
|
||||||
|
{
|
||||||
|
$peek = $this->peek();
|
||||||
|
$this->peek = 0;
|
||||||
|
|
||||||
|
return $peek;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scans the input string for tokens.
|
||||||
|
*
|
||||||
|
* @param string $input A query string.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function scan($input)
|
||||||
|
{
|
||||||
|
if (! isset($this->regex)) {
|
||||||
|
$this->regex = sprintf(
|
||||||
|
'/(%s)|%s/%s',
|
||||||
|
implode(')|(', $this->getCatchablePatterns()),
|
||||||
|
implode('|', $this->getNonCatchablePatterns()),
|
||||||
|
$this->getModifiers()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE;
|
||||||
|
$matches = preg_split($this->regex, $input, -1, $flags);
|
||||||
|
|
||||||
|
if ($matches === false) {
|
||||||
|
// Work around https://bugs.php.net/78122
|
||||||
|
$matches = [[$input, 0]];
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($matches as $match) {
|
||||||
|
// Must remain before 'value' assignment since it can change content
|
||||||
|
$type = $this->getType($match[0]);
|
||||||
|
|
||||||
|
$this->tokens[] = [
|
||||||
|
'value' => $match[0],
|
||||||
|
'type' => $type,
|
||||||
|
'position' => $match[1],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the literal for a given token.
|
||||||
|
*
|
||||||
|
* @param int|string $token
|
||||||
|
*
|
||||||
|
* @return int|string
|
||||||
|
*/
|
||||||
|
public function getLiteral($token)
|
||||||
|
{
|
||||||
|
$className = static::class;
|
||||||
|
$reflClass = new ReflectionClass($className);
|
||||||
|
$constants = $reflClass->getConstants();
|
||||||
|
|
||||||
|
foreach ($constants as $name => $value) {
|
||||||
|
if ($value === $token) {
|
||||||
|
return $className . '::' . $name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $token;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Regex modifiers
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function getModifiers()
|
||||||
|
{
|
||||||
|
return 'iu';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lexical catchable patterns.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
abstract protected function getCatchablePatterns();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lexical non-catchable patterns.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
abstract protected function getNonCatchablePatterns();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve token type. Also processes the token value if necessary.
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
*
|
||||||
|
* @return int|string|null
|
||||||
|
*/
|
||||||
|
abstract protected function getType(&$value);
|
||||||
|
}
|
16
paragonik-backend/vendor/dragonmantank/cron-expression/.editorconfig
vendored
Normal file
16
paragonik-backend/vendor/dragonmantank/cron-expression/.editorconfig
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.yml]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
76
paragonik-backend/vendor/dragonmantank/cron-expression/CHANGELOG.md
vendored
Normal file
76
paragonik-backend/vendor/dragonmantank/cron-expression/CHANGELOG.md
vendored
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
## [2.3.0] - 2019-03-30
|
||||||
|
### Added
|
||||||
|
- Added support for DateTimeImmutable via DateTimeInterface
|
||||||
|
- Added support for PHP 7.3
|
||||||
|
- Started listing projects that use the library
|
||||||
|
### Changed
|
||||||
|
- Errors should now report a human readable position in the cron expression, instead of starting at 0
|
||||||
|
### Fixed
|
||||||
|
- N/A
|
||||||
|
|
||||||
|
## [2.2.0] - 2018-06-05
|
||||||
|
### Added
|
||||||
|
- Added support for steps larger than field ranges (#6)
|
||||||
|
## Changed
|
||||||
|
- N/A
|
||||||
|
### Fixed
|
||||||
|
- Fixed validation for numbers with leading 0s (#12)
|
||||||
|
|
||||||
|
## [2.1.0] - 2018-04-06
|
||||||
|
### Added
|
||||||
|
- N/A
|
||||||
|
### Changed
|
||||||
|
- Upgraded to PHPUnit 6 (#2)
|
||||||
|
### Fixed
|
||||||
|
- Refactored timezones to deal with some inconsistent behavior (#3)
|
||||||
|
- Allow ranges and lists in same expression (#5)
|
||||||
|
- Fixed regression where literals were not converted to their numerical counterpart (#)
|
||||||
|
|
||||||
|
## [2.0.0] - 2017-10-12
|
||||||
|
### Added
|
||||||
|
- N/A
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Dropped support for PHP 5.x
|
||||||
|
- Dropped support for the YEAR field, as it was not part of the cron standard
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Reworked validation for all the field types
|
||||||
|
- Stepping should now work for 1-indexed fields like Month (#153)
|
||||||
|
|
||||||
|
## [1.2.0] - 2017-01-22
|
||||||
|
### Added
|
||||||
|
- Added IDE, CodeSniffer, and StyleCI.IO support
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Switched to PSR-4 Autoloading
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- 0 step expressions are handled better
|
||||||
|
- Fixed `DayOfMonth` validation to be more strict
|
||||||
|
- Typos
|
||||||
|
|
||||||
|
## [1.1.0] - 2016-01-26
|
||||||
|
### Added
|
||||||
|
- Support for non-hourly offset timezones
|
||||||
|
- Checks for valid expressions
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Max Iterations no longer hardcoded for `getRunDate()`
|
||||||
|
- Supports DateTimeImmutable for newer PHP verions
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed looping bug for PHP 7 when determining the last specified weekday of a month
|
||||||
|
|
||||||
|
## [1.0.3] - 2013-11-23
|
||||||
|
### Added
|
||||||
|
- Now supports expressions with any number of extra spaces, tabs, or newlines
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Using static instead of self in `CronExpression::factory`
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixes issue [#28](https://github.com/mtdowling/cron-expression/issues/28) where PHP increments of ranges were failing due to PHP casting hyphens to 0
|
||||||
|
- Only set default timezone if the given $currentTime is not a DateTime instance ([#34](https://github.com/mtdowling/cron-expression/issues/34))
|
19
paragonik-backend/vendor/dragonmantank/cron-expression/LICENSE
vendored
Normal file
19
paragonik-backend/vendor/dragonmantank/cron-expression/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2011 Michael Dowling <mtdowling@gmail.com>, 2016 Chris Tankersley <chris@ctankersley.com>, and contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
78
paragonik-backend/vendor/dragonmantank/cron-expression/README.md
vendored
Normal file
78
paragonik-backend/vendor/dragonmantank/cron-expression/README.md
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
PHP Cron Expression Parser
|
||||||
|
==========================
|
||||||
|
|
||||||
|
[![Latest Stable Version](https://poser.pugx.org/dragonmantank/cron-expression/v/stable.png)](https://packagist.org/packages/dragonmantank/cron-expression) [![Total Downloads](https://poser.pugx.org/dragonmantank/cron-expression/downloads.png)](https://packagist.org/packages/dragonmantank/cron-expression) [![Build Status](https://secure.travis-ci.org/dragonmantank/cron-expression.png)](http://travis-ci.org/dragonmantank/cron-expression)
|
||||||
|
|
||||||
|
The PHP cron expression parser can parse a CRON expression, determine if it is
|
||||||
|
due to run, calculate the next run date of the expression, and calculate the previous
|
||||||
|
run date of the expression. You can calculate dates far into the future or past by
|
||||||
|
skipping **n** number of matching dates.
|
||||||
|
|
||||||
|
The parser can handle increments of ranges (e.g. */12, 2-59/3), intervals (e.g. 0-9),
|
||||||
|
lists (e.g. 1,2,3), **W** to find the nearest weekday for a given day of the month, **L** to
|
||||||
|
find the last day of the month, **L** to find the last given weekday of a month, and hash
|
||||||
|
(#) to find the nth weekday of a given month.
|
||||||
|
|
||||||
|
More information about this fork can be found in the blog post [here](http://ctankersley.com/2017/10/12/cron-expression-update/). tl;dr - v2.0.0 is a major breaking change, and @dragonmantank can better take care of the project in a separate fork.
|
||||||
|
|
||||||
|
Installing
|
||||||
|
==========
|
||||||
|
|
||||||
|
Add the dependency to your project:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer require dragonmantank/cron-expression
|
||||||
|
```
|
||||||
|
|
||||||
|
Usage
|
||||||
|
=====
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '/vendor/autoload.php';
|
||||||
|
|
||||||
|
// Works with predefined scheduling definitions
|
||||||
|
$cron = Cron\CronExpression::factory('@daily');
|
||||||
|
$cron->isDue();
|
||||||
|
echo $cron->getNextRunDate()->format('Y-m-d H:i:s');
|
||||||
|
echo $cron->getPreviousRunDate()->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
// Works with complex expressions
|
||||||
|
$cron = Cron\CronExpression::factory('3-59/15 6-12 */15 1 2-5');
|
||||||
|
echo $cron->getNextRunDate()->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
// Calculate a run date two iterations into the future
|
||||||
|
$cron = Cron\CronExpression::factory('@daily');
|
||||||
|
echo $cron->getNextRunDate(null, 2)->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
// Calculate a run date relative to a specific time
|
||||||
|
$cron = Cron\CronExpression::factory('@monthly');
|
||||||
|
echo $cron->getNextRunDate('2010-01-12 00:00:00')->format('Y-m-d H:i:s');
|
||||||
|
```
|
||||||
|
|
||||||
|
CRON Expressions
|
||||||
|
================
|
||||||
|
|
||||||
|
A CRON expression is a string representing the schedule for a particular command to execute. The parts of a CRON schedule are as follows:
|
||||||
|
|
||||||
|
* * * * *
|
||||||
|
- - - - -
|
||||||
|
| | | | |
|
||||||
|
| | | | |
|
||||||
|
| | | | +----- day of week (0 - 7) (Sunday=0 or 7)
|
||||||
|
| | | +---------- month (1 - 12)
|
||||||
|
| | +--------------- day of month (1 - 31)
|
||||||
|
| +-------------------- hour (0 - 23)
|
||||||
|
+------------------------- min (0 - 59)
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
============
|
||||||
|
|
||||||
|
- PHP 7.0+
|
||||||
|
- PHPUnit is required to run the unit tests
|
||||||
|
- Composer is required to run the unit tests
|
||||||
|
|
||||||
|
Projects that Use cron-expression
|
||||||
|
=================================
|
||||||
|
* Part of the [Laravel Framework](https://github.com/laravel/framework/)
|
||||||
|
* Available as a [Symfony Bundle - setono/cron-expression-bundle](https://github.com/Setono/CronExpressionBundle)
|
40
paragonik-backend/vendor/dragonmantank/cron-expression/composer.json
vendored
Normal file
40
paragonik-backend/vendor/dragonmantank/cron-expression/composer.json
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "dragonmantank/cron-expression",
|
||||||
|
"type": "library",
|
||||||
|
"description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
|
||||||
|
"keywords": ["cron", "schedule"],
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Michael Dowling",
|
||||||
|
"email": "mtdowling@gmail.com",
|
||||||
|
"homepage": "https://github.com/mtdowling"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Chris Tankersley",
|
||||||
|
"email": "chris@ctankersley.com",
|
||||||
|
"homepage": "https://github.com/dragonmantank"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": "^7.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^6.4|^7.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Cron\\": "src/Cron/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"Tests\\": "tests/Cron/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.3-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
286
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/AbstractField.php
vendored
Normal file
286
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/AbstractField.php
vendored
Normal file
@ -0,0 +1,286 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract CRON expression field
|
||||||
|
*/
|
||||||
|
abstract class AbstractField implements FieldInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Full range of values that are allowed for this field type
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $fullRange = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Literal values we need to convert to integers
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $literals = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start value of the full range
|
||||||
|
* @var integer
|
||||||
|
*/
|
||||||
|
protected $rangeStart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* End value of the full range
|
||||||
|
* @var integer
|
||||||
|
*/
|
||||||
|
protected $rangeEnd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->fullRange = range($this->rangeStart, $this->rangeEnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check to see if a field is satisfied by a value
|
||||||
|
*
|
||||||
|
* @param string $dateValue Date value to check
|
||||||
|
* @param string $value Value to test
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isSatisfied($dateValue, $value)
|
||||||
|
{
|
||||||
|
if ($this->isIncrementsOfRanges($value)) {
|
||||||
|
return $this->isInIncrementsOfRanges($dateValue, $value);
|
||||||
|
} elseif ($this->isRange($value)) {
|
||||||
|
return $this->isInRange($dateValue, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $value == '*' || $dateValue == $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a value is a range
|
||||||
|
*
|
||||||
|
* @param string $value Value to test
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isRange($value)
|
||||||
|
{
|
||||||
|
return strpos($value, '-') !== false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a value is an increments of ranges
|
||||||
|
*
|
||||||
|
* @param string $value Value to test
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isIncrementsOfRanges($value)
|
||||||
|
{
|
||||||
|
return strpos($value, '/') !== false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if a value is within a range
|
||||||
|
*
|
||||||
|
* @param string $dateValue Set date value
|
||||||
|
* @param string $value Value to test
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isInRange($dateValue, $value)
|
||||||
|
{
|
||||||
|
$parts = array_map(function($value) {
|
||||||
|
$value = trim($value);
|
||||||
|
$value = $this->convertLiterals($value);
|
||||||
|
return $value;
|
||||||
|
},
|
||||||
|
explode('-', $value, 2)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
return $dateValue >= $parts[0] && $dateValue <= $parts[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if a value is within an increments of ranges (offset[-to]/step size)
|
||||||
|
*
|
||||||
|
* @param string $dateValue Set date value
|
||||||
|
* @param string $value Value to test
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isInIncrementsOfRanges($dateValue, $value)
|
||||||
|
{
|
||||||
|
$chunks = array_map('trim', explode('/', $value, 2));
|
||||||
|
$range = $chunks[0];
|
||||||
|
$step = isset($chunks[1]) ? $chunks[1] : 0;
|
||||||
|
|
||||||
|
// No step or 0 steps aren't cool
|
||||||
|
if (is_null($step) || '0' === $step || 0 === $step) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expand the * to a full range
|
||||||
|
if ('*' == $range) {
|
||||||
|
$range = $this->rangeStart . '-' . $this->rangeEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate the requested small range
|
||||||
|
$rangeChunks = explode('-', $range, 2);
|
||||||
|
$rangeStart = $rangeChunks[0];
|
||||||
|
$rangeEnd = isset($rangeChunks[1]) ? $rangeChunks[1] : $rangeStart;
|
||||||
|
|
||||||
|
if ($rangeStart < $this->rangeStart || $rangeStart > $this->rangeEnd || $rangeStart > $rangeEnd) {
|
||||||
|
throw new \OutOfRangeException('Invalid range start requested');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($rangeEnd < $this->rangeStart || $rangeEnd > $this->rangeEnd || $rangeEnd < $rangeStart) {
|
||||||
|
throw new \OutOfRangeException('Invalid range end requested');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Steps larger than the range need to wrap around and be handled slightly differently than smaller steps
|
||||||
|
if ($step >= $this->rangeEnd) {
|
||||||
|
$thisRange = [$this->fullRange[$step % count($this->fullRange)]];
|
||||||
|
} else {
|
||||||
|
$thisRange = range($rangeStart, $rangeEnd, $step);
|
||||||
|
}
|
||||||
|
|
||||||
|
return in_array($dateValue, $thisRange);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a range of values for the given cron expression
|
||||||
|
*
|
||||||
|
* @param string $expression The expression to evaluate
|
||||||
|
* @param int $max Maximum offset for range
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getRangeForExpression($expression, $max)
|
||||||
|
{
|
||||||
|
$values = array();
|
||||||
|
$expression = $this->convertLiterals($expression);
|
||||||
|
|
||||||
|
if (strpos($expression, ',') !== false) {
|
||||||
|
$ranges = explode(',', $expression);
|
||||||
|
$values = [];
|
||||||
|
foreach ($ranges as $range) {
|
||||||
|
$expanded = $this->getRangeForExpression($range, $this->rangeEnd);
|
||||||
|
$values = array_merge($values, $expanded);
|
||||||
|
}
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->isRange($expression) || $this->isIncrementsOfRanges($expression)) {
|
||||||
|
if (!$this->isIncrementsOfRanges($expression)) {
|
||||||
|
list ($offset, $to) = explode('-', $expression);
|
||||||
|
$offset = $this->convertLiterals($offset);
|
||||||
|
$to = $this->convertLiterals($to);
|
||||||
|
$stepSize = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$range = array_map('trim', explode('/', $expression, 2));
|
||||||
|
$stepSize = isset($range[1]) ? $range[1] : 0;
|
||||||
|
$range = $range[0];
|
||||||
|
$range = explode('-', $range, 2);
|
||||||
|
$offset = $range[0];
|
||||||
|
$to = isset($range[1]) ? $range[1] : $max;
|
||||||
|
}
|
||||||
|
$offset = $offset == '*' ? $this->rangeStart : $offset;
|
||||||
|
if ($stepSize >= $this->rangeEnd) {
|
||||||
|
$values = [$this->fullRange[$stepSize % count($this->fullRange)]];
|
||||||
|
} else {
|
||||||
|
for ($i = $offset; $i <= $to; $i += $stepSize) {
|
||||||
|
$values[] = (int)$i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sort($values);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$values = array($expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert literal
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function convertLiterals($value)
|
||||||
|
{
|
||||||
|
if (count($this->literals)) {
|
||||||
|
$key = array_search($value, $this->literals);
|
||||||
|
if ($key !== false) {
|
||||||
|
return (string) $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks to see if a value is valid for the field
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function validate($value)
|
||||||
|
{
|
||||||
|
$value = $this->convertLiterals($value);
|
||||||
|
|
||||||
|
// All fields allow * as a valid value
|
||||||
|
if ('*' === $value) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($value, '/') !== false) {
|
||||||
|
list($range, $step) = explode('/', $value);
|
||||||
|
return $this->validate($range) && filter_var($step, FILTER_VALIDATE_INT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate each chunk of a list individually
|
||||||
|
if (strpos($value, ',') !== false) {
|
||||||
|
foreach (explode(',', $value) as $listItem) {
|
||||||
|
if (!$this->validate($listItem)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($value, '-') !== false) {
|
||||||
|
if (substr_count($value, '-') > 1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$chunks = explode('-', $value);
|
||||||
|
$chunks[0] = $this->convertLiterals($chunks[0]);
|
||||||
|
$chunks[1] = $this->convertLiterals($chunks[1]);
|
||||||
|
|
||||||
|
if ('*' == $chunks[0] || '*' == $chunks[1]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->validate($chunks[0]) && $this->validate($chunks[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_numeric($value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_float($value) || strpos($value, '.') !== false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We should have a numeric by now, so coerce this into an integer
|
||||||
|
$value = (int) $value;
|
||||||
|
|
||||||
|
return in_array($value, $this->fullRange, true);
|
||||||
|
}
|
||||||
|
}
|
413
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/CronExpression.php
vendored
Normal file
413
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/CronExpression.php
vendored
Normal file
@ -0,0 +1,413 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron;
|
||||||
|
|
||||||
|
use DateTime;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use DateTimeInterface;
|
||||||
|
use DateTimeZone;
|
||||||
|
use Exception;
|
||||||
|
use InvalidArgumentException;
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CRON expression parser that can determine whether or not a CRON expression is
|
||||||
|
* due to run, the next run date and previous run date of a CRON expression.
|
||||||
|
* The determinations made by this class are accurate if checked run once per
|
||||||
|
* minute (seconds are dropped from date time comparisons).
|
||||||
|
*
|
||||||
|
* Schedule parts must map to:
|
||||||
|
* minute [0-59], hour [0-23], day of month, month [1-12|JAN-DEC], day of week
|
||||||
|
* [1-7|MON-SUN], and an optional year.
|
||||||
|
*
|
||||||
|
* @link http://en.wikipedia.org/wiki/Cron
|
||||||
|
*/
|
||||||
|
class CronExpression
|
||||||
|
{
|
||||||
|
const MINUTE = 0;
|
||||||
|
const HOUR = 1;
|
||||||
|
const DAY = 2;
|
||||||
|
const MONTH = 3;
|
||||||
|
const WEEKDAY = 4;
|
||||||
|
const YEAR = 5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array CRON expression parts
|
||||||
|
*/
|
||||||
|
private $cronParts;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var FieldFactory CRON field factory
|
||||||
|
*/
|
||||||
|
private $fieldFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int Max iteration count when searching for next run date
|
||||||
|
*/
|
||||||
|
private $maxIterationCount = 1000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array Order in which to test of cron parts
|
||||||
|
*/
|
||||||
|
private static $order = array(self::YEAR, self::MONTH, self::DAY, self::WEEKDAY, self::HOUR, self::MINUTE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory method to create a new CronExpression.
|
||||||
|
*
|
||||||
|
* @param string $expression The CRON expression to create. There are
|
||||||
|
* several special predefined values which can be used to substitute the
|
||||||
|
* CRON expression:
|
||||||
|
*
|
||||||
|
* `@yearly`, `@annually` - Run once a year, midnight, Jan. 1 - 0 0 1 1 *
|
||||||
|
* `@monthly` - Run once a month, midnight, first of month - 0 0 1 * *
|
||||||
|
* `@weekly` - Run once a week, midnight on Sun - 0 0 * * 0
|
||||||
|
* `@daily` - Run once a day, midnight - 0 0 * * *
|
||||||
|
* `@hourly` - Run once an hour, first minute - 0 * * * *
|
||||||
|
* @param FieldFactory|null $fieldFactory Field factory to use
|
||||||
|
*
|
||||||
|
* @return CronExpression
|
||||||
|
*/
|
||||||
|
public static function factory($expression, FieldFactory $fieldFactory = null)
|
||||||
|
{
|
||||||
|
$mappings = array(
|
||||||
|
'@yearly' => '0 0 1 1 *',
|
||||||
|
'@annually' => '0 0 1 1 *',
|
||||||
|
'@monthly' => '0 0 1 * *',
|
||||||
|
'@weekly' => '0 0 * * 0',
|
||||||
|
'@daily' => '0 0 * * *',
|
||||||
|
'@hourly' => '0 * * * *'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isset($mappings[$expression])) {
|
||||||
|
$expression = $mappings[$expression];
|
||||||
|
}
|
||||||
|
|
||||||
|
return new static($expression, $fieldFactory ?: new FieldFactory());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate a CronExpression.
|
||||||
|
*
|
||||||
|
* @param string $expression The CRON expression to validate.
|
||||||
|
*
|
||||||
|
* @return bool True if a valid CRON expression was passed. False if not.
|
||||||
|
* @see \Cron\CronExpression::factory
|
||||||
|
*/
|
||||||
|
public static function isValidExpression($expression)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
self::factory($expression);
|
||||||
|
} catch (InvalidArgumentException $e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse a CRON expression
|
||||||
|
*
|
||||||
|
* @param string $expression CRON expression (e.g. '8 * * * *')
|
||||||
|
* @param FieldFactory|null $fieldFactory Factory to create cron fields
|
||||||
|
*/
|
||||||
|
public function __construct($expression, FieldFactory $fieldFactory = null)
|
||||||
|
{
|
||||||
|
$this->fieldFactory = $fieldFactory;
|
||||||
|
$this->setExpression($expression);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set or change the CRON expression
|
||||||
|
*
|
||||||
|
* @param string $value CRON expression (e.g. 8 * * * *)
|
||||||
|
*
|
||||||
|
* @return CronExpression
|
||||||
|
* @throws \InvalidArgumentException if not a valid CRON expression
|
||||||
|
*/
|
||||||
|
public function setExpression($value)
|
||||||
|
{
|
||||||
|
$this->cronParts = preg_split('/\s/', $value, -1, PREG_SPLIT_NO_EMPTY);
|
||||||
|
if (count($this->cronParts) < 5) {
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
$value . ' is not a valid CRON expression'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->cronParts as $position => $part) {
|
||||||
|
$this->setPart($position, $part);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set part of the CRON expression
|
||||||
|
*
|
||||||
|
* @param int $position The position of the CRON expression to set
|
||||||
|
* @param string $value The value to set
|
||||||
|
*
|
||||||
|
* @return CronExpression
|
||||||
|
* @throws \InvalidArgumentException if the value is not valid for the part
|
||||||
|
*/
|
||||||
|
public function setPart($position, $value)
|
||||||
|
{
|
||||||
|
if (!$this->fieldFactory->getField($position)->validate($value)) {
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
'Invalid CRON field value ' . $value . ' at position ' . $position
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->cronParts[$position] = $value;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set max iteration count for searching next run dates
|
||||||
|
*
|
||||||
|
* @param int $maxIterationCount Max iteration count when searching for next run date
|
||||||
|
*
|
||||||
|
* @return CronExpression
|
||||||
|
*/
|
||||||
|
public function setMaxIterationCount($maxIterationCount)
|
||||||
|
{
|
||||||
|
$this->maxIterationCount = $maxIterationCount;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a next run date relative to the current date or a specific date
|
||||||
|
*
|
||||||
|
* @param string|\DateTimeInterface $currentTime Relative calculation date
|
||||||
|
* @param int $nth Number of matches to skip before returning a
|
||||||
|
* matching next run date. 0, the default, will return the
|
||||||
|
* current date and time if the next run date falls on the
|
||||||
|
* current date and time. Setting this value to 1 will
|
||||||
|
* skip the first match and go to the second match.
|
||||||
|
* Setting this value to 2 will skip the first 2
|
||||||
|
* matches and so on.
|
||||||
|
* @param bool $allowCurrentDate Set to TRUE to return the current date if
|
||||||
|
* it matches the cron expression.
|
||||||
|
* @param null|string $timeZone TimeZone to use instead of the system default
|
||||||
|
*
|
||||||
|
* @return \DateTime
|
||||||
|
* @throws \RuntimeException on too many iterations
|
||||||
|
*/
|
||||||
|
public function getNextRunDate($currentTime = 'now', $nth = 0, $allowCurrentDate = false, $timeZone = null)
|
||||||
|
{
|
||||||
|
return $this->getRunDate($currentTime, $nth, false, $allowCurrentDate, $timeZone);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a previous run date relative to the current date or a specific date
|
||||||
|
*
|
||||||
|
* @param string|\DateTimeInterface $currentTime Relative calculation date
|
||||||
|
* @param int $nth Number of matches to skip before returning
|
||||||
|
* @param bool $allowCurrentDate Set to TRUE to return the
|
||||||
|
* current date if it matches the cron expression
|
||||||
|
* @param null|string $timeZone TimeZone to use instead of the system default
|
||||||
|
*
|
||||||
|
* @return \DateTime
|
||||||
|
* @throws \RuntimeException on too many iterations
|
||||||
|
* @see \Cron\CronExpression::getNextRunDate
|
||||||
|
*/
|
||||||
|
public function getPreviousRunDate($currentTime = 'now', $nth = 0, $allowCurrentDate = false, $timeZone = null)
|
||||||
|
{
|
||||||
|
return $this->getRunDate($currentTime, $nth, true, $allowCurrentDate, $timeZone);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get multiple run dates starting at the current date or a specific date
|
||||||
|
*
|
||||||
|
* @param int $total Set the total number of dates to calculate
|
||||||
|
* @param string|\DateTimeInterface $currentTime Relative calculation date
|
||||||
|
* @param bool $invert Set to TRUE to retrieve previous dates
|
||||||
|
* @param bool $allowCurrentDate Set to TRUE to return the
|
||||||
|
* current date if it matches the cron expression
|
||||||
|
* @param null|string $timeZone TimeZone to use instead of the system default
|
||||||
|
*
|
||||||
|
* @return \DateTime[] Returns an array of run dates
|
||||||
|
*/
|
||||||
|
public function getMultipleRunDates($total, $currentTime = 'now', $invert = false, $allowCurrentDate = false, $timeZone = null)
|
||||||
|
{
|
||||||
|
$matches = array();
|
||||||
|
for ($i = 0; $i < max(0, $total); $i++) {
|
||||||
|
try {
|
||||||
|
$matches[] = $this->getRunDate($currentTime, $i, $invert, $allowCurrentDate, $timeZone);
|
||||||
|
} catch (RuntimeException $e) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $matches;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all or part of the CRON expression
|
||||||
|
*
|
||||||
|
* @param string $part Specify the part to retrieve or NULL to get the full
|
||||||
|
* cron schedule string.
|
||||||
|
*
|
||||||
|
* @return string|null Returns the CRON expression, a part of the
|
||||||
|
* CRON expression, or NULL if the part was specified but not found
|
||||||
|
*/
|
||||||
|
public function getExpression($part = null)
|
||||||
|
{
|
||||||
|
if (null === $part) {
|
||||||
|
return implode(' ', $this->cronParts);
|
||||||
|
} elseif (array_key_exists($part, $this->cronParts)) {
|
||||||
|
return $this->cronParts[$part];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to output the full expression.
|
||||||
|
*
|
||||||
|
* @return string Full CRON expression
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return $this->getExpression();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the cron is due to run based on the current date or a
|
||||||
|
* specific date. This method assumes that the current number of
|
||||||
|
* seconds are irrelevant, and should be called once per minute.
|
||||||
|
*
|
||||||
|
* @param string|\DateTimeInterface $currentTime Relative calculation date
|
||||||
|
* @param null|string $timeZone TimeZone to use instead of the system default
|
||||||
|
*
|
||||||
|
* @return bool Returns TRUE if the cron is due to run or FALSE if not
|
||||||
|
*/
|
||||||
|
public function isDue($currentTime = 'now', $timeZone = null)
|
||||||
|
{
|
||||||
|
$timeZone = $this->determineTimeZone($currentTime, $timeZone);
|
||||||
|
|
||||||
|
if ('now' === $currentTime) {
|
||||||
|
$currentTime = new DateTime();
|
||||||
|
} elseif ($currentTime instanceof DateTime) {
|
||||||
|
//
|
||||||
|
} elseif ($currentTime instanceof DateTimeImmutable) {
|
||||||
|
$currentTime = DateTime::createFromFormat('U', $currentTime->format('U'));
|
||||||
|
} else {
|
||||||
|
$currentTime = new DateTime($currentTime);
|
||||||
|
}
|
||||||
|
$currentTime->setTimeZone(new DateTimeZone($timeZone));
|
||||||
|
|
||||||
|
// drop the seconds to 0
|
||||||
|
$currentTime = DateTime::createFromFormat('Y-m-d H:i', $currentTime->format('Y-m-d H:i'));
|
||||||
|
|
||||||
|
try {
|
||||||
|
return $this->getNextRunDate($currentTime, 0, true)->getTimestamp() === $currentTime->getTimestamp();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the next or previous run date of the expression relative to a date
|
||||||
|
*
|
||||||
|
* @param string|\DateTimeInterface $currentTime Relative calculation date
|
||||||
|
* @param int $nth Number of matches to skip before returning
|
||||||
|
* @param bool $invert Set to TRUE to go backwards in time
|
||||||
|
* @param bool $allowCurrentDate Set to TRUE to return the
|
||||||
|
* current date if it matches the cron expression
|
||||||
|
* @param string|null $timeZone TimeZone to use instead of the system default
|
||||||
|
*
|
||||||
|
* @return \DateTime
|
||||||
|
* @throws \RuntimeException on too many iterations
|
||||||
|
*/
|
||||||
|
protected function getRunDate($currentTime = null, $nth = 0, $invert = false, $allowCurrentDate = false, $timeZone = null)
|
||||||
|
{
|
||||||
|
$timeZone = $this->determineTimeZone($currentTime, $timeZone);
|
||||||
|
|
||||||
|
if ($currentTime instanceof DateTime) {
|
||||||
|
$currentDate = clone $currentTime;
|
||||||
|
} elseif ($currentTime instanceof DateTimeImmutable) {
|
||||||
|
$currentDate = DateTime::createFromFormat('U', $currentTime->format('U'));
|
||||||
|
} else {
|
||||||
|
$currentDate = new DateTime($currentTime ?: 'now');
|
||||||
|
}
|
||||||
|
|
||||||
|
$currentDate->setTimeZone(new DateTimeZone($timeZone));
|
||||||
|
$currentDate->setTime($currentDate->format('H'), $currentDate->format('i'), 0);
|
||||||
|
$nextRun = clone $currentDate;
|
||||||
|
$nth = (int) $nth;
|
||||||
|
|
||||||
|
// We don't have to satisfy * or null fields
|
||||||
|
$parts = array();
|
||||||
|
$fields = array();
|
||||||
|
foreach (self::$order as $position) {
|
||||||
|
$part = $this->getExpression($position);
|
||||||
|
if (null === $part || '*' === $part) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$parts[$position] = $part;
|
||||||
|
$fields[$position] = $this->fieldFactory->getField($position);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set a hard limit to bail on an impossible date
|
||||||
|
for ($i = 0; $i < $this->maxIterationCount; $i++) {
|
||||||
|
|
||||||
|
foreach ($parts as $position => $part) {
|
||||||
|
$satisfied = false;
|
||||||
|
// Get the field object used to validate this part
|
||||||
|
$field = $fields[$position];
|
||||||
|
// Check if this is singular or a list
|
||||||
|
if (strpos($part, ',') === false) {
|
||||||
|
$satisfied = $field->isSatisfiedBy($nextRun, $part);
|
||||||
|
} else {
|
||||||
|
foreach (array_map('trim', explode(',', $part)) as $listPart) {
|
||||||
|
if ($field->isSatisfiedBy($nextRun, $listPart)) {
|
||||||
|
$satisfied = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the field is not satisfied, then start over
|
||||||
|
if (!$satisfied) {
|
||||||
|
$field->increment($nextRun, $invert, $part);
|
||||||
|
continue 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip this match if needed
|
||||||
|
if ((!$allowCurrentDate && $nextRun == $currentDate) || --$nth > -1) {
|
||||||
|
$this->fieldFactory->getField(0)->increment($nextRun, $invert, isset($parts[0]) ? $parts[0] : null);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $nextRun;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
throw new RuntimeException('Impossible CRON expression');
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Workout what timeZone should be used.
|
||||||
|
*
|
||||||
|
* @param string|\DateTimeInterface $currentTime Relative calculation date
|
||||||
|
* @param string|null $timeZone TimeZone to use instead of the system default
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function determineTimeZone($currentTime, $timeZone)
|
||||||
|
{
|
||||||
|
if (! is_null($timeZone)) {
|
||||||
|
return $timeZone;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($currentTime instanceOf DateTimeInterface) {
|
||||||
|
return $currentTime->getTimeZone()->getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
return date_default_timezone_get();
|
||||||
|
}
|
||||||
|
}
|
145
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php
vendored
Normal file
145
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php
vendored
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron;
|
||||||
|
|
||||||
|
use DateTime;
|
||||||
|
use DateTimeInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Day of month field. Allows: * , / - ? L W
|
||||||
|
*
|
||||||
|
* 'L' stands for "last" and specifies the last day of the month.
|
||||||
|
*
|
||||||
|
* The 'W' character is used to specify the weekday (Monday-Friday) nearest the
|
||||||
|
* given day. As an example, if you were to specify "15W" as the value for the
|
||||||
|
* day-of-month field, the meaning is: "the nearest weekday to the 15th of the
|
||||||
|
* month". So if the 15th is a Saturday, the trigger will fire on Friday the
|
||||||
|
* 14th. If the 15th is a Sunday, the trigger will fire on Monday the 16th. If
|
||||||
|
* the 15th is a Tuesday, then it will fire on Tuesday the 15th. However if you
|
||||||
|
* specify "1W" as the value for day-of-month, and the 1st is a Saturday, the
|
||||||
|
* trigger will fire on Monday the 3rd, as it will not 'jump' over the boundary
|
||||||
|
* of a month's days. The 'W' character can only be specified when the
|
||||||
|
* day-of-month is a single day, not a range or list of days.
|
||||||
|
*
|
||||||
|
* @author Michael Dowling <mtdowling@gmail.com>
|
||||||
|
*/
|
||||||
|
class DayOfMonthField extends AbstractField
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $rangeStart = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $rangeEnd = 31;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the nearest day of the week for a given day in a month
|
||||||
|
*
|
||||||
|
* @param int $currentYear Current year
|
||||||
|
* @param int $currentMonth Current month
|
||||||
|
* @param int $targetDay Target day of the month
|
||||||
|
*
|
||||||
|
* @return \DateTime Returns the nearest date
|
||||||
|
*/
|
||||||
|
private static function getNearestWeekday($currentYear, $currentMonth, $targetDay)
|
||||||
|
{
|
||||||
|
$tday = str_pad($targetDay, 2, '0', STR_PAD_LEFT);
|
||||||
|
$target = DateTime::createFromFormat('Y-m-d', "$currentYear-$currentMonth-$tday");
|
||||||
|
$currentWeekday = (int) $target->format('N');
|
||||||
|
|
||||||
|
if ($currentWeekday < 6) {
|
||||||
|
return $target;
|
||||||
|
}
|
||||||
|
|
||||||
|
$lastDayOfMonth = $target->format('t');
|
||||||
|
|
||||||
|
foreach (array(-1, 1, -2, 2) as $i) {
|
||||||
|
$adjusted = $targetDay + $i;
|
||||||
|
if ($adjusted > 0 && $adjusted <= $lastDayOfMonth) {
|
||||||
|
$target->setDate($currentYear, $currentMonth, $adjusted);
|
||||||
|
if ($target->format('N') < 6 && $target->format('m') == $currentMonth) {
|
||||||
|
return $target;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function isSatisfiedBy(DateTimeInterface $date, $value)
|
||||||
|
{
|
||||||
|
// ? states that the field value is to be skipped
|
||||||
|
if ($value == '?') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fieldValue = $date->format('d');
|
||||||
|
|
||||||
|
// Check to see if this is the last day of the month
|
||||||
|
if ($value == 'L') {
|
||||||
|
return $fieldValue == $date->format('t');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check to see if this is the nearest weekday to a particular value
|
||||||
|
if (strpos($value, 'W')) {
|
||||||
|
// Parse the target day
|
||||||
|
$targetDay = substr($value, 0, strpos($value, 'W'));
|
||||||
|
// Find out if the current day is the nearest day of the week
|
||||||
|
return $date->format('j') == self::getNearestWeekday(
|
||||||
|
$date->format('Y'),
|
||||||
|
$date->format('m'),
|
||||||
|
$targetDay
|
||||||
|
)->format('j');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->isSatisfied($date->format('d'), $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*
|
||||||
|
* @param \DateTime|\DateTimeImmutable &$date
|
||||||
|
*/
|
||||||
|
public function increment(DateTimeInterface &$date, $invert = false)
|
||||||
|
{
|
||||||
|
if ($invert) {
|
||||||
|
$date = $date->modify('previous day')->setTime(23, 59);
|
||||||
|
} else {
|
||||||
|
$date = $date->modify('next day')->setTime(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function validate($value)
|
||||||
|
{
|
||||||
|
$basicChecks = parent::validate($value);
|
||||||
|
|
||||||
|
// Validate that a list don't have W or L
|
||||||
|
if (strpos($value, ',') !== false && (strpos($value, 'W') !== false || strpos($value, 'L') !== false)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$basicChecks) {
|
||||||
|
|
||||||
|
if ($value === 'L') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preg_match('/^(.*)W$/', $value, $matches)) {
|
||||||
|
return $this->validate($matches[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $basicChecks;
|
||||||
|
}
|
||||||
|
}
|
196
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php
vendored
Normal file
196
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php
vendored
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron;
|
||||||
|
|
||||||
|
use DateTime;
|
||||||
|
use DateTimeInterface;
|
||||||
|
use InvalidArgumentException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Day of week field. Allows: * / , - ? L #
|
||||||
|
*
|
||||||
|
* Days of the week can be represented as a number 0-7 (0|7 = Sunday)
|
||||||
|
* or as a three letter string: SUN, MON, TUE, WED, THU, FRI, SAT.
|
||||||
|
*
|
||||||
|
* 'L' stands for "last". It allows you to specify constructs such as
|
||||||
|
* "the last Friday" of a given month.
|
||||||
|
*
|
||||||
|
* '#' is allowed for the day-of-week field, and must be followed by a
|
||||||
|
* number between one and five. It allows you to specify constructs such as
|
||||||
|
* "the second Friday" of a given month.
|
||||||
|
*/
|
||||||
|
class DayOfWeekField extends AbstractField
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $rangeStart = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $rangeEnd = 7;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array Weekday range
|
||||||
|
*/
|
||||||
|
protected $nthRange;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $literals = [1 => 'MON', 2 => 'TUE', 3 => 'WED', 4 => 'THU', 5 => 'FRI', 6 => 'SAT', 7 => 'SUN'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->nthRange = range(1, 5);
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*
|
||||||
|
* @param \DateTime|\DateTimeImmutable $date
|
||||||
|
*/
|
||||||
|
public function isSatisfiedBy(DateTimeInterface $date, $value)
|
||||||
|
{
|
||||||
|
if ($value == '?') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert text day of the week values to integers
|
||||||
|
$value = $this->convertLiterals($value);
|
||||||
|
|
||||||
|
$currentYear = $date->format('Y');
|
||||||
|
$currentMonth = $date->format('m');
|
||||||
|
$lastDayOfMonth = $date->format('t');
|
||||||
|
|
||||||
|
// Find out if this is the last specific weekday of the month
|
||||||
|
if (strpos($value, 'L')) {
|
||||||
|
$weekday = $this->convertLiterals(substr($value, 0, strpos($value, 'L')));
|
||||||
|
$weekday = str_replace('7', '0', $weekday);
|
||||||
|
|
||||||
|
$tdate = clone $date;
|
||||||
|
$tdate = $tdate->setDate($currentYear, $currentMonth, $lastDayOfMonth);
|
||||||
|
while ($tdate->format('w') != $weekday) {
|
||||||
|
$tdateClone = new DateTime();
|
||||||
|
$tdate = $tdateClone
|
||||||
|
->setTimezone($tdate->getTimezone())
|
||||||
|
->setDate($currentYear, $currentMonth, --$lastDayOfMonth);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $date->format('j') == $lastDayOfMonth;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle # hash tokens
|
||||||
|
if (strpos($value, '#')) {
|
||||||
|
list($weekday, $nth) = explode('#', $value);
|
||||||
|
|
||||||
|
if (!is_numeric($nth)) {
|
||||||
|
throw new InvalidArgumentException("Hashed weekdays must be numeric, {$nth} given");
|
||||||
|
} else {
|
||||||
|
$nth = (int) $nth;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 0 and 7 are both Sunday, however 7 matches date('N') format ISO-8601
|
||||||
|
if ($weekday === '0') {
|
||||||
|
$weekday = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
$weekday = $this->convertLiterals($weekday);
|
||||||
|
|
||||||
|
// Validate the hash fields
|
||||||
|
if ($weekday < 0 || $weekday > 7) {
|
||||||
|
throw new InvalidArgumentException("Weekday must be a value between 0 and 7. {$weekday} given");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!in_array($nth, $this->nthRange)) {
|
||||||
|
throw new InvalidArgumentException("There are never more than 5 or less than 1 of a given weekday in a month, {$nth} given");
|
||||||
|
}
|
||||||
|
|
||||||
|
// The current weekday must match the targeted weekday to proceed
|
||||||
|
if ($date->format('N') != $weekday) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tdate = clone $date;
|
||||||
|
$tdate = $tdate->setDate($currentYear, $currentMonth, 1);
|
||||||
|
$dayCount = 0;
|
||||||
|
$currentDay = 1;
|
||||||
|
while ($currentDay < $lastDayOfMonth + 1) {
|
||||||
|
if ($tdate->format('N') == $weekday) {
|
||||||
|
if (++$dayCount >= $nth) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$tdate = $tdate->setDate($currentYear, $currentMonth, ++$currentDay);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $date->format('j') == $currentDay;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle day of the week values
|
||||||
|
if (strpos($value, '-')) {
|
||||||
|
$parts = explode('-', $value);
|
||||||
|
if ($parts[0] == '7') {
|
||||||
|
$parts[0] = '0';
|
||||||
|
} elseif ($parts[1] == '0') {
|
||||||
|
$parts[1] = '7';
|
||||||
|
}
|
||||||
|
$value = implode('-', $parts);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test to see which Sunday to use -- 0 == 7 == Sunday
|
||||||
|
$format = in_array(7, str_split($value)) ? 'N' : 'w';
|
||||||
|
$fieldValue = $date->format($format);
|
||||||
|
|
||||||
|
return $this->isSatisfied($fieldValue, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*
|
||||||
|
* @param \DateTime|\DateTimeImmutable &$date
|
||||||
|
*/
|
||||||
|
public function increment(DateTimeInterface &$date, $invert = false)
|
||||||
|
{
|
||||||
|
if ($invert) {
|
||||||
|
$date = $date->modify('-1 day')->setTime(23, 59, 0);
|
||||||
|
} else {
|
||||||
|
$date = $date->modify('+1 day')->setTime(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function validate($value)
|
||||||
|
{
|
||||||
|
$basicChecks = parent::validate($value);
|
||||||
|
|
||||||
|
if (!$basicChecks) {
|
||||||
|
// Handle the # value
|
||||||
|
if (strpos($value, '#') !== false) {
|
||||||
|
$chunks = explode('#', $value);
|
||||||
|
$chunks[0] = $this->convertLiterals($chunks[0]);
|
||||||
|
|
||||||
|
if (parent::validate($chunks[0]) && is_numeric($chunks[1]) && in_array($chunks[1], $this->nthRange)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preg_match('/^(.*)L$/', $value, $matches)) {
|
||||||
|
return $this->validate($matches[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $basicChecks;
|
||||||
|
}
|
||||||
|
}
|
54
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/FieldFactory.php
vendored
Normal file
54
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/FieldFactory.php
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron;
|
||||||
|
|
||||||
|
use InvalidArgumentException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CRON field factory implementing a flyweight factory
|
||||||
|
* @link http://en.wikipedia.org/wiki/Cron
|
||||||
|
*/
|
||||||
|
class FieldFactory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array Cache of instantiated fields
|
||||||
|
*/
|
||||||
|
private $fields = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an instance of a field object for a cron expression position
|
||||||
|
*
|
||||||
|
* @param int $position CRON expression position value to retrieve
|
||||||
|
*
|
||||||
|
* @return FieldInterface
|
||||||
|
* @throws InvalidArgumentException if a position is not valid
|
||||||
|
*/
|
||||||
|
public function getField($position)
|
||||||
|
{
|
||||||
|
if (!isset($this->fields[$position])) {
|
||||||
|
switch ($position) {
|
||||||
|
case 0:
|
||||||
|
$this->fields[$position] = new MinutesField();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
$this->fields[$position] = new HoursField();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$this->fields[$position] = new DayOfMonthField();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
$this->fields[$position] = new MonthField();
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
$this->fields[$position] = new DayOfWeekField();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
($position + 1) . ' is not a valid position'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->fields[$position];
|
||||||
|
}
|
||||||
|
}
|
41
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/FieldInterface.php
vendored
Normal file
41
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/FieldInterface.php
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron;
|
||||||
|
|
||||||
|
use DateTimeInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CRON field interface
|
||||||
|
*/
|
||||||
|
interface FieldInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Check if the respective value of a DateTime field satisfies a CRON exp
|
||||||
|
*
|
||||||
|
* @param DateTimeInterface $date DateTime object to check
|
||||||
|
* @param string $value CRON expression to test against
|
||||||
|
*
|
||||||
|
* @return bool Returns TRUE if satisfied, FALSE otherwise
|
||||||
|
*/
|
||||||
|
public function isSatisfiedBy(DateTimeInterface $date, $value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When a CRON expression is not satisfied, this method is used to increment
|
||||||
|
* or decrement a DateTime object by the unit of the cron field
|
||||||
|
*
|
||||||
|
* @param DateTimeInterface &$date DateTime object to change
|
||||||
|
* @param bool $invert (optional) Set to TRUE to decrement
|
||||||
|
*
|
||||||
|
* @return FieldInterface
|
||||||
|
*/
|
||||||
|
public function increment(DateTimeInterface &$date, $invert = false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates a CRON expression for a given field
|
||||||
|
*
|
||||||
|
* @param string $value CRON expression value to validate
|
||||||
|
*
|
||||||
|
* @return bool Returns TRUE if valid, FALSE otherwise
|
||||||
|
*/
|
||||||
|
public function validate($value);
|
||||||
|
}
|
85
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/HoursField.php
vendored
Normal file
85
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/HoursField.php
vendored
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron;
|
||||||
|
|
||||||
|
use DateTimeInterface;
|
||||||
|
use DateTimeZone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hours field. Allows: * , / -
|
||||||
|
*/
|
||||||
|
class HoursField extends AbstractField
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $rangeStart = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $rangeEnd = 23;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function isSatisfiedBy(DateTimeInterface $date, $value)
|
||||||
|
{
|
||||||
|
if ($value == '?') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->isSatisfied($date->format('H'), $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* @param \DateTime|\DateTimeImmutable &$date
|
||||||
|
* @param string|null $parts
|
||||||
|
*/
|
||||||
|
public function increment(DateTimeInterface &$date, $invert = false, $parts = null)
|
||||||
|
{
|
||||||
|
// Change timezone to UTC temporarily. This will
|
||||||
|
// allow us to go back or forwards and hour even
|
||||||
|
// if DST will be changed between the hours.
|
||||||
|
if (is_null($parts) || $parts == '*') {
|
||||||
|
$timezone = $date->getTimezone();
|
||||||
|
$date = $date->setTimezone(new DateTimeZone('UTC'));
|
||||||
|
$date = $date->modify(($invert ? '-' : '+') . '1 hour');
|
||||||
|
$date = $date->setTimezone($timezone);
|
||||||
|
|
||||||
|
$date = $date->setTime($date->format('H'), $invert ? 59 : 0);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
$parts = strpos($parts, ',') !== false ? explode(',', $parts) : array($parts);
|
||||||
|
$hours = array();
|
||||||
|
foreach ($parts as $part) {
|
||||||
|
$hours = array_merge($hours, $this->getRangeForExpression($part, 23));
|
||||||
|
}
|
||||||
|
|
||||||
|
$current_hour = $date->format('H');
|
||||||
|
$position = $invert ? count($hours) - 1 : 0;
|
||||||
|
if (count($hours) > 1) {
|
||||||
|
for ($i = 0; $i < count($hours) - 1; $i++) {
|
||||||
|
if ((!$invert && $current_hour >= $hours[$i] && $current_hour < $hours[$i + 1]) ||
|
||||||
|
($invert && $current_hour > $hours[$i] && $current_hour <= $hours[$i + 1])) {
|
||||||
|
$position = $invert ? $i : $i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$hour = $hours[$position];
|
||||||
|
if ((!$invert && $date->format('H') >= $hour) || ($invert && $date->format('H') <= $hour)) {
|
||||||
|
$date = $date->modify(($invert ? '-' : '+') . '1 day');
|
||||||
|
$date = $date->setTime($invert ? 23 : 0, $invert ? 59 : 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$date = $date->setTime($hour, $invert ? 59 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
75
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/MinutesField.php
vendored
Normal file
75
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/MinutesField.php
vendored
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron;
|
||||||
|
|
||||||
|
use DateTimeInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minutes field. Allows: * , / -
|
||||||
|
*/
|
||||||
|
class MinutesField extends AbstractField
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $rangeStart = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $rangeEnd = 59;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function isSatisfiedBy(DateTimeInterface $date, $value)
|
||||||
|
{
|
||||||
|
if ($value == '?') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->isSatisfied($date->format('i'), $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* @param \DateTime|\DateTimeImmutable &$date
|
||||||
|
* @param string|null $parts
|
||||||
|
*/
|
||||||
|
public function increment(DateTimeInterface &$date, $invert = false, $parts = null)
|
||||||
|
{
|
||||||
|
if (is_null($parts)) {
|
||||||
|
$date = $date->modify(($invert ? '-' : '+') . '1 minute');
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
$parts = strpos($parts, ',') !== false ? explode(',', $parts) : array($parts);
|
||||||
|
$minutes = array();
|
||||||
|
foreach ($parts as $part) {
|
||||||
|
$minutes = array_merge($minutes, $this->getRangeForExpression($part, 59));
|
||||||
|
}
|
||||||
|
|
||||||
|
$current_minute = $date->format('i');
|
||||||
|
$position = $invert ? count($minutes) - 1 : 0;
|
||||||
|
if (count($minutes) > 1) {
|
||||||
|
for ($i = 0; $i < count($minutes) - 1; $i++) {
|
||||||
|
if ((!$invert && $current_minute >= $minutes[$i] && $current_minute < $minutes[$i + 1]) ||
|
||||||
|
($invert && $current_minute > $minutes[$i] && $current_minute <= $minutes[$i + 1])) {
|
||||||
|
$position = $invert ? $i : $i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!$invert && $current_minute >= $minutes[$position]) || ($invert && $current_minute <= $minutes[$position])) {
|
||||||
|
$date = $date->modify(($invert ? '-' : '+') . '1 hour');
|
||||||
|
$date = $date->setTime($date->format('H'), $invert ? 59 : 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$date = $date->setTime($date->format('H'), $minutes[$position]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
59
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/MonthField.php
vendored
Normal file
59
paragonik-backend/vendor/dragonmantank/cron-expression/src/Cron/MonthField.php
vendored
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron;
|
||||||
|
|
||||||
|
use DateTimeInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Month field. Allows: * , / -
|
||||||
|
*/
|
||||||
|
class MonthField extends AbstractField
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $rangeStart = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $rangeEnd = 12;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $literals = [1 => 'JAN', 2 => 'FEB', 3 => 'MAR', 4 => 'APR', 5 => 'MAY', 6 => 'JUN', 7 => 'JUL',
|
||||||
|
8 => 'AUG', 9 => 'SEP', 10 => 'OCT', 11 => 'NOV', 12 => 'DEC'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function isSatisfiedBy(DateTimeInterface $date, $value)
|
||||||
|
{
|
||||||
|
if ($value == '?') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$value = $this->convertLiterals($value);
|
||||||
|
|
||||||
|
return $this->isSatisfied($date->format('m'), $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*
|
||||||
|
* @param \DateTime|\DateTimeImmutable &$date
|
||||||
|
*/
|
||||||
|
public function increment(DateTimeInterface &$date, $invert = false)
|
||||||
|
{
|
||||||
|
if ($invert) {
|
||||||
|
$date = $date->modify('last day of previous month')->setTime(23, 59);
|
||||||
|
} else {
|
||||||
|
$date = $date->modify('first day of next month')->setTime(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
139
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/AbstractFieldTest.php
vendored
Normal file
139
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/AbstractFieldTest.php
vendored
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron\Tests;
|
||||||
|
|
||||||
|
use Cron\DayOfWeekField;
|
||||||
|
use Cron\HoursField;
|
||||||
|
use Cron\MinutesField;
|
||||||
|
use Cron\MonthField;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Michael Dowling <mtdowling@gmail.com>
|
||||||
|
*/
|
||||||
|
class AbstractFieldTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \Cron\AbstractField::isRange
|
||||||
|
*/
|
||||||
|
public function testTestsIfRange()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->isRange('1-2'));
|
||||||
|
$this->assertFalse($f->isRange('2'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\AbstractField::isIncrementsOfRanges
|
||||||
|
*/
|
||||||
|
public function testTestsIfIncrementsOfRanges()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertFalse($f->isIncrementsOfRanges('1-2'));
|
||||||
|
$this->assertTrue($f->isIncrementsOfRanges('1/2'));
|
||||||
|
$this->assertTrue($f->isIncrementsOfRanges('*/2'));
|
||||||
|
$this->assertTrue($f->isIncrementsOfRanges('3-12/2'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\AbstractField::isInRange
|
||||||
|
*/
|
||||||
|
public function testTestsIfInRange()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->isInRange('1', '1-2'));
|
||||||
|
$this->assertTrue($f->isInRange('2', '1-2'));
|
||||||
|
$this->assertTrue($f->isInRange('5', '4-12'));
|
||||||
|
$this->assertFalse($f->isInRange('3', '4-12'));
|
||||||
|
$this->assertFalse($f->isInRange('13', '4-12'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\AbstractField::isInIncrementsOfRanges
|
||||||
|
*/
|
||||||
|
public function testTestsIfInIncrementsOfRangesOnZeroStartRange()
|
||||||
|
{
|
||||||
|
$f = new MinutesField();
|
||||||
|
$this->assertTrue($f->isInIncrementsOfRanges('3', '3-59/2'));
|
||||||
|
$this->assertTrue($f->isInIncrementsOfRanges('13', '3-59/2'));
|
||||||
|
$this->assertTrue($f->isInIncrementsOfRanges('15', '3-59/2'));
|
||||||
|
$this->assertTrue($f->isInIncrementsOfRanges('14', '*/2'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('2', '3-59/13'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('14', '*/13'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('14', '3-59/2'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('3', '2-59'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('3', '2'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('3', '*'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('0', '*/0'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('1', '*/0'));
|
||||||
|
|
||||||
|
$this->assertTrue($f->isInIncrementsOfRanges('4', '4/1'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('14', '4/1'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('34', '4/1'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\AbstractField::isInIncrementsOfRanges
|
||||||
|
*/
|
||||||
|
public function testTestsIfInIncrementsOfRangesOnOneStartRange()
|
||||||
|
{
|
||||||
|
$f = new MonthField();
|
||||||
|
$this->assertTrue($f->isInIncrementsOfRanges('3', '3-12/2'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('13', '3-12/2'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('15', '3-12/2'));
|
||||||
|
$this->assertTrue($f->isInIncrementsOfRanges('3', '*/2'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('3', '*/3'));
|
||||||
|
$this->assertTrue($f->isInIncrementsOfRanges('7', '*/3'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('14', '3-12/2'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('3', '2-12'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('3', '2'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('3', '*'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('0', '*/0'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('1', '*/0'));
|
||||||
|
|
||||||
|
$this->assertTrue($f->isInIncrementsOfRanges('4', '4/1'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('14', '4/1'));
|
||||||
|
$this->assertFalse($f->isInIncrementsOfRanges('34', '4/1'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\AbstractField::isSatisfied
|
||||||
|
*/
|
||||||
|
public function testTestsIfSatisfied()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->isSatisfied('12', '3-13'));
|
||||||
|
$this->assertFalse($f->isSatisfied('15', '3-7/2'));
|
||||||
|
$this->assertTrue($f->isSatisfied('12', '*'));
|
||||||
|
$this->assertTrue($f->isSatisfied('12', '12'));
|
||||||
|
$this->assertFalse($f->isSatisfied('12', '3-11'));
|
||||||
|
$this->assertFalse($f->isSatisfied('12', '3-7/2'));
|
||||||
|
$this->assertFalse($f->isSatisfied('12', '11'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows ranges and lists to coexist in the same expression
|
||||||
|
*
|
||||||
|
* @see https://github.com/dragonmantank/cron-expression/issues/5
|
||||||
|
*/
|
||||||
|
public function testAllowRangesAndLists()
|
||||||
|
{
|
||||||
|
$expression = '5-7,11-13';
|
||||||
|
$f = new HoursField();
|
||||||
|
$this->assertTrue($f->validate($expression));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes sure that various types of ranges expand out properly
|
||||||
|
*
|
||||||
|
* @see https://github.com/dragonmantank/cron-expression/issues/5
|
||||||
|
*/
|
||||||
|
public function testGetRangeForExpressionExpandsCorrectly()
|
||||||
|
{
|
||||||
|
$f = new HoursField();
|
||||||
|
$this->assertSame([5, 6, 7, 11, 12, 13], $f->getRangeForExpression('5-7,11-13', 23));
|
||||||
|
$this->assertSame(['5', '6', '7', '11', '12', '13'], $f->getRangeForExpression('5,6,7,11,12,13', 23));
|
||||||
|
$this->assertSame([0, 6, 12, 18], $f->getRangeForExpression('*/6', 23));
|
||||||
|
$this->assertSame([5, 11], $f->getRangeForExpression('5-13/6', 23));
|
||||||
|
}
|
||||||
|
}
|
586
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/CronExpressionTest.php
vendored
Normal file
586
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/CronExpressionTest.php
vendored
Normal file
@ -0,0 +1,586 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron\Tests;
|
||||||
|
|
||||||
|
use Cron\CronExpression;
|
||||||
|
use Cron\MonthField;
|
||||||
|
use DateTime;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use DateTimeZone;
|
||||||
|
use InvalidArgumentException;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Michael Dowling <mtdowling@gmail.com>
|
||||||
|
*/
|
||||||
|
class CronExpressionTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::factory
|
||||||
|
*/
|
||||||
|
public function testFactoryRecognizesTemplates()
|
||||||
|
{
|
||||||
|
$this->assertSame('0 0 1 1 *', CronExpression::factory('@annually')->getExpression());
|
||||||
|
$this->assertSame('0 0 1 1 *', CronExpression::factory('@yearly')->getExpression());
|
||||||
|
$this->assertSame('0 0 * * 0', CronExpression::factory('@weekly')->getExpression());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::__construct
|
||||||
|
* @covers \Cron\CronExpression::getExpression
|
||||||
|
* @covers \Cron\CronExpression::__toString
|
||||||
|
*/
|
||||||
|
public function testParsesCronSchedule()
|
||||||
|
{
|
||||||
|
// '2010-09-10 12:00:00'
|
||||||
|
$cron = CronExpression::factory('1 2-4 * 4,5,6 */3');
|
||||||
|
$this->assertSame('1', $cron->getExpression(CronExpression::MINUTE));
|
||||||
|
$this->assertSame('2-4', $cron->getExpression(CronExpression::HOUR));
|
||||||
|
$this->assertSame('*', $cron->getExpression(CronExpression::DAY));
|
||||||
|
$this->assertSame('4,5,6', $cron->getExpression(CronExpression::MONTH));
|
||||||
|
$this->assertSame('*/3', $cron->getExpression(CronExpression::WEEKDAY));
|
||||||
|
$this->assertSame('1 2-4 * 4,5,6 */3', $cron->getExpression());
|
||||||
|
$this->assertSame('1 2-4 * 4,5,6 */3', (string) $cron);
|
||||||
|
$this->assertNull($cron->getExpression('foo'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::__construct
|
||||||
|
* @covers \Cron\CronExpression::getExpression
|
||||||
|
* @covers \Cron\CronExpression::__toString
|
||||||
|
* @expectedException \InvalidArgumentException
|
||||||
|
* @expectedExceptionMessage Invalid CRON field value A at position 0
|
||||||
|
*/
|
||||||
|
public function testParsesCronScheduleThrowsAnException()
|
||||||
|
{
|
||||||
|
CronExpression::factory('A 1 2 3 4');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::__construct
|
||||||
|
* @covers \Cron\CronExpression::getExpression
|
||||||
|
* @dataProvider scheduleWithDifferentSeparatorsProvider
|
||||||
|
*/
|
||||||
|
public function testParsesCronScheduleWithAnySpaceCharsAsSeparators($schedule, array $expected)
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory($schedule);
|
||||||
|
$this->assertSame($expected[0], $cron->getExpression(CronExpression::MINUTE));
|
||||||
|
$this->assertSame($expected[1], $cron->getExpression(CronExpression::HOUR));
|
||||||
|
$this->assertSame($expected[2], $cron->getExpression(CronExpression::DAY));
|
||||||
|
$this->assertSame($expected[3], $cron->getExpression(CronExpression::MONTH));
|
||||||
|
$this->assertSame($expected[4], $cron->getExpression(CronExpression::WEEKDAY));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data provider for testParsesCronScheduleWithAnySpaceCharsAsSeparators
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function scheduleWithDifferentSeparatorsProvider()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array("*\t*\t*\t*\t*\t", array('*', '*', '*', '*', '*', '*')),
|
||||||
|
array("* * * * * ", array('*', '*', '*', '*', '*', '*')),
|
||||||
|
array("* \t * \t * \t * \t * \t", array('*', '*', '*', '*', '*', '*')),
|
||||||
|
array("*\t \t*\t \t*\t \t*\t \t*\t \t", array('*', '*', '*', '*', '*', '*')),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::__construct
|
||||||
|
* @covers \Cron\CronExpression::setExpression
|
||||||
|
* @covers \Cron\CronExpression::setPart
|
||||||
|
* @expectedException InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function testInvalidCronsWillFail()
|
||||||
|
{
|
||||||
|
// Only four values
|
||||||
|
$cron = CronExpression::factory('* * * 1');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::setPart
|
||||||
|
* @expectedException InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function testInvalidPartsWillFail()
|
||||||
|
{
|
||||||
|
// Only four values
|
||||||
|
$cron = CronExpression::factory('* * * * *');
|
||||||
|
$cron->setPart(1, 'abc');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data provider for cron schedule
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function scheduleProvider()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array('*/2 */2 * * *', '2015-08-10 21:47:27', '2015-08-10 22:00:00', false),
|
||||||
|
array('* * * * *', '2015-08-10 21:50:37', '2015-08-10 21:50:00', true),
|
||||||
|
array('* 20,21,22 * * *', '2015-08-10 21:50:00', '2015-08-10 21:50:00', true),
|
||||||
|
// Handles CSV values
|
||||||
|
array('* 20,22 * * *', '2015-08-10 21:50:00', '2015-08-10 22:00:00', false),
|
||||||
|
// CSV values can be complex
|
||||||
|
array('7-9 * */9 * *', '2015-08-10 22:02:33', '2015-08-10 22:07:00', false),
|
||||||
|
// 15th minute, of the second hour, every 15 days, in January, every Friday
|
||||||
|
array('1 * * * 7', '2015-08-10 21:47:27', '2015-08-16 00:01:00', false),
|
||||||
|
// Test with exact times
|
||||||
|
array('47 21 * * *', strtotime('2015-08-10 21:47:30'), '2015-08-10 21:47:00', true),
|
||||||
|
// Test Day of the week (issue #1)
|
||||||
|
// According cron implementation, 0|7 = sunday, 1 => monday, etc
|
||||||
|
array('* * * * 0', strtotime('2011-06-15 23:09:00'), '2011-06-19 00:00:00', false),
|
||||||
|
array('* * * * 7', strtotime('2011-06-15 23:09:00'), '2011-06-19 00:00:00', false),
|
||||||
|
array('* * * * 1', strtotime('2011-06-15 23:09:00'), '2011-06-20 00:00:00', false),
|
||||||
|
// Should return the sunday date as 7 equals 0
|
||||||
|
array('0 0 * * MON,SUN', strtotime('2011-06-15 23:09:00'), '2011-06-19 00:00:00', false),
|
||||||
|
array('0 0 * * 1,7', strtotime('2011-06-15 23:09:00'), '2011-06-19 00:00:00', false),
|
||||||
|
array('0 0 * * 0-4', strtotime('2011-06-15 23:09:00'), '2011-06-16 00:00:00', false),
|
||||||
|
array('0 0 * * 7-4', strtotime('2011-06-15 23:09:00'), '2011-06-16 00:00:00', false),
|
||||||
|
array('0 0 * * 4-7', strtotime('2011-06-15 23:09:00'), '2011-06-16 00:00:00', false),
|
||||||
|
array('0 0 * * 7-3', strtotime('2011-06-15 23:09:00'), '2011-06-19 00:00:00', false),
|
||||||
|
array('0 0 * * 3-7', strtotime('2011-06-15 23:09:00'), '2011-06-16 00:00:00', false),
|
||||||
|
array('0 0 * * 3-7', strtotime('2011-06-18 23:09:00'), '2011-06-19 00:00:00', false),
|
||||||
|
// Test lists of values and ranges (Abhoryo)
|
||||||
|
array('0 0 * * 2-7', strtotime('2011-06-20 23:09:00'), '2011-06-21 00:00:00', false),
|
||||||
|
array('0 0 * * 2-7', strtotime('2011-06-18 23:09:00'), '2011-06-19 00:00:00', false),
|
||||||
|
array('0 0 * * 4-7', strtotime('2011-07-19 00:00:00'), '2011-07-21 00:00:00', false),
|
||||||
|
// Test increments of ranges
|
||||||
|
array('0-12/4 * * * *', strtotime('2011-06-20 12:04:00'), '2011-06-20 12:04:00', true),
|
||||||
|
array('4-59/2 * * * *', strtotime('2011-06-20 12:04:00'), '2011-06-20 12:04:00', true),
|
||||||
|
array('4-59/2 * * * *', strtotime('2011-06-20 12:06:00'), '2011-06-20 12:06:00', true),
|
||||||
|
array('4-59/3 * * * *', strtotime('2011-06-20 12:06:00'), '2011-06-20 12:07:00', false),
|
||||||
|
// Test Day of the Week and the Day of the Month (issue #1)
|
||||||
|
array('0 0 1 1 0', strtotime('2011-06-15 23:09:00'), '2012-01-01 00:00:00', false),
|
||||||
|
array('0 0 1 JAN 0', strtotime('2011-06-15 23:09:00'), '2012-01-01 00:00:00', false),
|
||||||
|
array('0 0 1 * 0', strtotime('2011-06-15 23:09:00'), '2012-01-01 00:00:00', false),
|
||||||
|
// Test the W day of the week modifier for day of the month field
|
||||||
|
array('0 0 2W * *', strtotime('2011-07-01 00:00:00'), '2011-07-01 00:00:00', true),
|
||||||
|
array('0 0 1W * *', strtotime('2011-05-01 00:00:00'), '2011-05-02 00:00:00', false),
|
||||||
|
array('0 0 1W * *', strtotime('2011-07-01 00:00:00'), '2011-07-01 00:00:00', true),
|
||||||
|
array('0 0 3W * *', strtotime('2011-07-01 00:00:00'), '2011-07-04 00:00:00', false),
|
||||||
|
array('0 0 16W * *', strtotime('2011-07-01 00:00:00'), '2011-07-15 00:00:00', false),
|
||||||
|
array('0 0 28W * *', strtotime('2011-07-01 00:00:00'), '2011-07-28 00:00:00', false),
|
||||||
|
array('0 0 30W * *', strtotime('2011-07-01 00:00:00'), '2011-07-29 00:00:00', false),
|
||||||
|
array('0 0 31W * *', strtotime('2011-07-01 00:00:00'), '2011-07-29 00:00:00', false),
|
||||||
|
// Test the last weekday of a month
|
||||||
|
array('* * * * 5L', strtotime('2011-07-01 00:00:00'), '2011-07-29 00:00:00', false),
|
||||||
|
array('* * * * 6L', strtotime('2011-07-01 00:00:00'), '2011-07-30 00:00:00', false),
|
||||||
|
array('* * * * 7L', strtotime('2011-07-01 00:00:00'), '2011-07-31 00:00:00', false),
|
||||||
|
array('* * * * 1L', strtotime('2011-07-24 00:00:00'), '2011-07-25 00:00:00', false),
|
||||||
|
array('* * * 1 5L', strtotime('2011-12-25 00:00:00'), '2012-01-27 00:00:00', false),
|
||||||
|
// Test the hash symbol for the nth weekday of a given month
|
||||||
|
array('* * * * 5#2', strtotime('2011-07-01 00:00:00'), '2011-07-08 00:00:00', false),
|
||||||
|
array('* * * * 5#1', strtotime('2011-07-01 00:00:00'), '2011-07-01 00:00:00', true),
|
||||||
|
array('* * * * 3#4', strtotime('2011-07-01 00:00:00'), '2011-07-27 00:00:00', false),
|
||||||
|
|
||||||
|
// Issue #7, documented example failed
|
||||||
|
['3-59/15 6-12 */15 1 2-5', strtotime('2017-01-08 00:00:00'), '2017-01-31 06:03:00', false],
|
||||||
|
|
||||||
|
// https://github.com/laravel/framework/commit/07d160ac3cc9764d5b429734ffce4fa311385403
|
||||||
|
['* * * * MON-FRI', strtotime('2017-01-08 00:00:00'), strtotime('2017-01-09 00:00:00'), false],
|
||||||
|
['* * * * TUE', strtotime('2017-01-08 00:00:00'), strtotime('2017-01-10 00:00:00'), false],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::isDue
|
||||||
|
* @covers \Cron\CronExpression::getNextRunDate
|
||||||
|
* @covers \Cron\DayOfMonthField
|
||||||
|
* @covers \Cron\DayOfWeekField
|
||||||
|
* @covers \Cron\MinutesField
|
||||||
|
* @covers \Cron\HoursField
|
||||||
|
* @covers \Cron\MonthField
|
||||||
|
* @covers \Cron\CronExpression::getRunDate
|
||||||
|
* @dataProvider scheduleProvider
|
||||||
|
*/
|
||||||
|
public function testDeterminesIfCronIsDue($schedule, $relativeTime, $nextRun, $isDue)
|
||||||
|
{
|
||||||
|
$relativeTimeString = is_int($relativeTime) ? date('Y-m-d H:i:s', $relativeTime) : $relativeTime;
|
||||||
|
|
||||||
|
// Test next run date
|
||||||
|
$cron = CronExpression::factory($schedule);
|
||||||
|
if (is_string($relativeTime)) {
|
||||||
|
$relativeTime = new DateTime($relativeTime);
|
||||||
|
} elseif (is_int($relativeTime)) {
|
||||||
|
$relativeTime = date('Y-m-d H:i:s', $relativeTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_string($nextRun)) {
|
||||||
|
$nextRunDate = new DateTime($nextRun);
|
||||||
|
} elseif (is_int($nextRun)) {
|
||||||
|
$nextRunDate = new DateTime();
|
||||||
|
$nextRunDate->setTimestamp($nextRun);
|
||||||
|
}
|
||||||
|
$this->assertSame($isDue, $cron->isDue($relativeTime));
|
||||||
|
$next = $cron->getNextRunDate($relativeTime, 0, true);
|
||||||
|
|
||||||
|
$this->assertEquals($nextRunDate, $next);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::isDue
|
||||||
|
*/
|
||||||
|
public function testIsDueHandlesDifferentDates()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('* * * * *');
|
||||||
|
$this->assertTrue($cron->isDue());
|
||||||
|
$this->assertTrue($cron->isDue('now'));
|
||||||
|
$this->assertTrue($cron->isDue(new DateTime('now')));
|
||||||
|
$this->assertTrue($cron->isDue(date('Y-m-d H:i')));
|
||||||
|
$this->assertTrue($cron->isDue(new DateTimeImmutable('now')));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::isDue
|
||||||
|
*/
|
||||||
|
public function testIsDueHandlesDifferentDefaultTimezones()
|
||||||
|
{
|
||||||
|
$originalTimezone = date_default_timezone_get();
|
||||||
|
$cron = CronExpression::factory('0 15 * * 3'); //Wednesday at 15:00
|
||||||
|
$date = '2014-01-01 15:00'; //Wednesday
|
||||||
|
|
||||||
|
date_default_timezone_set('UTC');
|
||||||
|
$this->assertTrue($cron->isDue(new DateTime($date), 'UTC'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date), 'Europe/Amsterdam'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date), 'Asia/Tokyo'));
|
||||||
|
|
||||||
|
date_default_timezone_set('Europe/Amsterdam');
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date), 'UTC'));
|
||||||
|
$this->assertTrue($cron->isDue(new DateTime($date), 'Europe/Amsterdam'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date), 'Asia/Tokyo'));
|
||||||
|
|
||||||
|
date_default_timezone_set('Asia/Tokyo');
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date), 'UTC'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date), 'Europe/Amsterdam'));
|
||||||
|
$this->assertTrue($cron->isDue(new DateTime($date), 'Asia/Tokyo'));
|
||||||
|
|
||||||
|
date_default_timezone_set($originalTimezone);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::isDue
|
||||||
|
*/
|
||||||
|
public function testIsDueHandlesDifferentSuppliedTimezones()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('0 15 * * 3'); //Wednesday at 15:00
|
||||||
|
$date = '2014-01-01 15:00'; //Wednesday
|
||||||
|
|
||||||
|
$this->assertTrue($cron->isDue(new DateTime($date, new DateTimeZone('UTC')), 'UTC'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, new DateTimeZone('UTC')), 'Europe/Amsterdam'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, new DateTimeZone('UTC')), 'Asia/Tokyo'));
|
||||||
|
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, new DateTimeZone('Europe/Amsterdam')), 'UTC'));
|
||||||
|
$this->assertTrue($cron->isDue(new DateTime($date, new DateTimeZone('Europe/Amsterdam')), 'Europe/Amsterdam'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, new DateTimeZone('Europe/Amsterdam')), 'Asia/Tokyo'));
|
||||||
|
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, new DateTimeZone('Asia/Tokyo')), 'UTC'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, new DateTimeZone('Asia/Tokyo')), 'Europe/Amsterdam'));
|
||||||
|
$this->assertTrue($cron->isDue(new DateTime($date, new DateTimeZone('Asia/Tokyo')), 'Asia/Tokyo'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers Cron\CronExpression::isDue
|
||||||
|
*/
|
||||||
|
public function testIsDueHandlesDifferentTimezonesAsArgument()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('0 15 * * 3'); //Wednesday at 15:00
|
||||||
|
$date = '2014-01-01 15:00'; //Wednesday
|
||||||
|
$utc = new \DateTimeZone('UTC');
|
||||||
|
$amsterdam = new \DateTimeZone('Europe/Amsterdam');
|
||||||
|
$tokyo = new \DateTimeZone('Asia/Tokyo');
|
||||||
|
$this->assertTrue($cron->isDue(new DateTime($date, $utc), 'UTC'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, $amsterdam), 'UTC'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, $tokyo), 'UTC'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, $utc), 'Europe/Amsterdam'));
|
||||||
|
$this->assertTrue($cron->isDue(new DateTime($date, $amsterdam), 'Europe/Amsterdam'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, $tokyo), 'Europe/Amsterdam'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, $utc), 'Asia/Tokyo'));
|
||||||
|
$this->assertFalse($cron->isDue(new DateTime($date, $amsterdam), 'Asia/Tokyo'));
|
||||||
|
$this->assertTrue($cron->isDue(new DateTime($date, $tokyo), 'Asia/Tokyo'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers Cron\CronExpression::isDue
|
||||||
|
*/
|
||||||
|
public function testRecognisesTimezonesAsPartOfDateTime()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory("0 7 * * *");
|
||||||
|
$tzCron = "America/New_York";
|
||||||
|
$tzServer = new \DateTimeZone("Europe/London");
|
||||||
|
|
||||||
|
$dtCurrent = \DateTime::createFromFormat("!Y-m-d H:i:s", "2017-10-17 10:00:00", $tzServer);
|
||||||
|
$dtPrev = $cron->getPreviousRunDate($dtCurrent, 0, true, $tzCron);
|
||||||
|
$this->assertEquals('1508151600 : 2017-10-16T07:00:00-04:00 : America/New_York', $dtPrev->format("U \: c \: e"));
|
||||||
|
|
||||||
|
$dtCurrent = \DateTimeImmutable::createFromFormat("!Y-m-d H:i:s", "2017-10-17 10:00:00", $tzServer);
|
||||||
|
$dtPrev = $cron->getPreviousRunDate($dtCurrent, 0, true, $tzCron);
|
||||||
|
$this->assertEquals('1508151600 : 2017-10-16T07:00:00-04:00 : America/New_York', $dtPrev->format("U \: c \: e"));
|
||||||
|
|
||||||
|
$dtCurrent = \DateTimeImmutable::createFromFormat("!Y-m-d H:i:s", "2017-10-17 10:00:00", $tzServer);
|
||||||
|
$dtPrev = $cron->getPreviousRunDate($dtCurrent->format("c"), 0, true, $tzCron);
|
||||||
|
$this->assertEquals('1508151600 : 2017-10-16T07:00:00-04:00 : America/New_York', $dtPrev->format("U \: c \: e"));
|
||||||
|
|
||||||
|
$dtCurrent = \DateTimeImmutable::createFromFormat("!Y-m-d H:i:s", "2017-10-17 10:00:00", $tzServer);
|
||||||
|
$dtPrev = $cron->getPreviousRunDate($dtCurrent->format("\@U"), 0, true, $tzCron);
|
||||||
|
$this->assertEquals('1508151600 : 2017-10-16T07:00:00-04:00 : America/New_York', $dtPrev->format("U \: c \: e"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::getPreviousRunDate
|
||||||
|
*/
|
||||||
|
public function testCanGetPreviousRunDates()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('* * * * *');
|
||||||
|
$next = $cron->getNextRunDate('now');
|
||||||
|
$two = $cron->getNextRunDate('now', 1);
|
||||||
|
$this->assertEquals($next, $cron->getPreviousRunDate($two));
|
||||||
|
|
||||||
|
$cron = CronExpression::factory('* */2 * * *');
|
||||||
|
$next = $cron->getNextRunDate('now');
|
||||||
|
$two = $cron->getNextRunDate('now', 1);
|
||||||
|
$this->assertEquals($next, $cron->getPreviousRunDate($two));
|
||||||
|
|
||||||
|
$cron = CronExpression::factory('* * * */2 *');
|
||||||
|
$next = $cron->getNextRunDate('now');
|
||||||
|
$two = $cron->getNextRunDate('now', 1);
|
||||||
|
$this->assertEquals($next, $cron->getPreviousRunDate($two));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::getMultipleRunDates
|
||||||
|
*/
|
||||||
|
public function testProvidesMultipleRunDates()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('*/2 * * * *');
|
||||||
|
$this->assertEquals(array(
|
||||||
|
new DateTime('2008-11-09 00:00:00'),
|
||||||
|
new DateTime('2008-11-09 00:02:00'),
|
||||||
|
new DateTime('2008-11-09 00:04:00'),
|
||||||
|
new DateTime('2008-11-09 00:06:00')
|
||||||
|
), $cron->getMultipleRunDates(4, '2008-11-09 00:00:00', false, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::getMultipleRunDates
|
||||||
|
* @covers \Cron\CronExpression::setMaxIterationCount
|
||||||
|
*/
|
||||||
|
public function testProvidesMultipleRunDatesForTheFarFuture() {
|
||||||
|
// Fails with the default 1000 iteration limit
|
||||||
|
$cron = CronExpression::factory('0 0 12 1 *');
|
||||||
|
$cron->setMaxIterationCount(2000);
|
||||||
|
$this->assertEquals(array(
|
||||||
|
new DateTime('2016-01-12 00:00:00'),
|
||||||
|
new DateTime('2017-01-12 00:00:00'),
|
||||||
|
new DateTime('2018-01-12 00:00:00'),
|
||||||
|
new DateTime('2019-01-12 00:00:00'),
|
||||||
|
new DateTime('2020-01-12 00:00:00'),
|
||||||
|
new DateTime('2021-01-12 00:00:00'),
|
||||||
|
new DateTime('2022-01-12 00:00:00'),
|
||||||
|
new DateTime('2023-01-12 00:00:00'),
|
||||||
|
new DateTime('2024-01-12 00:00:00'),
|
||||||
|
), $cron->getMultipleRunDates(9, '2015-04-28 00:00:00', false, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression
|
||||||
|
*/
|
||||||
|
public function testCanIterateOverNextRuns()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('@weekly');
|
||||||
|
$nextRun = $cron->getNextRunDate("2008-11-09 08:00:00");
|
||||||
|
$this->assertEquals($nextRun, new DateTime("2008-11-16 00:00:00"));
|
||||||
|
|
||||||
|
// true is cast to 1
|
||||||
|
$nextRun = $cron->getNextRunDate("2008-11-09 00:00:00", true, true);
|
||||||
|
$this->assertEquals($nextRun, new DateTime("2008-11-16 00:00:00"));
|
||||||
|
|
||||||
|
// You can iterate over them
|
||||||
|
$nextRun = $cron->getNextRunDate($cron->getNextRunDate("2008-11-09 00:00:00", 1, true), 1, true);
|
||||||
|
$this->assertEquals($nextRun, new DateTime("2008-11-23 00:00:00"));
|
||||||
|
|
||||||
|
// You can skip more than one
|
||||||
|
$nextRun = $cron->getNextRunDate("2008-11-09 00:00:00", 2, true);
|
||||||
|
$this->assertEquals($nextRun, new DateTime("2008-11-23 00:00:00"));
|
||||||
|
$nextRun = $cron->getNextRunDate("2008-11-09 00:00:00", 3, true);
|
||||||
|
$this->assertEquals($nextRun, new DateTime("2008-11-30 00:00:00"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::getRunDate
|
||||||
|
*/
|
||||||
|
public function testGetRunDateHandlesDifferentDates()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('@weekly');
|
||||||
|
$date = new DateTime("2019-03-10 00:00:00");
|
||||||
|
$this->assertEquals($date, $cron->getNextRunDate("2019-03-03 08:00:00"));
|
||||||
|
$this->assertEquals($date, $cron->getNextRunDate(new DateTime("2019-03-03 08:00:00")));
|
||||||
|
$this->assertEquals($date, $cron->getNextRunDate(new DateTimeImmutable("2019-03-03 08:00:00")));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::getRunDate
|
||||||
|
*/
|
||||||
|
public function testSkipsCurrentDateByDefault()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('* * * * *');
|
||||||
|
$current = new DateTime('now');
|
||||||
|
$next = $cron->getNextRunDate($current);
|
||||||
|
$nextPrev = $cron->getPreviousRunDate($next);
|
||||||
|
$this->assertSame($current->format('Y-m-d H:i:00'), $nextPrev->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::getRunDate
|
||||||
|
* @ticket 7
|
||||||
|
*/
|
||||||
|
public function testStripsForSeconds()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('* * * * *');
|
||||||
|
$current = new DateTime('2011-09-27 10:10:54');
|
||||||
|
$this->assertSame('2011-09-27 10:11:00', $cron->getNextRunDate($current)->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::getRunDate
|
||||||
|
*/
|
||||||
|
public function testFixesPhpBugInDateIntervalMonth()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('0 0 27 JAN *');
|
||||||
|
$this->assertSame('2011-01-27 00:00:00', $cron->getPreviousRunDate('2011-08-22 00:00:00')->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIssue29()
|
||||||
|
{
|
||||||
|
$cron = CronExpression::factory('@weekly');
|
||||||
|
$this->assertSame(
|
||||||
|
'2013-03-10 00:00:00',
|
||||||
|
$cron->getPreviousRunDate('2013-03-17 00:00:00')->format('Y-m-d H:i:s')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see https://github.com/mtdowling/cron-expression/issues/20
|
||||||
|
*/
|
||||||
|
public function testIssue20() {
|
||||||
|
$e = CronExpression::factory('* * * * MON#1');
|
||||||
|
$this->assertTrue($e->isDue(new DateTime('2014-04-07 00:00:00')));
|
||||||
|
$this->assertFalse($e->isDue(new DateTime('2014-04-14 00:00:00')));
|
||||||
|
$this->assertFalse($e->isDue(new DateTime('2014-04-21 00:00:00')));
|
||||||
|
|
||||||
|
$e = CronExpression::factory('* * * * SAT#2');
|
||||||
|
$this->assertFalse($e->isDue(new DateTime('2014-04-05 00:00:00')));
|
||||||
|
$this->assertTrue($e->isDue(new DateTime('2014-04-12 00:00:00')));
|
||||||
|
$this->assertFalse($e->isDue(new DateTime('2014-04-19 00:00:00')));
|
||||||
|
|
||||||
|
$e = CronExpression::factory('* * * * SUN#3');
|
||||||
|
$this->assertFalse($e->isDue(new DateTime('2014-04-13 00:00:00')));
|
||||||
|
$this->assertTrue($e->isDue(new DateTime('2014-04-20 00:00:00')));
|
||||||
|
$this->assertFalse($e->isDue(new DateTime('2014-04-27 00:00:00')));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::getRunDate
|
||||||
|
*/
|
||||||
|
public function testKeepOriginalTime()
|
||||||
|
{
|
||||||
|
$now = new \DateTime;
|
||||||
|
$strNow = $now->format(DateTime::ISO8601);
|
||||||
|
$cron = CronExpression::factory('0 0 * * *');
|
||||||
|
$cron->getPreviousRunDate($now);
|
||||||
|
$this->assertSame($strNow, $now->format(DateTime::ISO8601));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\CronExpression::__construct
|
||||||
|
* @covers \Cron\CronExpression::factory
|
||||||
|
* @covers \Cron\CronExpression::isValidExpression
|
||||||
|
* @covers \Cron\CronExpression::setExpression
|
||||||
|
* @covers \Cron\CronExpression::setPart
|
||||||
|
*/
|
||||||
|
public function testValidationWorks()
|
||||||
|
{
|
||||||
|
// Invalid. Only four values
|
||||||
|
$this->assertFalse(CronExpression::isValidExpression('* * * 1'));
|
||||||
|
// Valid
|
||||||
|
$this->assertTrue(CronExpression::isValidExpression('* * * * 1'));
|
||||||
|
|
||||||
|
// Issue #156, 13 is an invalid month
|
||||||
|
$this->assertFalse(CronExpression::isValidExpression("* * * 13 * "));
|
||||||
|
|
||||||
|
// Issue #155, 90 is an invalid second
|
||||||
|
$this->assertFalse(CronExpression::isValidExpression('90 * * * *'));
|
||||||
|
|
||||||
|
// Issue #154, 24 is an invalid hour
|
||||||
|
$this->assertFalse(CronExpression::isValidExpression("0 24 1 12 0"));
|
||||||
|
|
||||||
|
// Issue #125, this is just all sorts of wrong
|
||||||
|
$this->assertFalse(CronExpression::isValidExpression('990 14 * * mon-fri0345345'));
|
||||||
|
|
||||||
|
// see https://github.com/dragonmantank/cron-expression/issues/5
|
||||||
|
$this->assertTrue(CronExpression::isValidExpression('2,17,35,47 5-7,11-13 * * *'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes sure that 00 is considered a valid value for 0-based fields
|
||||||
|
* cronie allows numbers with a leading 0, so adding support for this as well
|
||||||
|
*
|
||||||
|
* @see https://github.com/dragonmantank/cron-expression/issues/12
|
||||||
|
*/
|
||||||
|
public function testDoubleZeroIsValid()
|
||||||
|
{
|
||||||
|
$this->assertTrue(CronExpression::isValidExpression('00 * * * *'));
|
||||||
|
$this->assertTrue(CronExpression::isValidExpression('01 * * * *'));
|
||||||
|
$this->assertTrue(CronExpression::isValidExpression('* 00 * * *'));
|
||||||
|
$this->assertTrue(CronExpression::isValidExpression('* 01 * * *'));
|
||||||
|
|
||||||
|
$e = CronExpression::factory('00 * * * *');
|
||||||
|
$this->assertTrue($e->isDue(new DateTime('2014-04-07 00:00:00')));
|
||||||
|
$e = CronExpression::factory('01 * * * *');
|
||||||
|
$this->assertTrue($e->isDue(new DateTime('2014-04-07 00:01:00')));
|
||||||
|
|
||||||
|
$e = CronExpression::factory('* 00 * * *');
|
||||||
|
$this->assertTrue($e->isDue(new DateTime('2014-04-07 00:00:00')));
|
||||||
|
$e = CronExpression::factory('* 01 * * *');
|
||||||
|
$this->assertTrue($e->isDue(new DateTime('2014-04-07 01:00:00')));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ranges with large steps should "wrap around" to the appropriate value
|
||||||
|
* cronie allows for steps that are larger than the range of a field, with it wrapping around like a ring buffer. We
|
||||||
|
* should do the same.
|
||||||
|
*
|
||||||
|
* @see https://github.com/dragonmantank/cron-expression/issues/6
|
||||||
|
*/
|
||||||
|
public function testRangesWrapAroundWithLargeSteps()
|
||||||
|
{
|
||||||
|
$f = new MonthField();
|
||||||
|
$this->assertTrue($f->validate('*/123'));
|
||||||
|
$this->assertSame([4], $f->getRangeForExpression('*/123', 12));
|
||||||
|
|
||||||
|
$e = CronExpression::factory('* * * */123 *');
|
||||||
|
$this->assertTrue($e->isDue(new DateTime('2014-04-07 00:00:00')));
|
||||||
|
|
||||||
|
$nextRunDate = $e->getNextRunDate(new DateTime('2014-04-07 00:00:00'));
|
||||||
|
$this->assertSame('2014-04-07 00:01:00', $nextRunDate->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
|
$nextRunDate = $e->getNextRunDate(new DateTime('2014-05-07 00:00:00'));
|
||||||
|
$this->assertSame('2015-04-01 00:00:00', $nextRunDate->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When there is an issue with a field, we should report the human readable position
|
||||||
|
*
|
||||||
|
* @see https://github.com/dragonmantank/cron-expression/issues/29
|
||||||
|
*/
|
||||||
|
public function testFieldPositionIsHumanAdjusted()
|
||||||
|
{
|
||||||
|
$this->expectException(InvalidArgumentException::class);
|
||||||
|
$this->expectExceptionMessage("6 is not a valid position");
|
||||||
|
$e = CronExpression::factory('0 * * * * ? *');
|
||||||
|
}
|
||||||
|
}
|
77
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/DayOfMonthFieldTest.php
vendored
Normal file
77
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/DayOfMonthFieldTest.php
vendored
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron\Tests;
|
||||||
|
|
||||||
|
use Cron\DayOfMonthField;
|
||||||
|
use DateTime;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Michael Dowling <mtdowling@gmail.com>
|
||||||
|
*/
|
||||||
|
class DayOfMonthFieldTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfMonthField::validate
|
||||||
|
*/
|
||||||
|
public function testValidatesField()
|
||||||
|
{
|
||||||
|
$f = new DayOfMonthField();
|
||||||
|
$this->assertTrue($f->validate('1'));
|
||||||
|
$this->assertTrue($f->validate('*'));
|
||||||
|
$this->assertTrue($f->validate('L'));
|
||||||
|
$this->assertTrue($f->validate('5W'));
|
||||||
|
$this->assertTrue($f->validate('01'));
|
||||||
|
$this->assertFalse($f->validate('5W,L'));
|
||||||
|
$this->assertFalse($f->validate('1.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfMonthField::isSatisfiedBy
|
||||||
|
*/
|
||||||
|
public function testChecksIfSatisfied()
|
||||||
|
{
|
||||||
|
$f = new DayOfMonthField();
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime(), '?'));
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTimeImmutable(), '?'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfMonthField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDate()
|
||||||
|
{
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f = new DayOfMonthField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-03-16 00:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f->increment($d, true);
|
||||||
|
$this->assertSame('2011-03-14 23:59:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfMonthField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDateTimeImmutable()
|
||||||
|
{
|
||||||
|
$d = new DateTimeImmutable('2011-03-15 11:15:00');
|
||||||
|
$f = new DayOfMonthField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-03-16 00:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Day of the month cannot accept a 0 value, it must be between 1 and 31
|
||||||
|
* See Github issue #120
|
||||||
|
*
|
||||||
|
* @since 2017-01-22
|
||||||
|
*/
|
||||||
|
public function testDoesNotAccept0Date()
|
||||||
|
{
|
||||||
|
$f = new DayOfMonthField();
|
||||||
|
$this->assertFalse($f->validate(0));
|
||||||
|
}
|
||||||
|
}
|
154
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/DayOfWeekFieldTest.php
vendored
Normal file
154
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/DayOfWeekFieldTest.php
vendored
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron\Tests;
|
||||||
|
|
||||||
|
use Cron\DayOfWeekField;
|
||||||
|
use DateTime;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Michael Dowling <mtdowling@gmail.com>
|
||||||
|
*/
|
||||||
|
class DayOfWeekFieldTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfWeekField::validate
|
||||||
|
*/
|
||||||
|
public function testValidatesField()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->validate('1'));
|
||||||
|
$this->assertTrue($f->validate('01'));
|
||||||
|
$this->assertTrue($f->validate('00'));
|
||||||
|
$this->assertTrue($f->validate('*'));
|
||||||
|
$this->assertFalse($f->validate('*/3,1,1-12'));
|
||||||
|
$this->assertTrue($f->validate('SUN-2'));
|
||||||
|
$this->assertFalse($f->validate('1.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfWeekField::isSatisfiedBy
|
||||||
|
*/
|
||||||
|
public function testChecksIfSatisfied()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime(), '?'));
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTimeImmutable(), '?'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfWeekField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDate()
|
||||||
|
{
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-03-16 00:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f->increment($d, true);
|
||||||
|
$this->assertSame('2011-03-14 23:59:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfWeekField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDateTimeImmutable()
|
||||||
|
{
|
||||||
|
$d = new DateTimeImmutable('2011-03-15 11:15:00');
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-03-16 00:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfWeekField::isSatisfiedBy
|
||||||
|
* @expectedException InvalidArgumentException
|
||||||
|
* @expectedExceptionMessage Weekday must be a value between 0 and 7. 12 given
|
||||||
|
*/
|
||||||
|
public function testValidatesHashValueWeekday()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime(), '12#1'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfWeekField::isSatisfiedBy
|
||||||
|
* @expectedException InvalidArgumentException
|
||||||
|
* @expectedExceptionMessage There are never more than 5 or less than 1 of a given weekday in a month
|
||||||
|
*/
|
||||||
|
public function testValidatesHashValueNth()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime(), '3#6'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfWeekField::validate
|
||||||
|
*/
|
||||||
|
public function testValidateWeekendHash()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->validate('MON#1'));
|
||||||
|
$this->assertTrue($f->validate('TUE#2'));
|
||||||
|
$this->assertTrue($f->validate('WED#3'));
|
||||||
|
$this->assertTrue($f->validate('THU#4'));
|
||||||
|
$this->assertTrue($f->validate('FRI#5'));
|
||||||
|
$this->assertTrue($f->validate('SAT#1'));
|
||||||
|
$this->assertTrue($f->validate('SUN#3'));
|
||||||
|
$this->assertTrue($f->validate('MON#1,MON#3'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfWeekField::isSatisfiedBy
|
||||||
|
*/
|
||||||
|
public function testHandlesZeroAndSevenDayOfTheWeekValues()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime('2011-09-04 00:00:00'), '0-2'));
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime('2011-09-04 00:00:00'), '6-0'));
|
||||||
|
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime('2014-04-20 00:00:00'), 'SUN'));
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime('2014-04-20 00:00:00'), 'SUN#3'));
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime('2014-04-20 00:00:00'), '0#3'));
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime('2014-04-20 00:00:00'), '7#3'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\DayOfWeekField::isSatisfiedBy
|
||||||
|
*/
|
||||||
|
public function testHandlesLastWeekdayOfTheMonth()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime('2018-12-28 00:00:00'), 'FRIL'));
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime('2018-12-28 00:00:00'), '5L'));
|
||||||
|
$this->assertFalse($f->isSatisfiedBy(new DateTime('2018-12-21 00:00:00'), 'FRIL'));
|
||||||
|
$this->assertFalse($f->isSatisfiedBy(new DateTime('2018-12-21 00:00:00'), '5L'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see https://github.com/mtdowling/cron-expression/issues/47
|
||||||
|
*/
|
||||||
|
public function testIssue47() {
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertFalse($f->validate('mon,'));
|
||||||
|
$this->assertFalse($f->validate('mon-'));
|
||||||
|
$this->assertFalse($f->validate('*/2,'));
|
||||||
|
$this->assertFalse($f->validate('-mon'));
|
||||||
|
$this->assertFalse($f->validate(',1'));
|
||||||
|
$this->assertFalse($f->validate('*-'));
|
||||||
|
$this->assertFalse($f->validate(',-'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see https://github.com/laravel/framework/commit/07d160ac3cc9764d5b429734ffce4fa311385403
|
||||||
|
*/
|
||||||
|
public function testLiteralsExpandProperly()
|
||||||
|
{
|
||||||
|
$f = new DayOfWeekField();
|
||||||
|
$this->assertTrue($f->validate('MON-FRI'));
|
||||||
|
$this->assertSame([1,2,3,4,5], $f->getRangeForExpression('MON-FRI', 7));
|
||||||
|
}
|
||||||
|
}
|
42
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/FieldFactoryTest.php
vendored
Normal file
42
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/FieldFactoryTest.php
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron\Tests;
|
||||||
|
|
||||||
|
use Cron\FieldFactory;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Michael Dowling <mtdowling@gmail.com>
|
||||||
|
*/
|
||||||
|
class FieldFactoryTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \Cron\FieldFactory::getField
|
||||||
|
*/
|
||||||
|
public function testRetrievesFieldInstances()
|
||||||
|
{
|
||||||
|
$mappings = array(
|
||||||
|
0 => 'Cron\MinutesField',
|
||||||
|
1 => 'Cron\HoursField',
|
||||||
|
2 => 'Cron\DayOfMonthField',
|
||||||
|
3 => 'Cron\MonthField',
|
||||||
|
4 => 'Cron\DayOfWeekField',
|
||||||
|
);
|
||||||
|
|
||||||
|
$f = new FieldFactory();
|
||||||
|
|
||||||
|
foreach ($mappings as $position => $class) {
|
||||||
|
$this->assertSame($class, get_class($f->getField($position)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\FieldFactory::getField
|
||||||
|
* @expectedException InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function testValidatesFieldPosition()
|
||||||
|
{
|
||||||
|
$f = new FieldFactory();
|
||||||
|
$f->getField(-1);
|
||||||
|
}
|
||||||
|
}
|
99
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/HoursFieldTest.php
vendored
Normal file
99
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/HoursFieldTest.php
vendored
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron\Tests;
|
||||||
|
|
||||||
|
use Cron\HoursField;
|
||||||
|
use DateTime;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Michael Dowling <mtdowling@gmail.com>
|
||||||
|
*/
|
||||||
|
class HoursFieldTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \Cron\HoursField::validate
|
||||||
|
*/
|
||||||
|
public function testValidatesField()
|
||||||
|
{
|
||||||
|
$f = new HoursField();
|
||||||
|
$this->assertTrue($f->validate('1'));
|
||||||
|
$this->assertTrue($f->validate('00'));
|
||||||
|
$this->assertTrue($f->validate('01'));
|
||||||
|
$this->assertTrue($f->validate('*'));
|
||||||
|
$this->assertFalse($f->validate('*/3,1,1-12'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\HoursField::isSatisfiedBy
|
||||||
|
*/
|
||||||
|
public function testChecksIfSatisfied()
|
||||||
|
{
|
||||||
|
$f = new HoursField();
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime(), '?'));
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTimeImmutable(), '?'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\HoursField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDate()
|
||||||
|
{
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f = new HoursField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-03-15 12:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
|
$d->setTime(11, 15, 0);
|
||||||
|
$f->increment($d, true);
|
||||||
|
$this->assertSame('2011-03-15 10:59:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\HoursField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDateTimeImmutable()
|
||||||
|
{
|
||||||
|
$d = new DateTimeImmutable('2011-03-15 11:15:00');
|
||||||
|
$f = new HoursField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-03-15 12:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\HoursField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDateWithThirtyMinuteOffsetTimezone()
|
||||||
|
{
|
||||||
|
$tz = date_default_timezone_get();
|
||||||
|
date_default_timezone_set('America/St_Johns');
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f = new HoursField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-03-15 12:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
|
$d->setTime(11, 15, 0);
|
||||||
|
$f->increment($d, true);
|
||||||
|
$this->assertSame('2011-03-15 10:59:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
date_default_timezone_set($tz);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\HoursField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementDateWithFifteenMinuteOffsetTimezone()
|
||||||
|
{
|
||||||
|
$tz = date_default_timezone_get();
|
||||||
|
date_default_timezone_set('Asia/Kathmandu');
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f = new HoursField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-03-15 12:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
|
$d->setTime(11, 15, 0);
|
||||||
|
$f->increment($d, true);
|
||||||
|
$this->assertSame('2011-03-15 10:59:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
date_default_timezone_set($tz);
|
||||||
|
}
|
||||||
|
}
|
73
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/MinutesFieldTest.php
vendored
Normal file
73
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/MinutesFieldTest.php
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron\Tests;
|
||||||
|
|
||||||
|
use Cron\MinutesField;
|
||||||
|
use DateTime;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Michael Dowling <mtdowling@gmail.com>
|
||||||
|
*/
|
||||||
|
class MinutesFieldTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MinutesField::validate
|
||||||
|
*/
|
||||||
|
public function testValidatesField()
|
||||||
|
{
|
||||||
|
$f = new MinutesField();
|
||||||
|
$this->assertTrue($f->validate('1'));
|
||||||
|
$this->assertTrue($f->validate('*'));
|
||||||
|
$this->assertFalse($f->validate('*/3,1,1-12'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MinutesField::isSatisfiedBy
|
||||||
|
*/
|
||||||
|
public function testChecksIfSatisfied()
|
||||||
|
{
|
||||||
|
$f = new MinutesField();
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime(), '?'));
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTimeImmutable(), '?'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MinutesField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDate()
|
||||||
|
{
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f = new MinutesField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-03-15 11:16:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
$f->increment($d, true);
|
||||||
|
$this->assertSame('2011-03-15 11:15:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MinutesField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDateTimeImmutable()
|
||||||
|
{
|
||||||
|
$d = new DateTimeImmutable('2011-03-15 11:15:00');
|
||||||
|
$f = new MinutesField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-03-15 11:16:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Various bad syntaxes that are reported to work, but shouldn't.
|
||||||
|
*
|
||||||
|
* @author Chris Tankersley
|
||||||
|
* @since 2017-08-18
|
||||||
|
*/
|
||||||
|
public function testBadSyntaxesShouldNotValidate()
|
||||||
|
{
|
||||||
|
$f = new MinutesField();
|
||||||
|
$this->assertFalse($f->validate('*-1'));
|
||||||
|
$this->assertFalse($f->validate('1-2-3'));
|
||||||
|
$this->assertFalse($f->validate('-1'));
|
||||||
|
}
|
||||||
|
}
|
103
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/MonthFieldTest.php
vendored
Normal file
103
paragonik-backend/vendor/dragonmantank/cron-expression/tests/Cron/MonthFieldTest.php
vendored
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Cron\Tests;
|
||||||
|
|
||||||
|
use Cron\MonthField;
|
||||||
|
use DateTime;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Michael Dowling <mtdowling@gmail.com>
|
||||||
|
*/
|
||||||
|
class MonthFieldTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MonthField::validate
|
||||||
|
*/
|
||||||
|
public function testValidatesField()
|
||||||
|
{
|
||||||
|
$f = new MonthField();
|
||||||
|
$this->assertTrue($f->validate('12'));
|
||||||
|
$this->assertTrue($f->validate('*'));
|
||||||
|
$this->assertFalse($f->validate('*/10,2,1-12'));
|
||||||
|
$this->assertFalse($f->validate('1.fix-regexp'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MonthField::isSatisfiedBy
|
||||||
|
*/
|
||||||
|
public function testChecksIfSatisfied()
|
||||||
|
{
|
||||||
|
$f = new MonthField();
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTime(), '?'));
|
||||||
|
$this->assertTrue($f->isSatisfiedBy(new DateTimeImmutable(), '?'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MonthField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDate()
|
||||||
|
{
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f = new MonthField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-04-01 00:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f->increment($d, true);
|
||||||
|
$this->assertSame('2011-02-28 23:59:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MonthField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDateTimeImmutable()
|
||||||
|
{
|
||||||
|
$d = new DateTimeImmutable('2011-03-15 11:15:00');
|
||||||
|
$f = new MonthField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-04-01 00:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MonthField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsDateWithThirtyMinuteTimezone()
|
||||||
|
{
|
||||||
|
$tz = date_default_timezone_get();
|
||||||
|
date_default_timezone_set('America/St_Johns');
|
||||||
|
$d = new DateTime('2011-03-31 11:59:59');
|
||||||
|
$f = new MonthField();
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2011-04-01 00:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
|
$d = new DateTime('2011-03-15 11:15:00');
|
||||||
|
$f->increment($d, true);
|
||||||
|
$this->assertSame('2011-02-28 23:59:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
date_default_timezone_set($tz);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MonthField::increment
|
||||||
|
*/
|
||||||
|
public function testIncrementsYearAsNeeded()
|
||||||
|
{
|
||||||
|
$f = new MonthField();
|
||||||
|
$d = new DateTime('2011-12-15 00:00:00');
|
||||||
|
$f->increment($d);
|
||||||
|
$this->assertSame('2012-01-01 00:00:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Cron\MonthField::increment
|
||||||
|
*/
|
||||||
|
public function testDecrementsYearAsNeeded()
|
||||||
|
{
|
||||||
|
$f = new MonthField();
|
||||||
|
$d = new DateTime('2011-01-15 00:00:00');
|
||||||
|
$f->increment($d, true);
|
||||||
|
$this->assertSame('2010-12-31 23:59:00', $d->format('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
}
|
241
paragonik-backend/vendor/egulias/email-validator/EmailValidator/EmailLexer.php
vendored
Normal file
241
paragonik-backend/vendor/egulias/email-validator/EmailValidator/EmailLexer.php
vendored
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\EmailValidator;
|
||||||
|
|
||||||
|
use Doctrine\Common\Lexer\AbstractLexer;
|
||||||
|
|
||||||
|
class EmailLexer extends AbstractLexer
|
||||||
|
{
|
||||||
|
//ASCII values
|
||||||
|
const C_DEL = 127;
|
||||||
|
const C_NUL = 0;
|
||||||
|
const S_AT = 64;
|
||||||
|
const S_BACKSLASH = 92;
|
||||||
|
const S_DOT = 46;
|
||||||
|
const S_DQUOTE = 34;
|
||||||
|
const S_OPENPARENTHESIS = 49;
|
||||||
|
const S_CLOSEPARENTHESIS = 261;
|
||||||
|
const S_OPENBRACKET = 262;
|
||||||
|
const S_CLOSEBRACKET = 263;
|
||||||
|
const S_HYPHEN = 264;
|
||||||
|
const S_COLON = 265;
|
||||||
|
const S_DOUBLECOLON = 266;
|
||||||
|
const S_SP = 267;
|
||||||
|
const S_HTAB = 268;
|
||||||
|
const S_CR = 269;
|
||||||
|
const S_LF = 270;
|
||||||
|
const S_IPV6TAG = 271;
|
||||||
|
const S_LOWERTHAN = 272;
|
||||||
|
const S_GREATERTHAN = 273;
|
||||||
|
const S_COMMA = 274;
|
||||||
|
const S_SEMICOLON = 275;
|
||||||
|
const S_OPENQBRACKET = 276;
|
||||||
|
const S_CLOSEQBRACKET = 277;
|
||||||
|
const S_SLASH = 278;
|
||||||
|
const S_EMPTY = null;
|
||||||
|
const GENERIC = 300;
|
||||||
|
const CRLF = 301;
|
||||||
|
const INVALID = 302;
|
||||||
|
const ASCII_INVALID_FROM = 127;
|
||||||
|
const ASCII_INVALID_TO = 199;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3)
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $charValue = array(
|
||||||
|
'(' => self::S_OPENPARENTHESIS,
|
||||||
|
')' => self::S_CLOSEPARENTHESIS,
|
||||||
|
'<' => self::S_LOWERTHAN,
|
||||||
|
'>' => self::S_GREATERTHAN,
|
||||||
|
'[' => self::S_OPENBRACKET,
|
||||||
|
']' => self::S_CLOSEBRACKET,
|
||||||
|
':' => self::S_COLON,
|
||||||
|
';' => self::S_SEMICOLON,
|
||||||
|
'@' => self::S_AT,
|
||||||
|
'\\' => self::S_BACKSLASH,
|
||||||
|
'/' => self::S_SLASH,
|
||||||
|
',' => self::S_COMMA,
|
||||||
|
'.' => self::S_DOT,
|
||||||
|
'"' => self::S_DQUOTE,
|
||||||
|
'-' => self::S_HYPHEN,
|
||||||
|
'::' => self::S_DOUBLECOLON,
|
||||||
|
' ' => self::S_SP,
|
||||||
|
"\t" => self::S_HTAB,
|
||||||
|
"\r" => self::S_CR,
|
||||||
|
"\n" => self::S_LF,
|
||||||
|
"\r\n" => self::CRLF,
|
||||||
|
'IPv6' => self::S_IPV6TAG,
|
||||||
|
'{' => self::S_OPENQBRACKET,
|
||||||
|
'}' => self::S_CLOSEQBRACKET,
|
||||||
|
'' => self::S_EMPTY,
|
||||||
|
'\0' => self::C_NUL,
|
||||||
|
);
|
||||||
|
|
||||||
|
protected $hasInvalidTokens = false;
|
||||||
|
|
||||||
|
protected $previous;
|
||||||
|
|
||||||
|
private static $nullToken = [
|
||||||
|
'value' => '',
|
||||||
|
'type' => null,
|
||||||
|
'position' => 0,
|
||||||
|
];
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->previous = $this->token = self::$nullToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function reset()
|
||||||
|
{
|
||||||
|
$this->hasInvalidTokens = false;
|
||||||
|
parent::reset();
|
||||||
|
$this->previous = $this->token = self::$nullToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasInvalidTokens()
|
||||||
|
{
|
||||||
|
return $this->hasInvalidTokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $type
|
||||||
|
* @throws \UnexpectedValueException
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function find($type)
|
||||||
|
{
|
||||||
|
$search = clone $this;
|
||||||
|
$search->skipUntil($type);
|
||||||
|
|
||||||
|
if (!$search->lookahead) {
|
||||||
|
throw new \UnexpectedValueException($type . ' not found');
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getPrevious
|
||||||
|
*
|
||||||
|
* @return array token
|
||||||
|
*/
|
||||||
|
public function getPrevious()
|
||||||
|
{
|
||||||
|
return $this->previous;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* moveNext
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function moveNext()
|
||||||
|
{
|
||||||
|
$this->previous = $this->token;
|
||||||
|
$hasNext = parent::moveNext();
|
||||||
|
$this->token = $this->token ?: self::$nullToken;
|
||||||
|
|
||||||
|
return $hasNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lexical catchable patterns.
|
||||||
|
*
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
protected function getCatchablePatterns()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'[a-zA-Z_]+[46]?', //ASCII and domain literal
|
||||||
|
'[^\x00-\x7F]', //UTF-8
|
||||||
|
'[0-9]+',
|
||||||
|
'\r\n',
|
||||||
|
'::',
|
||||||
|
'\s+?',
|
||||||
|
'.',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lexical non-catchable patterns.
|
||||||
|
*
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
protected function getNonCatchablePatterns()
|
||||||
|
{
|
||||||
|
return array('[\xA0-\xff]+');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve token type. Also processes the token value if necessary.
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
* @return integer
|
||||||
|
*/
|
||||||
|
protected function getType(&$value)
|
||||||
|
{
|
||||||
|
if ($this->isNullType($value)) {
|
||||||
|
return self::C_NUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->isValid($value)) {
|
||||||
|
return $this->charValue[$value];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->isUTF8Invalid($value)) {
|
||||||
|
$this->hasInvalidTokens = true;
|
||||||
|
return self::INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::GENERIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function isValid($value)
|
||||||
|
{
|
||||||
|
if (isset($this->charValue[$value])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $value
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function isNullType($value)
|
||||||
|
{
|
||||||
|
if ($value === "\0") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $value
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function isUTF8Invalid($value)
|
||||||
|
{
|
||||||
|
if (preg_match('/\p{Cc}+/u', $value)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function getModifiers()
|
||||||
|
{
|
||||||
|
return 'iu';
|
||||||
|
}
|
||||||
|
}
|
104
paragonik-backend/vendor/egulias/email-validator/EmailValidator/EmailParser.php
vendored
Normal file
104
paragonik-backend/vendor/egulias/email-validator/EmailValidator/EmailParser.php
vendored
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\EmailValidator;
|
||||||
|
|
||||||
|
use Egulias\EmailValidator\Exception\ExpectingATEXT;
|
||||||
|
use Egulias\EmailValidator\Exception\NoLocalPart;
|
||||||
|
use Egulias\EmailValidator\Parser\DomainPart;
|
||||||
|
use Egulias\EmailValidator\Parser\LocalPart;
|
||||||
|
use Egulias\EmailValidator\Warning\EmailTooLong;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EmailParser
|
||||||
|
*
|
||||||
|
* @author Eduardo Gulias Davis <me@egulias.com>
|
||||||
|
*/
|
||||||
|
class EmailParser
|
||||||
|
{
|
||||||
|
const EMAIL_MAX_LENGTH = 254;
|
||||||
|
|
||||||
|
protected $warnings;
|
||||||
|
protected $domainPart = '';
|
||||||
|
protected $localPart = '';
|
||||||
|
protected $lexer;
|
||||||
|
protected $localPartParser;
|
||||||
|
protected $domainPartParser;
|
||||||
|
|
||||||
|
public function __construct(EmailLexer $lexer)
|
||||||
|
{
|
||||||
|
$this->lexer = $lexer;
|
||||||
|
$this->localPartParser = new LocalPart($this->lexer);
|
||||||
|
$this->domainPartParser = new DomainPart($this->lexer);
|
||||||
|
$this->warnings = new \SplObjectStorage();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $str
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function parse($str)
|
||||||
|
{
|
||||||
|
$this->lexer->setInput($str);
|
||||||
|
|
||||||
|
if (!$this->hasAtToken()) {
|
||||||
|
throw new NoLocalPart();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$this->localPartParser->parse($str);
|
||||||
|
$this->domainPartParser->parse($str);
|
||||||
|
|
||||||
|
$this->setParts($str);
|
||||||
|
|
||||||
|
if ($this->lexer->hasInvalidTokens()) {
|
||||||
|
throw new ExpectingATEXT();
|
||||||
|
}
|
||||||
|
|
||||||
|
return array('local' => $this->localPart, 'domain' => $this->domainPart);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getWarnings()
|
||||||
|
{
|
||||||
|
$localPartWarnings = $this->localPartParser->getWarnings();
|
||||||
|
$domainPartWarnings = $this->domainPartParser->getWarnings();
|
||||||
|
$this->warnings = array_merge($localPartWarnings, $domainPartWarnings);
|
||||||
|
|
||||||
|
$this->addLongEmailWarning($this->localPart, $this->domainPart);
|
||||||
|
|
||||||
|
return $this->warnings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getParsedDomainPart()
|
||||||
|
{
|
||||||
|
return $this->domainPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setParts($email)
|
||||||
|
{
|
||||||
|
$parts = explode('@', $email);
|
||||||
|
$this->domainPart = $this->domainPartParser->getDomainPart();
|
||||||
|
$this->localPart = $parts[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function hasAtToken()
|
||||||
|
{
|
||||||
|
$this->lexer->moveNext();
|
||||||
|
$this->lexer->moveNext();
|
||||||
|
if ($this->lexer->token['type'] === EmailLexer::S_AT) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $localPart
|
||||||
|
* @param string $parsedDomainPart
|
||||||
|
*/
|
||||||
|
protected function addLongEmailWarning($localPart, $parsedDomainPart)
|
||||||
|
{
|
||||||
|
if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) {
|
||||||
|
$this->warnings[EmailTooLong::CODE] = new EmailTooLong();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
67
paragonik-backend/vendor/egulias/email-validator/EmailValidator/EmailValidator.php
vendored
Normal file
67
paragonik-backend/vendor/egulias/email-validator/EmailValidator/EmailValidator.php
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\EmailValidator;
|
||||||
|
|
||||||
|
use Egulias\EmailValidator\Exception\InvalidEmail;
|
||||||
|
use Egulias\EmailValidator\Validation\EmailValidation;
|
||||||
|
|
||||||
|
class EmailValidator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var EmailLexer
|
||||||
|
*/
|
||||||
|
private $lexer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $warnings;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var InvalidEmail
|
||||||
|
*/
|
||||||
|
protected $error;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->lexer = new EmailLexer();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $email
|
||||||
|
* @param EmailValidation $emailValidation
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isValid($email, EmailValidation $emailValidation)
|
||||||
|
{
|
||||||
|
$isValid = $emailValidation->isValid($email, $this->lexer);
|
||||||
|
$this->warnings = $emailValidation->getWarnings();
|
||||||
|
$this->error = $emailValidation->getError();
|
||||||
|
|
||||||
|
return $isValid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function hasWarnings()
|
||||||
|
{
|
||||||
|
return !empty($this->warnings);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getWarnings()
|
||||||
|
{
|
||||||
|
return $this->warnings;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return InvalidEmail
|
||||||
|
*/
|
||||||
|
public function getError()
|
||||||
|
{
|
||||||
|
return $this->error;
|
||||||
|
}
|
||||||
|
}
|
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php
vendored
Normal file
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\EmailValidator\Exception;
|
||||||
|
|
||||||
|
class AtextAfterCFWS extends InvalidEmail
|
||||||
|
{
|
||||||
|
const CODE = 133;
|
||||||
|
const REASON = "ATEXT found after CFWS";
|
||||||
|
}
|
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/CRLFAtTheEnd.php
vendored
Normal file
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/CRLFAtTheEnd.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\EmailValidator\Exception;
|
||||||
|
|
||||||
|
class CRLFAtTheEnd extends InvalidEmail
|
||||||
|
{
|
||||||
|
const CODE = 149;
|
||||||
|
const REASON = "CRLF at the end";
|
||||||
|
}
|
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/CRLFX2.php
vendored
Normal file
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/CRLFX2.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\EmailValidator\Exception;
|
||||||
|
|
||||||
|
class CRLFX2 extends InvalidEmail
|
||||||
|
{
|
||||||
|
const CODE = 148;
|
||||||
|
const REASON = "Folding whitespace CR LF found twice";
|
||||||
|
}
|
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/CRNoLF.php
vendored
Normal file
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/CRNoLF.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\EmailValidator\Exception;
|
||||||
|
|
||||||
|
class CRNoLF extends InvalidEmail
|
||||||
|
{
|
||||||
|
const CODE = 150;
|
||||||
|
const REASON = "Missing LF after CR";
|
||||||
|
}
|
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/CharNotAllowed.php
vendored
Normal file
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/CharNotAllowed.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\EmailValidator\Exception;
|
||||||
|
|
||||||
|
class CharNotAllowed extends InvalidEmail
|
||||||
|
{
|
||||||
|
const CODE = 201;
|
||||||
|
const REASON = "Non allowed character in domain";
|
||||||
|
}
|
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/CommaInDomain.php
vendored
Normal file
9
paragonik-backend/vendor/egulias/email-validator/EmailValidator/Exception/CommaInDomain.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\EmailValidator\Exception;
|
||||||
|
|
||||||
|
class CommaInDomain extends InvalidEmail
|
||||||
|
{
|
||||||
|
const CODE = 200;
|
||||||
|
const REASON = "Comma ',' is not allowed in domain part";
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user