From faaab9c4d3fa5ccad774b441b4fd9831b2692522 Mon Sep 17 00:00:00 2001 From: ouidade Date: Tue, 3 Jan 2023 19:00:16 +0100 Subject: [PATCH] maj --- CHANGELOG.md | 91 ++ assets/.gitkeep | 2 +- bin/composer.phar | Bin 2291189 -> 2810737 bytes bin/gpm | 2 +- bin/grav | 2 +- bin/plugin | 2 +- composer.json | 3 +- composer.lock | 1032 +++++++---------- index.php | 2 +- system/blueprints/config/system.yaml | 7 + system/blueprints/flex/user-accounts.yaml | 11 + system/config/system.yaml | 2 + system/defines.php | 4 +- system/install.php | 2 +- system/router.php | 2 +- system/src/Grav/Common/Assets.php | 2 +- system/src/Grav/Common/Assets/BaseAsset.php | 2 +- system/src/Grav/Common/Assets/BlockAssets.php | 2 +- system/src/Grav/Common/Assets/Css.php | 2 +- system/src/Grav/Common/Assets/InlineCss.php | 2 +- system/src/Grav/Common/Assets/InlineJs.php | 2 +- .../src/Grav/Common/Assets/InlineJsModule.php | 2 +- system/src/Grav/Common/Assets/Js.php | 2 +- system/src/Grav/Common/Assets/JsModule.php | 2 +- system/src/Grav/Common/Assets/Link.php | 2 +- system/src/Grav/Common/Assets/Pipeline.php | 2 +- .../Common/Assets/Traits/AssetUtilsTrait.php | 2 +- .../Assets/Traits/LegacyAssetsTrait.php | 2 +- .../Assets/Traits/TestingAssetsTrait.php | 2 +- system/src/Grav/Common/Backup/Backups.php | 2 +- system/src/Grav/Common/Browser.php | 2 +- system/src/Grav/Common/Cache.php | 2 +- system/src/Grav/Common/Composer.php | 2 +- .../src/Grav/Common/Config/CompiledBase.php | 2 +- .../Grav/Common/Config/CompiledBlueprints.php | 2 +- .../src/Grav/Common/Config/CompiledConfig.php | 2 +- .../Grav/Common/Config/CompiledLanguages.php | 2 +- system/src/Grav/Common/Config/Config.php | 2 +- .../Grav/Common/Config/ConfigFileFinder.php | 2 +- system/src/Grav/Common/Config/Languages.php | 2 +- system/src/Grav/Common/Config/Setup.php | 9 +- system/src/Grav/Common/Data/Blueprint.php | 10 +- .../src/Grav/Common/Data/BlueprintSchema.php | 2 +- system/src/Grav/Common/Data/Blueprints.php | 2 +- system/src/Grav/Common/Data/Data.php | 2 +- system/src/Grav/Common/Data/DataInterface.php | 2 +- system/src/Grav/Common/Data/Validation.php | 24 +- .../Grav/Common/Data/ValidationException.php | 2 +- system/src/Grav/Common/Debugger.php | 2 +- system/src/Grav/Common/Errors/BareHandler.php | 2 +- system/src/Grav/Common/Errors/Errors.php | 2 +- .../Grav/Common/Errors/SimplePageHandler.php | 2 +- .../src/Grav/Common/Errors/SystemFacade.php | 23 +- system/src/Grav/Common/File/CompiledFile.php | 92 +- .../src/Grav/Common/File/CompiledJsonFile.php | 2 +- .../Grav/Common/File/CompiledMarkdownFile.php | 2 +- .../src/Grav/Common/File/CompiledYamlFile.php | 2 +- .../src/Grav/Common/Filesystem/Archiver.php | 2 +- system/src/Grav/Common/Filesystem/Folder.php | 112 +- .../RecursiveDirectoryFilterIterator.php | 2 +- .../RecursiveFolderFilterIterator.php | 2 +- .../Grav/Common/Filesystem/ZipArchiver.php | 2 +- .../src/Grav/Common/Flex/FlexCollection.php | 2 +- system/src/Grav/Common/Flex/FlexIndex.php | 2 +- system/src/Grav/Common/Flex/FlexObject.php | 2 +- .../Flex/Traits/FlexCollectionTrait.php | 2 +- .../Common/Flex/Traits/FlexCommonTrait.php | 2 +- .../Grav/Common/Flex/Traits/FlexGravTrait.php | 2 +- .../Common/Flex/Traits/FlexIndexTrait.php | 2 +- .../Common/Flex/Traits/FlexObjectTrait.php | 2 +- .../Flex/Types/Generic/GenericCollection.php | 2 +- .../Flex/Types/Generic/GenericIndex.php | 2 +- .../Flex/Types/Generic/GenericObject.php | 2 +- .../Flex/Types/Pages/PageCollection.php | 2 +- .../Common/Flex/Types/Pages/PageIndex.php | 11 +- .../Common/Flex/Types/Pages/PageObject.php | 31 +- .../Flex/Types/Pages/Storage/PageStorage.php | 2 +- .../Types/Pages/Traits/PageContentTrait.php | 2 +- .../Types/Pages/Traits/PageLegacyTrait.php | 2 +- .../Types/Pages/Traits/PageRoutableTrait.php | 2 +- .../Types/Pages/Traits/PageTranslateTrait.php | 2 +- .../Types/UserGroups/UserGroupCollection.php | 2 +- .../Flex/Types/UserGroups/UserGroupIndex.php | 2 +- .../Flex/Types/UserGroups/UserGroupObject.php | 2 +- .../Types/Users/Storage/UserFileStorage.php | 2 +- .../Types/Users/Storage/UserFolderStorage.php | 2 +- .../Users/Traits/UserObjectLegacyTrait.php | 2 +- .../Flex/Types/Users/UserCollection.php | 2 +- .../Common/Flex/Types/Users/UserIndex.php | 12 +- .../Common/Flex/Types/Users/UserObject.php | 82 +- system/src/Grav/Common/Form/FormFlash.php | 2 +- .../Grav/Common/GPM/AbstractCollection.php | 2 +- .../GPM/Common/AbstractPackageCollection.php | 2 +- .../Common/GPM/Common/CachedCollection.php | 2 +- system/src/Grav/Common/GPM/Common/Package.php | 2 +- system/src/Grav/Common/GPM/GPM.php | 3 +- system/src/Grav/Common/GPM/Installer.php | 2 +- system/src/Grav/Common/GPM/Licenses.php | 2 +- .../GPM/Local/AbstractPackageCollection.php | 2 +- system/src/Grav/Common/GPM/Local/Package.php | 2 +- system/src/Grav/Common/GPM/Local/Packages.php | 2 +- system/src/Grav/Common/GPM/Local/Plugins.php | 2 +- system/src/Grav/Common/GPM/Local/Themes.php | 2 +- .../GPM/Remote/AbstractPackageCollection.php | 4 +- .../src/Grav/Common/GPM/Remote/GravCore.php | 2 +- system/src/Grav/Common/GPM/Remote/Package.php | 2 +- .../src/Grav/Common/GPM/Remote/Packages.php | 2 +- system/src/Grav/Common/GPM/Remote/Plugins.php | 2 +- system/src/Grav/Common/GPM/Remote/Themes.php | 2 +- system/src/Grav/Common/GPM/Upgrader.php | 2 +- system/src/Grav/Common/Getters.php | 2 +- system/src/Grav/Common/Grav.php | 31 +- system/src/Grav/Common/GravTrait.php | 2 +- system/src/Grav/Common/HTTP/Client.php | 2 +- system/src/Grav/Common/HTTP/Response.php | 2 +- system/src/Grav/Common/Helpers/Base32.php | 2 +- system/src/Grav/Common/Helpers/Excerpts.php | 2 +- system/src/Grav/Common/Helpers/Exif.php | 2 +- system/src/Grav/Common/Helpers/LogViewer.php | 2 +- system/src/Grav/Common/Helpers/Truncator.php | 2 +- system/src/Grav/Common/Helpers/YamlLinter.php | 2 +- system/src/Grav/Common/Inflector.php | 2 +- system/src/Grav/Common/Iterator.php | 2 +- system/src/Grav/Common/Language/Language.php | 2 +- .../Grav/Common/Language/LanguageCodes.php | 4 +- system/src/Grav/Common/Markdown/Parsedown.php | 2 +- .../Grav/Common/Markdown/ParsedownExtra.php | 2 +- .../Common/Markdown/ParsedownGravTrait.php | 2 +- .../Media/Interfaces/AudioMediaInterface.php | 2 +- .../Interfaces/ImageManipulateInterface.php | 2 +- .../Media/Interfaces/ImageMediaInterface.php | 2 +- .../Interfaces/MediaCollectionInterface.php | 2 +- .../Media/Interfaces/MediaFileInterface.php | 2 +- .../Media/Interfaces/MediaInterface.php | 2 +- .../Media/Interfaces/MediaLinkInterface.php | 2 +- .../Media/Interfaces/MediaObjectInterface.php | 22 +- .../Media/Interfaces/MediaPlayerInterface.php | 2 +- .../Media/Interfaces/MediaUploadInterface.php | 2 +- .../Media/Interfaces/VideoMediaInterface.php | 2 +- .../Common/Media/Traits/AudioMediaTrait.php | 2 +- .../Common/Media/Traits/ImageLoadingTrait.php | 2 +- .../Common/Media/Traits/ImageMediaTrait.php | 2 +- .../Common/Media/Traits/MediaFileTrait.php | 2 +- .../Common/Media/Traits/MediaObjectTrait.php | 2 +- .../Common/Media/Traits/MediaPlayerTrait.php | 2 +- .../Grav/Common/Media/Traits/MediaTrait.php | 2 +- .../Common/Media/Traits/MediaUploadTrait.php | 2 +- .../Common/Media/Traits/StaticResizeTrait.php | 2 +- .../Media/Traits/ThumbnailMediaTrait.php | 2 +- .../Common/Media/Traits/VideoMediaTrait.php | 2 +- system/src/Grav/Common/Page/Collection.php | 2 +- system/src/Grav/Common/Page/Header.php | 2 +- .../Interfaces/PageCollectionInterface.php | 2 +- .../Page/Interfaces/PageContentInterface.php | 2 +- .../Common/Page/Interfaces/PageInterface.php | 2 +- .../Page/Interfaces/PagesSourceInterface.php | 2 +- .../Grav/Common/Page/Markdown/Excerpts.php | 2 +- system/src/Grav/Common/Page/Media.php | 4 +- .../Grav/Common/Page/Medium/AbstractMedia.php | 2 +- .../Grav/Common/Page/Medium/AudioMedium.php | 2 +- .../Grav/Common/Page/Medium/GlobalMedia.php | 2 +- .../src/Grav/Common/Page/Medium/ImageFile.php | 2 +- .../Grav/Common/Page/Medium/ImageMedium.php | 14 +- system/src/Grav/Common/Page/Medium/Link.php | 2 +- system/src/Grav/Common/Page/Medium/Medium.php | 2 +- .../Grav/Common/Page/Medium/MediumFactory.php | 2 +- .../Common/Page/Medium/ParsedownHtmlTrait.php | 2 +- .../Page/Medium/RenderableInterface.php | 2 +- .../Common/Page/Medium/StaticImageMedium.php | 2 +- .../Common/Page/Medium/StaticResizeTrait.php | 2 +- .../Page/Medium/ThumbnailImageMedium.php | 2 +- .../Common/Page/Medium/VectorImageMedium.php | 2 +- .../Grav/Common/Page/Medium/VideoMedium.php | 2 +- system/src/Grav/Common/Page/Page.php | 9 +- system/src/Grav/Common/Page/Pages.php | 68 +- system/src/Grav/Common/Page/Types.php | 2 +- system/src/Grav/Common/Plugin.php | 2 +- system/src/Grav/Common/Plugins.php | 2 +- .../Common/Processors/AssetsProcessor.php | 2 +- .../Common/Processors/BackupsProcessor.php | 2 +- .../Processors/DebuggerAssetsProcessor.php | 2 +- .../Processors/Events/RequestHandlerEvent.php | 2 +- .../Common/Processors/InitializeProcessor.php | 5 +- .../Grav/Common/Processors/PagesProcessor.php | 2 +- .../Common/Processors/PluginsProcessor.php | 2 +- .../Grav/Common/Processors/ProcessorBase.php | 2 +- .../Common/Processors/ProcessorInterface.php | 2 +- .../Common/Processors/RenderProcessor.php | 2 +- .../Common/Processors/RequestProcessor.php | 2 +- .../Common/Processors/SchedulerProcessor.php | 2 +- .../Grav/Common/Processors/TasksProcessor.php | 2 +- .../Common/Processors/ThemesProcessor.php | 2 +- .../Grav/Common/Processors/TwigProcessor.php | 2 +- system/src/Grav/Common/Scheduler/Cron.php | 2 +- .../Grav/Common/Scheduler/IntervalTrait.php | 2 +- system/src/Grav/Common/Scheduler/Job.php | 2 +- .../src/Grav/Common/Scheduler/Scheduler.php | 2 +- system/src/Grav/Common/Security.php | 32 +- .../Service/AccountsServiceProvider.php | 2 +- .../Common/Service/AssetsServiceProvider.php | 2 +- .../Common/Service/BackupsServiceProvider.php | 2 +- .../Common/Service/ConfigServiceProvider.php | 2 +- .../Common/Service/ErrorServiceProvider.php | 2 +- .../Service/FilesystemServiceProvider.php | 2 +- .../Common/Service/FlexServiceProvider.php | 10 +- .../Service/InflectorServiceProvider.php | 2 +- .../Common/Service/LoggerServiceProvider.php | 2 +- .../Common/Service/OutputServiceProvider.php | 2 +- .../Common/Service/PagesServiceProvider.php | 2 +- .../Common/Service/RequestServiceProvider.php | 2 +- .../Service/SchedulerServiceProvider.php | 2 +- .../Common/Service/SessionServiceProvider.php | 2 +- .../Common/Service/StreamsServiceProvider.php | 2 +- .../Common/Service/TaskServiceProvider.php | 2 +- system/src/Grav/Common/Session.php | 14 +- system/src/Grav/Common/Taxonomy.php | 2 +- system/src/Grav/Common/Theme.php | 2 +- system/src/Grav/Common/Themes.php | 2 +- .../Common/Twig/Exception/TwigException.php | 2 +- .../Twig/Extension/FilesystemExtension.php | 2 +- .../Common/Twig/Extension/GravExtension.php | 40 +- .../Grav/Common/Twig/Node/TwigNodeCache.php | 2 +- .../Grav/Common/Twig/Node/TwigNodeLink.php | 2 +- .../Common/Twig/Node/TwigNodeMarkdown.php | 2 +- .../Grav/Common/Twig/Node/TwigNodeRender.php | 2 +- .../Grav/Common/Twig/Node/TwigNodeScript.php | 2 +- .../Grav/Common/Twig/Node/TwigNodeStyle.php | 2 +- .../Grav/Common/Twig/Node/TwigNodeSwitch.php | 2 +- .../Grav/Common/Twig/Node/TwigNodeThrow.php | 2 +- .../Common/Twig/Node/TwigNodeTryCatch.php | 2 +- .../Twig/TokenParser/TwigTokenParserCache.php | 2 +- .../Twig/TokenParser/TwigTokenParserLink.php | 2 +- .../TokenParser/TwigTokenParserMarkdown.php | 2 +- .../TokenParser/TwigTokenParserRender.php | 2 +- .../TokenParser/TwigTokenParserScript.php | 2 +- .../Twig/TokenParser/TwigTokenParserStyle.php | 2 +- .../TokenParser/TwigTokenParserSwitch.php | 2 +- .../Twig/TokenParser/TwigTokenParserThrow.php | 2 +- .../TokenParser/TwigTokenParserTryCatch.php | 2 +- system/src/Grav/Common/Twig/Twig.php | 2 +- .../Common/Twig/TwigClockworkDataSource.php | 2 +- .../Grav/Common/Twig/TwigClockworkDumper.php | 2 +- .../src/Grav/Common/Twig/TwigEnvironment.php | 2 +- system/src/Grav/Common/Twig/TwigExtension.php | 2 +- .../Grav/Common/Twig/WriteCacheFileTrait.php | 2 +- system/src/Grav/Common/Uri.php | 2 +- system/src/Grav/Common/User/Access.php | 2 +- .../src/Grav/Common/User/Authentication.php | 2 +- system/src/Grav/Common/User/DataUser/User.php | 2 +- .../Common/User/DataUser/UserCollection.php | 5 +- system/src/Grav/Common/User/Group.php | 2 +- .../User/Interfaces/AuthorizeInterface.php | 2 +- .../Interfaces/UserCollectionInterface.php | 2 +- .../User/Interfaces/UserGroupInterface.php | 2 +- .../Common/User/Interfaces/UserInterface.php | 2 +- .../src/Grav/Common/User/Traits/UserTrait.php | 2 +- system/src/Grav/Common/User/User.php | 2 +- system/src/Grav/Common/Utils.php | 26 +- system/src/Grav/Common/Yaml.php | 2 +- .../Grav/Console/Application/Application.php | 2 +- .../CommandLoader/PluginCommandLoader.php | 2 +- .../Console/Application/GpmApplication.php | 2 +- .../Console/Application/GravApplication.php | 2 +- .../Console/Application/PluginApplication.php | 2 +- system/src/Grav/Console/Cli/BackupCommand.php | 2 +- system/src/Grav/Console/Cli/CleanCommand.php | 2 +- .../Grav/Console/Cli/ClearCacheCommand.php | 2 +- .../src/Grav/Console/Cli/ComposerCommand.php | 2 +- .../src/Grav/Console/Cli/InstallCommand.php | 4 +- .../src/Grav/Console/Cli/LogViewerCommand.php | 2 +- .../Grav/Console/Cli/NewProjectCommand.php | 2 +- .../Cli/PageSystemValidatorCommand.php | 2 +- .../src/Grav/Console/Cli/SandboxCommand.php | 2 +- .../src/Grav/Console/Cli/SchedulerCommand.php | 2 +- .../src/Grav/Console/Cli/SecurityCommand.php | 2 +- system/src/Grav/Console/Cli/ServerCommand.php | 2 +- .../Grav/Console/Cli/YamlLinterCommand.php | 2 +- system/src/Grav/Console/ConsoleCommand.php | 2 +- system/src/Grav/Console/ConsoleTrait.php | 4 +- .../Grav/Console/Gpm/DirectInstallCommand.php | 5 +- system/src/Grav/Console/Gpm/IndexCommand.php | 2 +- system/src/Grav/Console/Gpm/InfoCommand.php | 2 +- .../src/Grav/Console/Gpm/InstallCommand.php | 6 +- .../Grav/Console/Gpm/SelfupgradeCommand.php | 4 +- .../src/Grav/Console/Gpm/UninstallCommand.php | 2 +- system/src/Grav/Console/Gpm/UpdateCommand.php | 2 +- .../src/Grav/Console/Gpm/VersionCommand.php | 2 +- system/src/Grav/Console/GpmCommand.php | 2 +- system/src/Grav/Console/GravCommand.php | 2 +- .../Grav/Console/Plugin/PluginListCommand.php | 2 +- .../Grav/Console/TerminalObjects/Table.php | 2 +- .../Grav/Events/BeforeSessionStartEvent.php | 36 + system/src/Grav/Events/FlexRegisterEvent.php | 2 +- .../Grav/Events/PermissionsRegisterEvent.php | 2 +- system/src/Grav/Events/PluginsLoadedEvent.php | 2 +- system/src/Grav/Events/SessionStartEvent.php | 2 +- system/src/Grav/Framework/Acl/Access.php | 2 +- system/src/Grav/Framework/Acl/Action.php | 2 +- system/src/Grav/Framework/Acl/Permissions.php | 2 +- .../Grav/Framework/Acl/PermissionsReader.php | 2 +- .../Framework/Acl/RecursiveActionIterator.php | 2 +- .../Grav/Framework/Cache/AbstractCache.php | 2 +- .../Framework/Cache/Adapter/ChainCache.php | 2 +- .../Framework/Cache/Adapter/DoctrineCache.php | 2 +- .../Framework/Cache/Adapter/FileCache.php | 2 +- .../Framework/Cache/Adapter/MemoryCache.php | 2 +- .../Framework/Cache/Adapter/SessionCache.php | 2 +- .../Grav/Framework/Cache/CacheInterface.php | 2 +- .../src/Grav/Framework/Cache/CacheTrait.php | 5 +- .../Cache/Exception/CacheException.php | 2 +- .../Exception/InvalidArgumentException.php | 2 +- .../Collection/AbstractFileCollection.php | 2 +- .../Collection/AbstractIndexCollection.php | 2 +- .../Collection/AbstractLazyCollection.php | 2 +- .../Framework/Collection/ArrayCollection.php | 2 +- .../Collection/CollectionInterface.php | 2 +- .../Framework/Collection/FileCollection.php | 2 +- .../Collection/FileCollectionInterface.php | 2 +- .../Grav/Framework/Compat/Serializable.php | 2 +- .../Framework/ContentBlock/ContentBlock.php | 2 +- .../ContentBlock/ContentBlockInterface.php | 2 +- .../Grav/Framework/ContentBlock/HtmlBlock.php | 2 +- .../ContentBlock/HtmlBlockInterface.php | 2 +- .../Contracts/Media/MediaObjectInterface.php | 52 + .../Contracts/Object/IdentifierInterface.php | 27 + .../RelationshipIdentifierInterface.php | 28 + .../Relationships/RelationshipInterface.php | 81 ++ .../Relationships/RelationshipsInterface.php | 53 + .../ToManyRelationshipInterface.php | 55 + .../ToOneRelationshipInterface.php | 37 + .../Traits/ControllerResponseTrait.php | 2 +- system/src/Grav/Framework/DI/Container.php | 2 +- .../src/Grav/Framework/File/AbstractFile.php | 2 +- system/src/Grav/Framework/File/CsvFile.php | 2 +- system/src/Grav/Framework/File/DataFile.php | 2 +- system/src/Grav/Framework/File/File.php | 2 +- .../File/Formatter/AbstractFormatter.php | 2 +- .../Framework/File/Formatter/CsvFormatter.php | 2 +- .../Framework/File/Formatter/IniFormatter.php | 2 +- .../File/Formatter/JsonFormatter.php | 2 +- .../File/Formatter/MarkdownFormatter.php | 2 +- .../File/Formatter/SerializeFormatter.php | 2 +- .../File/Formatter/YamlFormatter.php | 2 +- system/src/Grav/Framework/File/IniFile.php | 2 +- .../Interfaces/FileFormatterInterface.php | 2 +- .../File/Interfaces/FileInterface.php | 2 +- system/src/Grav/Framework/File/JsonFile.php | 2 +- .../src/Grav/Framework/File/MarkdownFile.php | 2 +- system/src/Grav/Framework/File/YamlFile.php | 2 +- .../Grav/Framework/Filesystem/Filesystem.php | 2 +- .../Interfaces/FilesystemInterface.php | 2 +- system/src/Grav/Framework/Flex/Flex.php | 2 +- .../Grav/Framework/Flex/FlexCollection.php | 6 +- .../src/Grav/Framework/Flex/FlexDirectory.php | 78 +- .../Grav/Framework/Flex/FlexDirectoryForm.php | 3 +- system/src/Grav/Framework/Flex/FlexForm.php | 3 +- .../src/Grav/Framework/Flex/FlexFormFlash.php | 2 +- .../Grav/Framework/Flex/FlexIdentifier.php | 75 ++ system/src/Grav/Framework/Flex/FlexIndex.php | 6 +- system/src/Grav/Framework/Flex/FlexObject.php | 16 +- .../Interfaces/FlexAuthorizeInterface.php | 2 +- .../Interfaces/FlexCollectionInterface.php | 2 +- .../Flex/Interfaces/FlexCommonInterface.php | 2 +- .../Interfaces/FlexDirectoryFormInterface.php | 2 +- .../Interfaces/FlexDirectoryInterface.php | 2 +- .../Flex/Interfaces/FlexFormInterface.php | 2 +- .../Flex/Interfaces/FlexIndexInterface.php | 2 +- .../Flex/Interfaces/FlexInterface.php | 2 +- .../Interfaces/FlexObjectFormInterface.php | 2 +- .../Flex/Interfaces/FlexObjectInterface.php | 2 +- .../Flex/Interfaces/FlexStorageInterface.php | 2 +- .../Interfaces/FlexTranslateInterface.php | 2 +- .../Flex/Pages/FlexPageCollection.php | 2 +- .../Framework/Flex/Pages/FlexPageIndex.php | 2 +- .../Framework/Flex/Pages/FlexPageObject.php | 2 +- .../Flex/Pages/Traits/PageAuthorsTrait.php | 2 +- .../Flex/Pages/Traits/PageContentTrait.php | 2 +- .../Flex/Pages/Traits/PageLegacyTrait.php | 2 +- .../Flex/Pages/Traits/PageRoutableTrait.php | 2 +- .../Flex/Pages/Traits/PageTranslateTrait.php | 2 +- .../Storage/AbstractFilesystemStorage.php | 2 +- .../Framework/Flex/Storage/FileStorage.php | 2 +- .../Framework/Flex/Storage/FolderStorage.php | 2 +- .../Framework/Flex/Storage/SimpleStorage.php | 2 +- .../Flex/Traits/FlexAuthorizeTrait.php | 2 +- .../Framework/Flex/Traits/FlexMediaTrait.php | 58 +- .../Flex/Traits/FlexRelatedDirectoryTrait.php | 2 +- .../Flex/Traits/FlexRelationshipsTrait.php | 61 + system/src/Grav/Framework/Form/FormFlash.php | 22 +- .../src/Grav/Framework/Form/FormFlashFile.php | 11 +- .../Form/Interfaces/FormFactoryInterface.php | 2 +- .../Form/Interfaces/FormFlashInterface.php | 9 +- .../Form/Interfaces/FormInterface.php | 2 +- .../Grav/Framework/Form/Traits/FormTrait.php | 31 +- .../Framework/Interfaces/RenderInterface.php | 2 +- .../Logger/Processors/UserProcessor.php | 2 +- .../Interfaces/MediaCollectionInterface.php | 2 +- .../Media/Interfaces/MediaInterface.php | 2 +- .../Interfaces/MediaManipulationInterface.php | 2 +- .../Media/Interfaces/MediaObjectInterface.php | 32 +- .../Grav/Framework/Media/MediaIdentifier.php | 150 +++ .../src/Grav/Framework/Media/MediaObject.php | 215 ++++ .../Framework/Media/UploadedMediaObject.php | 172 +++ system/src/Grav/Framework/Mime/MimeTypes.php | 2 +- .../Object/Access/ArrayAccessTrait.php | 2 +- .../Object/Access/NestedArrayAccessTrait.php | 2 +- .../Access/NestedPropertyCollectionTrait.php | 2 +- .../Object/Access/NestedPropertyTrait.php | 2 +- .../Object/Access/OverloadedPropertyTrait.php | 2 +- .../src/Grav/Framework/Object/ArrayObject.php | 2 +- .../Object/Base/ObjectCollectionTrait.php | 2 +- .../Framework/Object/Base/ObjectTrait.php | 2 +- .../Collection/ObjectExpressionVisitor.php | 2 +- .../Object/Identifiers/Identifier.php | 66 ++ .../NestedObjectCollectionInterface.php | 2 +- .../Interfaces/NestedObjectInterface.php | 2 +- .../Interfaces/ObjectCollectionInterface.php | 2 +- .../Object/Interfaces/ObjectInterface.php | 2 +- .../src/Grav/Framework/Object/LazyObject.php | 2 +- .../Framework/Object/ObjectCollection.php | 2 +- .../src/Grav/Framework/Object/ObjectIndex.php | 2 +- .../Object/Property/ArrayPropertyTrait.php | 2 +- .../Object/Property/LazyPropertyTrait.php | 2 +- .../Object/Property/MixedPropertyTrait.php | 2 +- .../Object/Property/ObjectPropertyTrait.php | 2 +- .../Grav/Framework/Object/PropertyObject.php | 2 +- .../Pagination/AbstractPagination.php | 2 +- .../Pagination/AbstractPaginationPage.php | 2 +- .../Interfaces/PaginationInterface.php | 2 +- .../Interfaces/PaginationPageInterface.php | 2 +- .../Grav/Framework/Pagination/Pagination.php | 2 +- .../Framework/Pagination/PaginationPage.php | 2 +- .../src/Grav/Framework/Psr7/AbstractUri.php | 2 +- system/src/Grav/Framework/Psr7/Request.php | 2 +- system/src/Grav/Framework/Psr7/Response.php | 2 +- .../src/Grav/Framework/Psr7/ServerRequest.php | 2 +- system/src/Grav/Framework/Psr7/Stream.php | 2 +- .../Psr7/Traits/MessageDecoratorTrait.php | 2 +- .../Psr7/Traits/RequestDecoratorTrait.php | 2 +- .../Psr7/Traits/ResponseDecoratorTrait.php | 2 +- .../Traits/ServerRequestDecoratorTrait.php | 2 +- .../Psr7/Traits/StreamDecoratorTrait.php | 2 +- .../Traits/UploadedFileDecoratorTrait.php | 2 +- .../Psr7/Traits/UriDecorationTrait.php | 2 +- .../src/Grav/Framework/Psr7/UploadedFile.php | 2 +- system/src/Grav/Framework/Psr7/Uri.php | 2 +- .../Framework/Relationships/Relationships.php | 217 ++++ .../Relationships/ToManyRelationship.php | 259 +++++ .../Relationships/ToOneRelationship.php | 207 ++++ .../Traits/RelationshipTrait.php | 128 ++ .../Exception/InvalidArgumentException.php | 2 +- .../Exception/NotFoundException.php | 2 +- .../Exception/NotHandledException.php | 2 +- .../Exception/PageExpiredException.php | 2 +- .../Exception/RequestException.php | 2 +- .../RequestHandler/Middlewares/Exceptions.php | 6 +- .../Middlewares/MultipartRequestSupport.php | 123 ++ .../RequestHandler/RequestHandler.php | 2 +- .../Traits/RequestHandlerTrait.php | 6 +- system/src/Grav/Framework/Route/Route.php | 2 +- .../src/Grav/Framework/Route/RouteFactory.php | 2 +- .../Session/Exceptions/SessionException.php | 2 +- .../src/Grav/Framework/Session/Messages.php | 2 +- system/src/Grav/Framework/Session/Session.php | 8 +- .../Framework/Session/SessionInterface.php | 2 +- system/src/Grav/Framework/Uri/Uri.php | 2 +- system/src/Grav/Framework/Uri/UriFactory.php | 2 +- .../src/Grav/Framework/Uri/UriPartsFilter.php | 2 +- system/src/Grav/Installer/Install.php | 2 +- .../src/Grav/Installer/InstallException.php | 2 +- system/src/Grav/Installer/Versions.php | 2 +- system/src/Grav/Installer/YamlUpdater.php | 2 +- user/config/versions.yaml | 3 +- 473 files changed, 3719 insertions(+), 1292 deletions(-) create mode 100644 system/src/Grav/Events/BeforeSessionStartEvent.php create mode 100644 system/src/Grav/Framework/Contracts/Media/MediaObjectInterface.php create mode 100644 system/src/Grav/Framework/Contracts/Object/IdentifierInterface.php create mode 100644 system/src/Grav/Framework/Contracts/Relationships/RelationshipIdentifierInterface.php create mode 100644 system/src/Grav/Framework/Contracts/Relationships/RelationshipInterface.php create mode 100644 system/src/Grav/Framework/Contracts/Relationships/RelationshipsInterface.php create mode 100644 system/src/Grav/Framework/Contracts/Relationships/ToManyRelationshipInterface.php create mode 100644 system/src/Grav/Framework/Contracts/Relationships/ToOneRelationshipInterface.php create mode 100644 system/src/Grav/Framework/Flex/FlexIdentifier.php create mode 100644 system/src/Grav/Framework/Flex/Traits/FlexRelationshipsTrait.php create mode 100644 system/src/Grav/Framework/Media/MediaIdentifier.php create mode 100644 system/src/Grav/Framework/Media/MediaObject.php create mode 100644 system/src/Grav/Framework/Media/UploadedMediaObject.php create mode 100644 system/src/Grav/Framework/Object/Identifiers/Identifier.php create mode 100644 system/src/Grav/Framework/Relationships/Relationships.php create mode 100644 system/src/Grav/Framework/Relationships/ToManyRelationship.php create mode 100644 system/src/Grav/Framework/Relationships/ToOneRelationship.php create mode 100644 system/src/Grav/Framework/Relationships/Traits/RelationshipTrait.php create mode 100644 system/src/Grav/Framework/RequestHandler/Middlewares/MultipartRequestSupport.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b396bd..ee182b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,94 @@ +# v1.7.38 +## 01/02/2023 + +1. [](#new) + * New `onBeforeSessionStart()` event to be used to store data lost during session regeneration (e.g. login) +1. [](#improved) + * Vendor library updates to latest versions + * Updated `bin/composer.phar` to latest `2.4.4` version [#3627](https://github.com/getgrav/grav/issues/3627) +1. [](#bugfix) + + * Don't fail hard if pages recurse with same path + * Github workflows security hardening [#3624](https://github.com/getgrav/grav/pull/3624) + +# v1.7.37.1 +## 10/05/2022 + +1. [](#bugfix) + * Fixed a bad return type [#3630](https://github.com/getgrav/grav/issues/3630) + +# v1.7.37 +## 10/05/2022 + +1. [](#new) + * Added new `onPageHeaders()` event to allow for header modification as needed + * Added a `system.pages.dirs` configuration option to allow for configurable paths, and multiple page paths + * Added new `Pages::getSimplePagesHash` which is useful for caching pages specific data + * Updated to latest vendor libraries +1. [](#bugfix) + * An attempt to workaround windows reading locked file issue [getgrav/grav-plugin-admin#2299](https://github.com/getgrav/grav-plugin-admin/issues/2299) + * Force user index file to be updated to fix email addresses [getgrav/grav-plugin-login#229](https://github.com/getgrav/grav-plugin-login/issues/229) + +# v1.7.36 +## 09/08/2022 + +1. [](#new) + * Added `authorize-*@:` support for Flex blueprints, e.g. `authorize-disabled@: not delete` disables the field if user does not have access to delete object + * Added support for `flex-ignore@` to hide all the nested fields in the blueprint +1. [](#bugfix) + * Fixed login with a capitalised email address when using old users [getgrav/grav-plugin-login#229](https://github.com/getgrav/grav-plugin-login/issues/229) + +# v1.7.35 +## 08/04/2022 + +1. [](#new) + * Added support for `multipart/form-data` content type in PUT and PATCH requests + * Added support for object relationships + * Added variables `$environment` (string), `$request` (PSR-7 ServerRequestInterface|null) and `$uri` (PSR-7 Uri|null) to be used in `setup.php` +1. [](#improved) + * Minor vendor updates + +# v1.7.34 +## 06/14/2022 + +1. [](#new) + * Added back Yiddish to Language Codes [#3336](https://github.com/getgrav/grav/pull/3336) + * Ignore upcoming `media.json` file in media +1. [](#bugfix) + * Regression: Fixed saving page with a new language causing cache corruption [getgrav/grav-plugin-admin#2282](https://github.com/getgrav/grav-plugin-admin/issues/2282) + * Fixed a potential fatal error when using watermark in images + * Fixed `bin/grav install` command with arbitrary destination folder name + * Fixed Twig `|filter()` allowing code execution + * Fixed login and user search by email not being case-insensitive when using Flex Users + +# v1.7.33 +## 04/25/2022 + +1. [](#improved) + * When saving yaml and markdown, create also a cached version of the file and recompile it in opcache +2. [](#bugfix) + * Fixed missing changes in **yaml** & **markdown** files if saved multiple times during the same second because of a caching issue + * Fixed XSS check not detecting onX events without quotes + * Fixed default collection ordering in pages admin + +# v1.7.32 +## 03/28/2022 + +1. [](#new) + * Added `|replace_last(search, replace)` filter + * Added `parseurl` Twig function to expose PHP's `parse_url` function +2. [](#improved) + * Added multi-language support for page routes in `Utils::url()` + * Set default maximum length for text fields + - `password`: 256 + - `email`: 320 + - `text`, `url`, `hidden`, `commalist`: 2048 + - `text` (multiline), `textarea`: 65536 +3. [](#bugfix) + * Fixed issue with `system.cache.gzip: true` resulted in "Fetch Failed" for PHP 8.0.17 and PHP 8.1.4 [PHP issue #8218](https://github.com/php/php-src/issues/8218) + * Fix for multi-lang issues with Security Report + * Fixed page search not working with selected language [#3316](https://github.com/getgrav/grav/issues/3316) + # v1.7.31 ## 03/14/2022 diff --git a/assets/.gitkeep b/assets/.gitkeep index 8efbf1f..8c3b423 100644 --- a/assets/.gitkeep +++ b/assets/.gitkeep @@ -1 +1 @@ -/* @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. */ +/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */ diff --git a/bin/composer.phar b/bin/composer.phar index f0461904b59bf1fb3f0991c4b79bb066828338dc..6d799ebd6f101824bfc6c5b1f4970f3783d90a5c 100755 GIT binary patch delta 754476 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

}igb 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

k?4N{w2bR}OeZ#kw*2KP4qYiWy#1Qd6{^ zZ9e#aYp8aw9SoF-eO)kb!MyIqA;t5`=QRS7p}y>^6JaqF`&v(Sz*kWRxVz`a2VDOt zt{FGJbltoFFt+O!lmrF@pw(2~q@C~s270Qyt)o}@x^YVGQ!`#2_KvHahuJ_fHOymq z5EEc_9rZSqFDnl$7*^iUx)$

#}3MTo>5T$EV#j*0&pm1+X|90NxBNUfqRMz=4$r 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%0Ab10?aQ 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

bVDcDj|u#{8;jW6;8 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

V>FjyE}cWYkyOEg*y8}cIJ{6 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 delta 323121 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

iVA#KSduaEXts>UjXYO4~(DrSg2Ya81t}9 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 z zp~GLY(~|ii_J!AQyCvUYFQxPEu;KM~hg~|ur%vdH;mP>Uz{x88std@;^xPfx7pDY< zrG-BRMVmAgrsiMxxP346-3J(4ai^V0ji11>9=|$yGTnYBK=Lp5;eYz>fs*gr^K(k* zDZ<6S=6=>Y=*pAnp%@g(A4Rhu$~=7+bUY_MVb=veXWos054@fQ1plOc5q;n?j;us*t382o}B4#pWF+<3QL>o-COA4NXkXYRJoO<|^y-nrXeA%Bfs zaF5+Ki9TFYUsT9%d8}l{`>%?-fZufdJ^;GnP6(1_rTz5g{r1&7&$Tq;LHmpPu%5gT zQHS1s5Ndei2B zmt@liK5d_$!lQPC?tci8WB&YDPBz{7gqim65~~g+WsjRaB-=nF%gbiG%Cg;c2$MeHkF< zN`dP-Hm+Q^wrw@OLH?s{Uxhk+!4LB@667L}y^6zl%O$md#MkT@1@dqbg;S^G9!FA& ztF5seU$YC4((}7h(@MR;JVSWSZ%&v01_=Gi*X^BV%c$(%?9F2jeZ&5066YDqr2pO* z{+tR7u{b$3eaaGv4jbuS$37@@A1nW#d&+Ll@9i3H>u(zx>e|<)Gt*I0Z%siazAKs! zpR%^6ap;Ghw$D?kd%m;=PY^$S+Fm|YqYk*FcyuBpQY@kKkJ-;5jjNkuzImXk2-9D37q3;cmLcjOF{iN9~faW8Z-ehModfQk0+v#Hncg9+2y! z&lVI>?59AbM<2&g_{H~t&JrT(ts67b4u9XiF~jT#G0dsFtSASz^w=n^IM-1p^6hA8daTz(`i=>@ky>ejsq!) zVjevXlE7Ac+*>*# z>0^AS-FUd)&!Ge=^1!c zOaJk0JY%5<8O#0!Tzx*`=ltJH_Sz5$)b;f7GNyaphI3969EDDOq_AuXtk+aNPma4x zTl*1vAM70SUZ=}sPxI5mRdswmM1gIdUvUyx@fDz-@WDT$%=MCoHSS6=A*%D~XD{2A zh(s#P%DZc`kncE>js(mI0QN$o@9g-Q1Ql}IAKpt6&{zQ6Aqc~waxKPsJJH4sp(ER zJ$D4;<>02wQkwEO4s6cP?32anGQ7BL^+oOQ30&I_FyT6+@}GmlT#WxI^;cNAp|frM z`nFA|bPj#`=XN(Qs!Fa%YPZw#rpWEbkOn{9Ku=VrJ0ut7%M0_e$3F3@y?9b(f}2vc zT4c4%qrtD)3&&bd+7~2I_61JH*m=LQmrbG_Og!Fx8pPxBuj9dyuT+}#8~fk=m*%I& z{`uc*MBM2At^H$`)t1oKBQrvD+3&$7eDwEVMKWFoPr-J|X)1{@U3;xvC$b7#Ny7DP z1VO$zf*1SCrq+Ak+{?v6_%sgK!>+Vz+BdFPw~T#h4{xtWp6zSGrA-pF8=@B~!6X9G z9AdKZ%>tLtUTKIxq}_0l@Q3*6`Cv|o7NTI9CvwPFU$u=ao^JHtp#cvn}BoIfa<4ybW zigBND#YlH}HKXsmX*Y)zlTd4K;V9a*TWW3fkNRobxN`H}vdfFz2*oPT)EvA`HCnT& z=`DNh=?A&vEinDJ?@Y>1kp{Eg0=e#d%dR}@bW;;gm+0X3VOYNRMxbg{qqbaDPcz@P zJL#sk?enSU5TXU$d46?Xdh^`I+08BIj6Hp%?z|M(;be>r|IwbDRHTp`nWxtQd26Hn zJp&vQ;Ql|^%QcFH=x7V_XTKJ!N*R0SPxj}M*dJcM4^Z1*5Zg$B$5)Sj_8<0}c%pfx z4E$(c-K5D>^B23&McLNB;Dotp-D&tQ_91%xp&7Z9GcU82tkJ3rb3-(=*IfcIZuLW6@dPiPvuF`q&Q;H&$>}Xs}U-_H; z2n*dwlgh*Ni@$@itob{x;2+M(%r0T%;W!==DIEaN>>!eS*)!|qys9rOtVl3wP6smF zsq)T?r4Tc`^zC=-Sv8wYtkBy1(}oYQ9vuQ*z4*nUHP7lm=+0sU3KyDc)i{&yJm?&w zf_}MC%2Gw&)a(=+jn}W1G&-9fgwch zWM}T=jujo9>o#yUp0$&mXs$Nc*`O?uk-hyJlby1~2rgDT*gM!d3!azV0I~#=Q6IFL z5toyGKU>^0Fc|4K!Ru8=v>@cv(Cmi%GP)|{6z;5%pr!609-F#h1j@&u4WomD$bk)V z;U5+2aub#JW)Y}%jcJV+a^x6UHKelfCxBjowk8YfQ-jp#_RQ%8;avI^@J}VqX1wV}_C)%qsl=(GrVl&F7g6e@C(%1)&NO<8|K}EL zDgEwxCp3m{S0u&n-hVVXOX!{N79e9mxs!FSkU9zX3%*7 z)=}jgmQ^6Tw&iqqtKgN{(_Euu91~?>hPO*&sEqxWAb@nL+9?@(+j8!jM7KFk5v6{) zrkcKYer7IE{8h(!yh2~9?z&9Sla{kUcE)O)N_wTnsX9Cj2s3jU0NgRnDWkz@cy79R zn$zZ+)NiLb=Vtks{bt2*;Kc(;;-@1WMAnC$$%=o#@-pee)1A^l>b&V={k2X8PSDG^ zSO;6GQs{w6sd&w~8ew1%LUuA`UJDX)q|UjF)?~*YzqYZf>Yay^%;}vw)2XM67AEJ0 zMCcQJ4qY)5*&_00SB2TIG&f5f6)@5u1$5I)r(>+S!KqE67gM0ASWK5UqV_+hKnA$# z^}=lWbBdk0a4`bnN3ZOR4kLvD;t*=dM-Hdv@Yufs8?v~E{|MHgXJ0Q|M)MXpZDXHo zak3DR>u^ry*w}1mPZIqwvml?|{tA);{^}wyMVHTYPKjPP9quIX_pGDAdCo#HR-ipS2@R=hm~ZwXw6D*XEsh@(C!yBuND(&gmx>jn5c?#1fZM`Ze}s@2(>1T;>ZQNp~@kNwkpXR3l9RXpTmQ0&6YbRcxWLT3^E@o-K%-MY}3%Ms7; z&bbVkl3!iuWYN2nQ$wYToIfXp$4bw0dXnh*Woc=2!(u@8`sZ`PvLC9y6$i>_otUQjcSVyW?RVZu+(w5Z909hyuOmAuW%OT^h&I6K8ljKl)jLS+)BAWg|QzR zXV8z9I&+lX|J@}BhFrA_=-jZ(nPw82b}Vz&(sxUXvgw&+X$6#DUT@Rq&UdEdUChrz zU?xO8EH);)KLu6Zx_0LPE&p?MUYaTZ;Y=@1lN&LNtiS1nbnL&wA!ygFFkp<`Q#ZAz z&6hr7NEyoxBaB2pJGMl?6e_KQ>}Z3vl}X@M-jFV9>&BrjP`F`!ug9ltR{&|$nF;u? ztM#h@768Zv0$a}bEHg(c%qflh_?c1=F#lDS!1Uq@=O9(TJyjopIU6#I#y+@`X@Q)J zyDo6D>F5Q{L-c`F&V^%_tac{VAPk)~hizB;8~!r(SOar2z_5;tdiH?WxlAi2djnIV}4 zraD|F*#>xmAYruoGuF)MdI_kEH(lfzsH9Wq+ro*p5kybHmO-5!^ z$YL+-t4^cOJ(69JGBny>NBy5cki5TM>tv@Zj~?l|ASREMOF3a{yGhwRT*pc#&=1Ak zDQf708$U3xhXPL#Au77MJM|n4UDQ9(gIi7ezyq|MX1Q{?RcUeyCc^J_gecuYcqQ&b zO&|CiH47|XJz&EyieFrNIrb!DH9W@NsVkgp_79O<9}6|)F`h#10<+V&i2p?{@1KQB zHlx1<3l`M2uUlRlQXW5uX)A%}M2^zP0Fz3M4Gk7dR;=OPfziHhWYy~*j-p2q!CJK| zP{=~mId)E>lbIPk%*ov0#Xv4Ji)6PNRFk zmB4=rLYWA6!>*Sa=cGV{xyY4+ebMdFk-mL#{i$1z4dwd>3Px1!zvxvkmk))oPVk*u zf0a>4pMJ40Kf`Pao}*yS{i`rkX`j5snvx5!*jxH--gp({C;YRVf;H>)P6u`!I#F-a z^_u+KEqQOe8XAS7!?b%j)R7C`smpMWnmktxZsUD~@&xxHM{d@~ne~v^W%Z3Wb8s8% z&oDTwLwXTARsN>kug)lHH{Z=<@H^TM@)sRx@81(08t7-e-Nju)Q6_jA!%+tarH4fP z5Xdf9<`1Oeu~|v#=m)Qz2&q|2um8=Sk|(_Q zqK!}+=pN|UXF^3`NhZeZ%IL6FH*FZnzEwq*n79iVyk_NxX;ph@@(c-{q9qF)4aS(z zC6PY#7qLbLM6;j{%6{7VEb@S5zhX_EdO#yTP6o_Ithxm}Jo_)`O7mZ_vSO%YKGy>m z+gNoWX9Da`gT(=@Ew>%I8T6`KJ-Dcbc?SHw0U71IntdRYzM7aKHWIfQe`g(vn~d^2 z1CwD4zHtEOC#q&3bB>?D<;%QI)xn{Y&sAF?pa^qotl-}IQIOVHwVjy(k|M_6)RJzM z(yQOF($W$344xM-ZC;mLN}GQSY3AZ}cr_nlF)VhmS4I_3 z+t|pvTuZP174HBan}(zJ(g`a!g)7m%>+taWjaRHt3OAyzKU)>&8(<0Mio!PGJ%tAS zYzFF9_bw9IR66yS>S88;*|E41Y&T$O+N<aO_Y?j>I8GoGdvnpD%b|LQPug@A3E{u>Y+4RS|C{N$ zC>7HB4>@0>oa^zzy6Ad{srNqu=KY0Y#B<(tJp_Q;KJBE?wbwgad{S%M7m#JQU^b22;LJ3dg+n(u1@!I>&J9YjbLWShbCcBLE~b+~KlrHQa4ON%5!|;Cy6Gl} z2TfU!csG8`sUExJCTDpPMJvIR$2u~r3UCa;vn$RQKxU?dPHoJqAS5aZQBHSeksGyB zK3{e-hRAyeGk}znK_BBqAqd{`oT1$k}Vd%BP(T7?;xMkkI!$IXrC)?1t&vfi}->U@x2yXS++?&*oZ1&_n6ZgCw7uThZ-cHZvHpnGn2&Zb}A?!1(1 z>aJ6f3~Q8*Fze&a%ye~7`{>#)Iwka}zo+DfppI1zU0~3@hU?{vA9q?)<@TekzpQ~` zo)h3y-U%I2^I<3TEDc^jTzpQvpI-h_@z)+y=AZ#!uKKts53K#_nf-!f&Be*avWolp7aT451mIqI&p)!f*d=Um3nA0hnD1GGvjK1 zaD2s?1k@=V%lxD>Jt;Rh9q{`nb|8qkWbWy_%h^Qt-3d)i;ayH;UVKe&-c|JcT}}h^ zz?ek?9k~hkvMLwY^weGWYxUjEtF+->fbRI+P<&i|kF$!VerPfZK89~zy=C`0z4Wn1 zo!!*6JPl@w;Nh9XiB+PQAult(L}G9aiM?9#U0L(0eL;KO0T>>!cdQfG%6WlUU;ChQ zR1OBseh`BAj88cqbq_=)z4|F<2d#d{xlSDN=z#|T^uIjhT$;gd{n*lGI{Fwq8h3x% ziPEc|c3u`TF!t2LPGiy-eb)J8k~;ZMeBLR|fKiT8n_d2hQyuoi3E=YR_J~4NoFNql z1P(^$-2m-khlLSc6{GZ)0j3;O3|>%wUzJ&r!rTj?ORGxX9TW98?*^O=KEu@dhyzN} zQkX}JAH(ik_Ly@kefFnG#q{8{PE`&=yc-d!AYnktu;|b?tb&G(ks$mxKn<|KmVwZUVqHVuU1NF6$MS-(YTr2u!2-`#92qR3(~VQ!HllP1%#e0 zy5$HE?~NnQoC+2Pgmo|%d`|>|VgxCOk(9Xq2$Y3?m{e3!KEbkC=T8e3AaVNz|5TM* zZ~73;272Ht6lp^RueB4D!g1<)1cc#&BTguPoC367Ig8x(gUmFlKI{~)^bY^~p#>2j zgtF4o!~uy7Z+Zgvi#gVCZhgW@&()W_tJ7Ecv2Xb@)I8NkonNN#^-hDwGYjh?z%dri zSm(vc{`PgN8!S#DxOWH{aSd+4O#aXpofcdcZXKaHU^T{W`jT^f5*HU{tdQJ8#@P;3 zrc{sgq;nHJbqpx<_uG@tp|@|tD+dx5=TYuIBq6{ktas?C<4~$N&j5c9J`7dWrB5M4 zk7RSX>x46fMtajL>6T}lHFRV;)J?BHz2&%l70FXBe-n9srYUv%cFzaD!L=lPWvok!_`X*i?z{1`f` z8?MjDrpK0tV98Y%K8v0{2JZN^8^g2c;6QZ-{rvCA*);iUNmG@_x~xo=GW!qJ1!)@* z{~XrRCl|qud)-rYWxf?H`+iyl{r>xSXy6QnwBQF$t@{8L`GNCgL%FB^6UZ$>4*e76 z$ji&nM|OaY{{-5_FTM=6{?N-#MKYK*s(#KX%D@|daBVdBEuiCHUv`!Up%J3HpTjbH z(kjdUSAe7`bs47@pnZR|tBX_|Y!%5|ktc|W)bi0PtHgB~>KoYM;w9efkyN_C_pFr8W@3CI|>T(cUsExg-SGcgi$}Z=Y1*u;|8J zLJY1`xe7Z`L1(7*4Hn}RdJLoSJu@KMdEG0Zpz4bZwYDNX3&bxZ;9*sTzeql~c)5CD z#|~7IkUp-q!(ZLk(=0gpNHF5I5ssrS;E*j7bXkfw_Tkk7>}lTGDqBmj8?1S03cW

x74lhPA3bkTMzFlWJm?H{oE;7{Yr(Q!{@(10#Q9EP&BtDdQrqKsPg3 zq$v?4{X=De)KU0`&;CvlHDd^BTI`#H05InJ05&cThKAB82Lt6EDaa_es9Xc!Zq8fI z|Co1#&d%j4SGRX|vi`yRjY~}hIf6o@Z?J2m7q*9>OLXcFbw$OzSk5jEyi@8M?oE}& zxU4%W;bcd*p#ld5Mj@-8S~yO6lq={-7*0>s@QOLNtLlDa0E%zW3~5oX%<`o%9^^-c z+}zmwiL=!pB`iMrn=pJ;Z|*{PdQI|`@}8Yh5R-C{MW1#i$~4a8$mP>40K}Bw!s`)S zGkxv=e5z}1B(w2NcB0N;-G0+`IAHh*`iQ+@+rhXGz!m zEzJ&jL=sw$jDi;TSYe;X<2cZXtr^r!uF#AQRp!Gi_Tv29EPWI6nGaFhOH-|Wp|4x~ zTn0Fq&yN3t+I{AHv50?7?1jeJD27gdqR_axi z(5|EXcnKLm+9}$cRx&kKV~Q~k90h1ybr?AFUGz>~ExujBBP5!OR&kn!3>#5JK~Vy& zF>eWPs@oN2j!?$1c$W)L5n14@nO{7mVAbdYFBTQ2N)_t=0qiVqonMekJ3G@SL*rUs zFwM06e+no*8f2y-ugmVD&HyA_w_0`xl~n{j4<+TvL&G7{?G=iR7Zw*(gV!#~OMV{~ zyr;_-A{M-P!pA7&R_B18`D}HuO8pc??qmRN_l~zPb;E*5StRpGskS63&)! zQis3d_sl*?yx>v_#9TeQudfrKS%>6knYU7P)}>cSyL#O&jaH&f%SUso>ilQDwRMzL zv%$6Z4k7#o(pVpTvZ~^eGp#LW^}Q-1z8*MCJ`D8Sx}5SUij4)!+0(T>LMPVc6eqLY zUq`B4STZuy6&=we2yYe8PRkdrRf6#M3b3+FF5~FG>RypgfUBHrRStrrFEROTcw*Is znv&EWiuABRLS0*6fZO?imA)4Dj>_7=Z)iPzg8ge@geyoQxG2T)+~Ur~^|0hCXZtRw z1Go}4g`T;0MiDhPrYg_Fm9RST2_^8+JP|1gpg-c8<*;p1X;%v#Z5oh^nDz0ndfwfO2;HT8}x-0g1Jz;--1 z@Jl4(JYlo}h>D0{ibJH=>~(0eS1-gXePoBL7^`)*49|#}ajcmR^WLITR-J8z^{?-) z=6#=ymp_iu4Rm3KhfSJbRAzRXu@P(-b25R?omxWEEy0G=hrFs)bR+LnqZ4ClYWJZtQ}R2be{~WXip4I5V~WWrvUHi z2cW8g(}ha!(dR^{#ZT8jFNIEceT1$U*xb%ZW}RSP&9oSwN@Fl0 z5D=|oI}4^QOmbY=57znEeuV0dbSJJL2V3>PuyHvMnQ`(i`2iAuBH9mLSXP~Am)w4Qo1YLM zD!7$fou_*mK)CgIw%g*S`~G2(aEJV0pp(z$6vX%#tTa#^_Cxrzv`r%*a1j6Ry^v0A zOLW*BM;TD_g4YR@p$8Te7Bgyv)ECC%XK+Y<=D z$!kg{GYbMjHLI46J~*lVg4&Hk`&d|pfNXegP;WIMF?52NV6!za<+VzW#Qkp`|L10$9_ONFwLUct_v`srjCDzYQ~)_=59V`f|k z@lcM7U8}LhnoS3z$4Sfj_^SI+^_Uv`V6@OBA+l^ zqwv~X=<4`Yb^&$Ua-`^??Y*u{%px^9s~O4eiu&8g<7U2CM|fAwtXeH$`=+79a1-EQ z1ii3}3n)a*6_|qg&NI^ALwkF%0z(7vY8UMTB0-NJ)81Tjg*y3ef#Qs~168&^)Obl_ zO>};!v9aa~27?N<)d{%`cPBVXbf`^DaJhLJ#CS;YB_NdrWZcT4w!haEPi`{yzybqk zAyq8~5-P2hd(#!P`4huWgWTg_mSd4j16^)wwk#xm7Cbnf9$A&acQNmd+{N6VoDb1v z2y%Ixpej^)3_Y;9aa9rDxUA(6E-`o=dRn*5GHERb>|7=a6Zr(7nsB%^J7cN<6LVD^ zJjQ!>&OPeR%^W3IR*g^bhe-Tf3mmV1%x;+q)Wh5NcGvOxxA)=`0!OKFU7@SS%5XfiVn#{HSpx!`nIDon`C8NpGxX`{ zE$6$8oWDA%aD(aQ2K1NhWC20X1}lrH*8sHG41|x0XmB7TD>8e&Q_y|pOob4riLOnV zOh(Y5kyE2+`pn>A1QpSK!d>AEG@%$X6bdMAtIa}$4CZi07|}?39_r`pC_J6LCyeZGVF`Td@?P{NSm9fGG&|7`e%;4YL$as~#iBdb&F~@-iAv zT(E;@W{^;Ls2B5A{3KirtAV${SY z5cAZ{%u=45Z3bSvfXA1ehf%eo!D1kCum-O2j$`G;G+JUc zr>mzI%zk!d744b^&x;rTXct##Euk?P-?EfLd0jao@;)7!lp0n~f?M2Itu4!8Gu!8t zhvR#Y@{O!&;I~0kMAq~vQ_JJ4!JcSc&zi_CSoF&{GgJkycl~;`Whrw*YX=Zr46K6` zA0Dc%pyP*8TMTm<8CD3>DL%e7K4IMP|~*=|i_q<28g&r_Dr z+c#E~D+k5ZXBXrm<+5_;+PJBs9f2o1*0(Qh<2WKXMUBYF1&U%Gf*=#(5!I7!LSB6i zL;~y7Wv;A)l*{d%7j0-??{=xHTm<>v^3{uR#kK1;u3XwKT>z@!3cTjNB5CR?M=-LL z9PJVV!^WPIcv-&EOWM}2UAgvrDZZp@h)wXlUcJJYRV)4at8gese%?5D2udU%zg>%tJuIhFf{Q%fp%s=!NC%Y74r?|qV5?C@SYv}`du2p z@nGjM^~%)R>YIK5@5Q2^UycMLfAf_s%a<>oZ+Qn}cssnMyH8UAs^sl~3TL0ae2MAd z5_s{{AWjIfMg{83n`dfpg+4xfzA?rf%x<{c1vF1I_+U+O5l`5A$*+kHuOAo~kLt{Ii9`8viiivJk-H={=^>)Puv(WAPW~l%TU>X{d zsG_{_c~m7q?U8{EVyl4benVuCAMda#KCI(AW)F;|u#!{DRu)5MaIkBTIJ@@6ZD0{sb(RA1?UApWMQ1Mqt;#t?F<|D zbL{yA&!ttwdGVbXa!SxgDLKxK7? z>YrcW*pD>QNxwanmKQTqUI}+nWhEsRJqhRKj?GRu?&zLAz+GLSD+2+ZQCzohnE2*Z z)g_D7=`~aFHqDR?d0jATNB|kS??839OD#FUBm@WD$&Z`5NOY!HUcAf(@Q@l|xet2k zs_NodXE0f82|IKOjOeEQ)n(LlO?7&PSs>lAzq(}dAR`Qq#5Jat@J|Sdu7s>7Bz2d` z-lnzZQPe!9=uvndgu%(=7pTEEvV_aJ}a!m zJj0z79;x&Lxt@|&QE43}1fKvm*vMK4uUrmZh>#t!K!%2yonVlML%e4~kR@7(UMyB% zmblPr?`&JW+PWJ5Di)PH@E{Rbojlg?0%I&*@R&S19s+7rc7Fu^nIUj)Ob!{;O9&A4 z{k_(20KjJ+sDws4A`6gjTd&=KT$kzPv$uxW`vSRED?A!|JZk zy$-3&&3w?LO*i-H1Au0TFf><*D;#1Ql|_K!mqy=g#|@gT6KFSM?aX_;}jF%N-VqMu(}Ju}yE zk5@AcF@L%+t-M*HM8^`2?jOZHM|xAC3KEd(Lt{7-HLnD;MO60;*Mz4mwkSap!7|xC z-A1+-^HvC@XEziv*BU!2x@h7aZa?#GXpKS&?q8oOn)!PA@fSKa0A*${m1OfsO6ICsk_X{ zlCv8`19yW^CN}lPP)BX8+tTgR{bROR8}KdXncm9@kd(8x?XNDX(eS$wE@!hAR;I2yQ7RLLs#xp1XP zJ{6`(yo98C@-I^$8V^vBfMIn1egNv1nq7eUKQch^n2i8c3aS%BVtSyN9~9XA__>NO z{yyjG7vSBw`aiypxdxiO$6S?K;C)Uus7r9C8~l7m6K+%&c2GAl@swN6vdd#Za%@P3 zI?BSvt266IDHkz=c*#7Gp%#gR%Gy0$L!I5Dy9W8PG&LKrFdr|e+q03nsli-Js}Ae( z+Nrduw0#F6A_=A|IaF9ljrmGq1P|NG_gd=7X*cB(i$(dl8=Dv2vs6`j?l5?U# z=&yP3XcNb@h2N{oN>!Ko^S`JrjWO8OsR1~Ibzv=p_CI214MUR+8J77eWk0BoF7u0; zx6$pf-KV2vT64^#&7)cL#|=e=F$@DbgAp_={6xo$gF1oO{IpE8(EWwum=#9F4Y*!IuGm+f-3aIn`407==vCu z3H4lS0gM7iceM@0#DPxYFLmMroHN)NPUtt@TlhVTJ5)WNXVtO6G&@*vy}G$#&Zn41 zG-=g*B=6idsMv&rp!Ga=FpPyT5dJRap%0DbmM46`%ij#Gdk=O=hkib#bPG>zbM5)7 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%0DYPAISUq^0XNveDNIh*A5;@+LWjAIO zqsFmjB~7h0Q-bG@H7i^vh7Uo^?jLU!(vd3jop{!9O8GFo9q-Sir>aeZTI*voDW=9O z$_%M#p-=DcBfZ9~r{15Hz~a3IF^PL>On0J~FXAOWYntWslNww(GjeemH(#HGK-~MY zle5$<{jEY1?`ng%nn zYmOPo!O8Vz_ve^h5VI?D*$migCz&0t)ii5@IUE0cWrFztHB2;%3lRZfZEqW_6tJBG zeVgnsIN*3r)e7O$MPyUikMpJYC!x|BwXV7wYmF?YwUsu)~F z&!1vWju&qUQfh0G&XvAVdFCu?DJV_JP*SRy?Bj;b`sIERs1~5I;@g_KaX&VU!6~k9Di!T1@?& z5unKzaj3qcR8|-$9R$_&mF7Z=p*~SV>L=*a>81IWY^_1ykdW_RNHoO!sdW;Z(lxt5 zV!Q3J!eCmc6C8NiE+Z|t)hC;AL#WJADxe-nEQP`ff;pazqpCeU+Iy|(DTKkMN>R_3 zTU9JW>NxUwaVsSs@)!9W&DbNbr_CD5=Vql>(L<#u4@#w8+*^x7Yuz=_*UP?>XSNM= zG5ZH=v`{A65$tp5@(Igxl%(fprF%K33ZkxTD$Qb2C{YtSIRKTUazc%O!jZvvn1-1@ z?DN|d-77je001KgrFIP3dO1qRtR3`{9X!>(DnWIzVqa9ELp@r#9Nurr5T59#OarX< zfkrMpR^%ZjW|J&zLW@gHPk{tm!M7?pQl?PNNe~|)>SR1!U2FR3)mrmHdZEbl#EX2n z=UJZ=CGDA+oW{gMLYC#SYApsG{+d6ZGOq=?TQ&?K{LWvcX3_PrAVO}5GbhN;8GRtf zKZr9^Ijw-MiZ>P6(SNg%Mt7XAc@rd@(6+7cN?LWLKZV*?`ATUVzMiUb2ta7@+1XxrVkn)Yb>p{h66$Y3wjU3a<>n|HhISS6k5*Zj zQd$)fw1-Kb*?$Ebh;^?@X*?c+@r}3TkUQyuLumz+nweXWfaAe3z`ZYNV-lD}*7ZG& zxK2AVb4y{6Cj3k~8r3G^T$c%b48SAdZAsSeF{5rC~(PuD}BhaGnJ%!G{;P!JLZ^|CEI3$=fW`K8h$s=dS?hgM ze9FOJx*oCKT@;dFhf1&njFK2$3GO=_Bn-9KKbJHD^5D~&a$r;tb6wLXCD5|g|Bx0%3JVX rzB@Cf?w&hFKQjG>)cmxhlD-MQ*_3h9y*Hf}_h0|@Uvp=kG4uZe9zgE6 diff --git a/bin/gpm b/bin/gpm index 12d0c3d..2c6a99b 100755 --- a/bin/gpm +++ b/bin/gpm @@ -2,7 +2,7 @@ =5.3.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.0", - "matthiasmullie/scrapbook": "dev-master", - "phpunit/phpunit": ">=4.8" + "friendsofphp/php-cs-fixer": ">=2.0", + "matthiasmullie/scrapbook": ">=1.3", + "phpunit/phpunit": ">=4.8", + "squizlabs/php_codesniffer": ">=3.0" }, "suggest": { "psr/cache-implementation": "Cache implementation to use with Minify::cache" @@ -1016,12 +1062,12 @@ { "name": "Matthias Mullie", "email": "minify@mullie.eu", - "homepage": "http://www.mullie.eu", + "homepage": "https://www.mullie.eu", "role": "Developer" } ], "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.", - "homepage": "http://www.minifier.org", + "homepage": "https://github.com/matthiasmullie/minify", "keywords": [ "JS", "css", @@ -1031,23 +1077,15 @@ ], "support": { "issues": "https://github.com/matthiasmullie/minify/issues", - "source": "https://github.com/matthiasmullie/minify/tree/1.3.66" + "source": "https://github.com/matthiasmullie/minify/tree/1.3.70" }, "funding": [ { - "url": "https://github.com/[user1", - "type": "github" - }, - { - "url": "https://github.com/matthiasmullie] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g.", - "type": "github" - }, - { - "url": "https://github.com/user2", + "url": "https://github.com/matthiasmullie", "type": "github" } ], - "time": "2021-01-06T15:18:10+00:00" + "time": "2022-12-09T12:56:44+00:00" }, { "name": "matthiasmullie/path-converter", @@ -1104,16 +1142,16 @@ }, { "name": "maximebf/debugbar", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6" + "reference": "ba0af68dd4316834701ecb30a00ce9604ced3ee9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6", - "reference": "0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/ba0af68dd4316834701ecb30a00ce9604ced3ee9", + "reference": "ba0af68dd4316834701ecb30a00ce9604ced3ee9", "shasum": "" }, "require": { @@ -1133,7 +1171,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" } }, "autoload": { @@ -1164,9 +1202,9 @@ ], "support": { "issues": "https://github.com/maximebf/php-debugbar/issues", - "source": "https://github.com/maximebf/php-debugbar/tree/v1.18.0" + "source": "https://github.com/maximebf/php-debugbar/tree/v1.18.1" }, - "time": "2021-12-27T18:49:48+00:00" + "time": "2022-03-31T14:55:54+00:00" }, { "name": "miljar/php-exif", @@ -1230,16 +1268,16 @@ }, { "name": "monolog/monolog", - "version": "1.26.1", + "version": "1.27.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c6b00f05152ae2c9b04a448f99c7590beb6042f5" + "reference": "904713c5929655dc9b97288b69cfeedad610c9a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c6b00f05152ae2c9b04a448f99c7590beb6042f5", - "reference": "c6b00f05152ae2c9b04a448f99c7590beb6042f5", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/904713c5929655dc9b97288b69cfeedad610c9a1", + "reference": "904713c5929655dc9b97288b69cfeedad610c9a1", "shasum": "" }, "require": { @@ -1300,7 +1338,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/1.26.1" + "source": "https://github.com/Seldaek/monolog/tree/1.27.1" }, "funding": [ { @@ -1312,7 +1350,7 @@ "type": "tidelift" } ], - "time": "2021-05-28T08:32:12+00:00" + "time": "2022-06-09T08:53:42+00:00" }, { "name": "multiavatar/multiavatar-php", @@ -1363,16 +1401,16 @@ }, { "name": "nyholm/psr7", - "version": "1.5.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/Nyholm/psr7.git", - "reference": "1461e07a0f2a975a52082ca3b769ca912b816226" + "reference": "f734364e38a876a23be4d906a2a089e1315be18a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/1461e07a0f2a975a52082ca3b769ca912b816226", - "reference": "1461e07a0f2a975a52082ca3b769ca912b816226", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/f734364e38a876a23be4d906a2a089e1315be18a", + "reference": "f734364e38a876a23be4d906a2a089e1315be18a", "shasum": "" }, "require": { @@ -1424,7 +1462,7 @@ ], "support": { "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.5.0" + "source": "https://github.com/Nyholm/psr7/tree/1.5.1" }, "funding": [ { @@ -1436,7 +1474,7 @@ "type": "github" } ], - "time": "2022-02-02T18:37:57+00:00" + "time": "2022-06-22T07:13:36+00:00" }, { "name": "nyholm/psr7-server", @@ -2122,23 +2160,23 @@ }, { "name": "rockettheme/toolbox", - "version": "1.6.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/rockettheme/toolbox.git", - "reference": "fdf0195ced25b83525d3b084c3e81f05de96ac8c" + "reference": "99448a20a2f78d6480035d72821ecb9e4dc17032" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rockettheme/toolbox/zipball/fdf0195ced25b83525d3b084c3e81f05de96ac8c", - "reference": "fdf0195ced25b83525d3b084c3e81f05de96ac8c", + "url": "https://api.github.com/repos/rockettheme/toolbox/zipball/99448a20a2f78d6480035d72821ecb9e4dc17032", + "reference": "99448a20a2f78d6480035d72821ecb9e4dc17032", "shasum": "" }, "require": { "ext-json": "*", "php": ">=5.6.0", "pimple/pimple": "^3.0", - "symfony/event-dispatcher": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^3.4|^4.0", "symfony/yaml": "^3.4|^4.0|^5.0" }, "type": "library", @@ -2170,9 +2208,9 @@ ], "support": { "issues": "https://github.com/rockettheme/toolbox/issues", - "source": "https://github.com/rockettheme/toolbox/tree/1.6.1" + "source": "https://github.com/rockettheme/toolbox/tree/1.6.2" }, - "time": "2022-02-08T08:36:03+00:00" + "time": "2022-06-14T16:24:33+00:00" }, { "name": "seld/cli-prompt", @@ -2231,16 +2269,16 @@ }, { "name": "symfony/console", - "version": "v4.4.38", + "version": "v4.4.49", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5a50085bf5460f0c0d60a50b58388c1249826b8a" + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5a50085bf5460f0c0d60a50b58388c1249826b8a", - "reference": "5a50085bf5460f0c0d60a50b58388c1249826b8a", + "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", "shasum": "" }, "require": { @@ -2301,7 +2339,7 @@ "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/console/tree/v4.4.38" + "source": "https://github.com/symfony/console/tree/v4.4.49" }, "funding": [ { @@ -2317,20 +2355,20 @@ "type": "tidelift" } ], - "time": "2022-01-30T21:23:57+00:00" + "time": "2022-11-05T17:10:16+00:00" }, { "name": "symfony/contracts", - "version": "v1.1.11", + "version": "v1.1.13", "source": { "type": "git", "url": "https://github.com/symfony/contracts.git", - "reference": "cf2984f7a99bfae197f9c96f5a16a4041ff6ffb1" + "reference": "9e27f5c175ecbd6fff554d839ff4a432da797168" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/contracts/zipball/cf2984f7a99bfae197f9c96f5a16a4041ff6ffb1", - "reference": "cf2984f7a99bfae197f9c96f5a16a4041ff6ffb1", + "url": "https://api.github.com/repos/symfony/contracts/zipball/9e27f5c175ecbd6fff554d839ff4a432da797168", + "reference": "9e27f5c175ecbd6fff554d839ff4a432da797168", "shasum": "" }, "require": { @@ -2395,7 +2433,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/contracts/tree/v1.1.11" + "source": "https://github.com/symfony/contracts/tree/v1.1.13" }, "funding": [ { @@ -2411,20 +2449,20 @@ "type": "tidelift" } ], - "time": "2021-11-04T13:32:43+00:00" + "time": "2022-06-27T13:16:42+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.37", + "version": "v4.4.44", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "3ccfcfb96ecce1217d7b0875a0736976bc6e63dc" + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3ccfcfb96ecce1217d7b0875a0736976bc6e63dc", - "reference": "3ccfcfb96ecce1217d7b0875a0736976bc6e63dc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a", + "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a", "shasum": "" }, "require": { @@ -2479,7 +2517,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.37" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.44" }, "funding": [ { @@ -2495,20 +2533,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:41:36+00:00" + "time": "2022-07-20T09:59:04+00:00" }, { "name": "symfony/http-client", - "version": "v4.4.39", + "version": "v4.4.49", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "40342406a975385c5b21e929df46e3fc0278853d" + "reference": "0185497cd61440bdf68df7d81241b97a543e9c3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/40342406a975385c5b21e929df46e3fc0278853d", - "reference": "40342406a975385c5b21e929df46e3fc0278853d", + "url": "https://api.github.com/repos/symfony/http-client/zipball/0185497cd61440bdf68df7d81241b97a543e9c3f", + "reference": "0185497cd61440bdf68df7d81241b97a543e9c3f", "shasum": "" }, "require": { @@ -2560,7 +2598,7 @@ "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-client/tree/v4.4.39" + "source": "https://github.com/symfony/http-client/tree/v4.4.49" }, "funding": [ { @@ -2576,20 +2614,20 @@ "type": "tidelift" } ], - "time": "2022-02-28T13:17:32+00:00" + "time": "2022-11-03T19:03:45+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -2604,7 +2642,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2642,7 +2680,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -2658,20 +2696,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40" + "reference": "927013f3aac555983a5059aada98e1907d842695" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", + "reference": "927013f3aac555983a5059aada98e1907d842695", "shasum": "" }, "require": { @@ -2686,7 +2724,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2725,7 +2763,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" }, "funding": [ { @@ -2741,20 +2779,20 @@ "type": "tidelift" } ], - "time": "2022-01-04T09:04:05+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -2769,7 +2807,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2808,7 +2846,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -2824,20 +2862,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php74", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php74.git", - "reference": "a5d80cdf049bd3b0af6da91184a2cd37533c0fd8" + "reference": "aa7f1231a1aa56d695e626043252b7be6a90c4ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php74/zipball/a5d80cdf049bd3b0af6da91184a2cd37533c0fd8", - "reference": "a5d80cdf049bd3b0af6da91184a2cd37533c0fd8", + "url": "https://api.github.com/repos/symfony/polyfill-php74/zipball/aa7f1231a1aa56d695e626043252b7be6a90c4ce", + "reference": "aa7f1231a1aa56d695e626043252b7be6a90c4ce", "shasum": "" }, "require": { @@ -2846,7 +2884,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2888,7 +2926,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php74/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php74/tree/v1.27.0" }, "funding": [ { @@ -2904,20 +2942,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -2926,7 +2964,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2971,7 +3009,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -2987,20 +3025,20 @@ "type": "tidelift" } ], - "time": "2022-03-04T08:16:47+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", "shasum": "" }, "require": { @@ -3009,7 +3047,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3050,7 +3088,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" }, "funding": [ { @@ -3066,20 +3104,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:11+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", - "version": "v4.4.37", + "version": "v4.4.44", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b2d924e5a4cb284f293d5092b1dbf0d364cb8b67" + "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b2d924e5a4cb284f293d5092b1dbf0d364cb8b67", - "reference": "b2d924e5a4cb284f293d5092b1dbf0d364cb8b67", + "url": "https://api.github.com/repos/symfony/process/zipball/5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", + "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", "shasum": "" }, "require": { @@ -3112,7 +3150,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v4.4.37" + "source": "https://github.com/symfony/process/tree/v4.4.44" }, "funding": [ { @@ -3128,20 +3166,20 @@ "type": "tidelift" } ], - "time": "2022-01-27T17:14:04+00:00" + "time": "2022-06-27T13:16:42+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.4.39", + "version": "v4.4.47", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "35237c5e5dcb6593a46a860ba5b29c1d4683d80e" + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/35237c5e5dcb6593a46a860ba5b29c1d4683d80e", - "reference": "35237c5e5dcb6593a46a860ba5b29c1d4683d80e", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1069c7a3fca74578022fab6f81643248d02f8e63", + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63", "shasum": "" }, "require": { @@ -3201,7 +3239,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.39" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.47" }, "funding": [ { @@ -3217,20 +3255,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T10:38:15+00:00" + "time": "2022-10-03T15:15:11+00:00" }, { "name": "symfony/yaml", - "version": "v4.4.37", + "version": "v4.4.45", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "d7f637cc0f0cc14beb0984f2bb50da560b271311" + "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d7f637cc0f0cc14beb0984f2bb50da560b271311", - "reference": "d7f637cc0f0cc14beb0984f2bb50da560b271311", + "url": "https://api.github.com/repos/symfony/yaml/zipball/aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d", + "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d", "shasum": "" }, "require": { @@ -3272,7 +3310,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v4.4.37" + "source": "https://github.com/symfony/yaml/tree/v4.4.45" }, "funding": [ { @@ -3288,20 +3326,20 @@ "type": "tidelift" } ], - "time": "2022-01-24T20:11:01+00:00" + "time": "2022-08-02T15:47:23+00:00" }, { "name": "twig/twig", - "version": "v1.44.6", + "version": "v1.44.7", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "ae39480f010ef88adc7938503c9b02d3baf2f3b3" + "reference": "0887422319889e442458e48e2f3d9add1a172ad5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/ae39480f010ef88adc7938503c9b02d3baf2f3b3", - "reference": "ae39480f010ef88adc7938503c9b02d3baf2f3b3", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/0887422319889e442458e48e2f3d9add1a172ad5", + "reference": "0887422319889e442458e48e2f3d9add1a172ad5", "shasum": "" }, "require": { @@ -3354,7 +3392,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v1.44.6" + "source": "https://github.com/twigphp/Twig/tree/v1.44.7" }, "funding": [ { @@ -3366,7 +3404,7 @@ "type": "tidelift" } ], - "time": "2021-11-25T13:31:46+00:00" + "time": "2022-09-28T08:38:36+00:00" }, { "name": "willdurand/negotiation", @@ -3491,16 +3529,16 @@ }, { "name": "codeception/codeception", - "version": "4.1.30", + "version": "4.2.2", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "a035d77d070fa57fad438e07a65447aeca248c45" + "reference": "b88014f3348c93f3df99dc6d0967b0dbfa804474" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/a035d77d070fa57fad438e07a65447aeca248c45", - "reference": "a035d77d070fa57fad438e07a65447aeca248c45", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/b88014f3348c93f3df99dc6d0967b0dbfa804474", + "reference": "b88014f3348c93f3df99dc6d0967b0dbfa804474", "shasum": "" }, "require": { @@ -3563,11 +3601,11 @@ { "name": "Michael Bodnarchuk", "email": "davert@mail.ua", - "homepage": "http://codegyre.com" + "homepage": "https://codegyre.com" } ], "description": "BDD-style testing framework", - "homepage": "http://codeception.com/", + "homepage": "https://codeception.com/", "keywords": [ "BDD", "TDD", @@ -3577,7 +3615,7 @@ ], "support": { "issues": "https://github.com/Codeception/Codeception/issues", - "source": "https://github.com/Codeception/Codeception/tree/4.1.30" + "source": "https://github.com/Codeception/Codeception/tree/4.2.2" }, "funding": [ { @@ -3585,7 +3623,7 @@ "type": "open_collective" } ], - "time": "2022-03-05T18:12:30+00:00" + "time": "2022-08-13T13:28:25+00:00" }, { "name": "codeception/lib-asserts", @@ -3760,20 +3798,20 @@ }, { "name": "codeception/module-phpbrowser", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/Codeception/module-phpbrowser.git", - "reference": "770a6be4160a5c0c08d100dd51bff35f6056bbf1" + "reference": "8ba6bede11d0914e74d98691f427fd8f397f192e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/770a6be4160a5c0c08d100dd51bff35f6056bbf1", - "reference": "770a6be4160a5c0c08d100dd51bff35f6056bbf1", + "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/8ba6bede11d0914e74d98691f427fd8f397f192e", + "reference": "8ba6bede11d0914e74d98691f427fd8f397f192e", "shasum": "" }, "require": { - "codeception/codeception": "^4.0", + "codeception/codeception": "^4.1", "codeception/lib-innerbrowser": "^1.3", "guzzlehttp/guzzle": "^6.3|^7.0", "php": ">=5.6.0 <9.0" @@ -3814,22 +3852,22 @@ ], "support": { "issues": "https://github.com/Codeception/module-phpbrowser/issues", - "source": "https://github.com/Codeception/module-phpbrowser/tree/1.0.2" + "source": "https://github.com/Codeception/module-phpbrowser/tree/1.0.3" }, - "time": "2020-10-24T15:29:28+00:00" + "time": "2022-05-21T13:50:41+00:00" }, { "name": "codeception/phpunit-wrapper", - "version": "9.0.7", + "version": "9.0.9", "source": { "type": "git", "url": "https://github.com/Codeception/phpunit-wrapper.git", - "reference": "7d6b1a5ea4ed28d010e5d36b993db813eb49710b" + "reference": "7439a53ae367986e9c22b2ac00f9d7376bb2f8cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/7d6b1a5ea4ed28d010e5d36b993db813eb49710b", - "reference": "7d6b1a5ea4ed28d010e5d36b993db813eb49710b", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/7439a53ae367986e9c22b2ac00f9d7376bb2f8cf", + "reference": "7439a53ae367986e9c22b2ac00f9d7376bb2f8cf", "shasum": "" }, "require": { @@ -3863,9 +3901,9 @@ "description": "PHPUnit classes used by Codeception", "support": { "issues": "https://github.com/Codeception/phpunit-wrapper/issues", - "source": "https://github.com/Codeception/phpunit-wrapper/tree/9.0.7" + "source": "https://github.com/Codeception/phpunit-wrapper/tree/9.0.9" }, - "time": "2022-01-26T14:43:10+00:00" + "time": "2022-05-23T06:24:11+00:00" }, { "name": "codeception/stub", @@ -3903,30 +3941,30 @@ }, { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -3953,7 +3991,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -3969,7 +4007,7 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "getgrav/markdowndocs", @@ -4025,22 +4063,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.4.1", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "guzzlehttp/psr7": "^1.9 || ^2.4", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -4049,10 +4087,10 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -4062,8 +4100,12 @@ }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "7.4-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -4129,7 +4171,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.1" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -4145,20 +4187,20 @@ "type": "tidelift" } ], - "time": "2021-12-06T18:43:05+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -4213,7 +4255,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -4229,7 +4271,7 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "myclabs/deep-copy", @@ -4292,16 +4334,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.15.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", "shasum": "" }, "require": { @@ -4342,9 +4384,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2022-11-12T15:38:23+00:00" }, { "name": "phar-io/manifest", @@ -4457,249 +4499,22 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" - }, - "time": "2022-01-04T19:58:01+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, { "name": "phpstan/phpstan", - "version": "1.4.8", + "version": "1.9.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "2a6d6704b17c4db6190cc3104056c0aad740cb15" + "reference": "d03bccee595e2146b7c9d174486b84f4dc61b0f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2a6d6704b17c4db6190cc3104056c0aad740cb15", - "reference": "2a6d6704b17c4db6190cc3104056c0aad740cb15", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d03bccee595e2146b7c9d174486b84f4dc61b0f2", + "reference": "d03bccee595e2146b7c9d174486b84f4dc61b0f2", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.2|^8.0" }, "conflict": { "phpstan/phpstan-shim": "*" @@ -4709,11 +4524,6 @@ "phpstan.phar" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, "autoload": { "files": [ "bootstrap.php" @@ -4724,9 +4534,13 @@ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.4.8" + "source": "https://github.com/phpstan/phpstan/tree/1.9.4" }, "funding": [ { @@ -4737,45 +4551,39 @@ "url": "https://github.com/phpstan", "type": "github" }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, { "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", "type": "tidelift" } ], - "time": "2022-03-04T13:03:56+00:00" + "time": "2022-12-17T13:33:52+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", - "reference": "e5ccafb0dd8d835dd65d8d7a1a0d2b1b75414682" + "reference": "2c6792eda026d9c474c14aa018aed312686714db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/e5ccafb0dd8d835dd65d8d7a1a0d2b1b75414682", - "reference": "e5ccafb0dd8d835dd65d8d7a1a0d2b1b75414682", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/2c6792eda026d9c474c14aa018aed312686714db", + "reference": "2c6792eda026d9c474c14aa018aed312686714db", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", - "phpstan/phpstan": "^1.0" + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.9.3" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-php-parser": "^1.1", "phpstan/phpstan-phpunit": "^1.0", "phpunit/phpunit": "^9.5" }, "type": "phpstan-extension", "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, "phpstan": { "includes": [ "rules.neon" @@ -4794,29 +4602,29 @@ "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", "support": { "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", - "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.0.0" + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.1.1" }, - "time": "2021-09-23T11:02:21+00:00" + "time": "2022-12-13T14:26:20+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.23", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c", + "reference": "9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -4865,7 +4673,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.23" }, "funding": [ { @@ -4873,7 +4681,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2022-12-28T12:41:10+00:00" }, { "name": "phpunit/php-file-iterator", @@ -5118,16 +4926,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.18", + "version": "9.5.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "1b5856028273bfd855e60a887278857d872ec67a" + "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1b5856028273bfd855e60a887278857d872ec67a", - "reference": "1b5856028273bfd855e60a887278857d872ec67a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2bc7ffdca99f92d959b3f2270529334030bba38", + "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38", "shasum": "" }, "require": { @@ -5142,7 +4950,6 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", @@ -5150,20 +4957,16 @@ "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { "ext-soap": "*", "ext-xdebug": "*" @@ -5205,7 +5008,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.18" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.27" }, "funding": [ { @@ -5215,9 +5018,13 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-03-08T06:52:28+00:00" + "time": "2022-12-09T07:31:23+00:00" }, { "name": "psr/http-client", @@ -5440,16 +5247,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -5502,7 +5309,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -5510,7 +5317,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -5637,16 +5444,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { @@ -5688,7 +5495,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { @@ -5696,20 +5503,20 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -5765,7 +5572,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -5773,7 +5580,7 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", @@ -6128,28 +5935,28 @@ }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -6172,7 +5979,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -6180,7 +5987,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { "name": "sebastian/version", @@ -6237,16 +6044,16 @@ }, { "name": "symfony/browser-kit", - "version": "v5.4.3", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "18e73179c6a33d520de1b644941eba108dd811ad" + "reference": "081fe28a26b6bd671dea85ef3a4b5003f3c88027" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/18e73179c6a33d520de1b644941eba108dd811ad", - "reference": "18e73179c6a33d520de1b644941eba108dd811ad", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/081fe28a26b6bd671dea85ef3a4b5003f3c88027", + "reference": "081fe28a26b6bd671dea85ef3a4b5003f3c88027", "shasum": "" }, "require": { @@ -6289,7 +6096,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v5.4.3" + "source": "https://github.com/symfony/browser-kit/tree/v5.4.11" }, "funding": [ { @@ -6305,20 +6112,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-07-27T15:50:05+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.3", + "version": "v5.4.17", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e" + "reference": "052ef49b660f9ad2a3adb311c555c9bc11ba61f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/052ef49b660f9ad2a3adb311c555c9bc11ba61f4", + "reference": "052ef49b660f9ad2a3adb311c555c9bc11ba61f4", "shasum": "" }, "require": { @@ -6355,7 +6162,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.3" + "source": "https://github.com/symfony/css-selector/tree/v5.4.17" }, "funding": [ { @@ -6371,20 +6178,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-12-23T11:40:44+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { @@ -6422,7 +6229,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" }, "funding": [ { @@ -6438,20 +6245,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/dom-crawler", - "version": "v5.4.6", + "version": "v5.4.17", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "c0bda97480d96337bd3866026159a8b358665457" + "reference": "32a07d910edc138a1dd5508c17c6b9bc1eb27a1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c0bda97480d96337bd3866026159a8b358665457", - "reference": "c0bda97480d96337bd3866026159a8b358665457", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/32a07d910edc138a1dd5508c17c6b9bc1eb27a1b", + "reference": "32a07d910edc138a1dd5508c17c6b9bc1eb27a1b", "shasum": "" }, "require": { @@ -6497,7 +6304,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.4.6" + "source": "https://github.com/symfony/dom-crawler/tree/v5.4.17" }, "funding": [ { @@ -6513,20 +6320,20 @@ "type": "tidelift" } ], - "time": "2022-03-02T12:42:23+00:00" + "time": "2022-12-22T10:31:03+00:00" }, { "name": "symfony/finder", - "version": "v5.4.3", + "version": "v5.4.17", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" + "reference": "40c08632019838dfb3350f18cf5563b8080055fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "url": "https://api.github.com/repos/symfony/finder/zipball/40c08632019838dfb3350f18cf5563b8080055fc", + "reference": "40c08632019838dfb3350f18cf5563b8080055fc", "shasum": "" }, "require": { @@ -6560,7 +6367,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.3" + "source": "https://github.com/symfony/finder/tree/v5.4.17" }, "funding": [ { @@ -6576,7 +6383,7 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:34:36+00:00" + "time": "2022-12-22T10:31:03+00:00" }, { "name": "theseer/tokenizer", @@ -6627,64 +6434,6 @@ } ], "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], @@ -6699,11 +6448,12 @@ "ext-curl": "*", "ext-zip": "*", "ext-dom": "*", - "ext-libxml": "*" + "ext-libxml": "*", + "ext-gd": "*" }, "platform-dev": [], "platform-overrides": { "php": "7.3.6" }, - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } diff --git a/index.php b/index.php index b6b86e1..2821a44 100644 --- a/index.php +++ b/index.php @@ -3,7 +3,7 @@ /** * @package Grav.Core * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/blueprints/config/system.yaml b/system/blueprints/config/system.yaml index 787fcd5..09e8083 100644 --- a/system/blueprints/config/system.yaml +++ b/system/blueprints/config/system.yaml @@ -1156,6 +1156,13 @@ form: local6: local6 local7: local7 + log.syslog.tag: + type: text + size: small + label: PLUGIN_ADMIN.SYSLOG_TAG + help: PLUGIN_ADMIN.SYSLOG_TAG_HELP + placeholder: "grav" + debugger: type: tab title: PLUGIN_ADMIN.DEBUGGER diff --git a/system/blueprints/flex/user-accounts.yaml b/system/blueprints/flex/user-accounts.yaml index 8d336f9..74baeb6 100644 --- a/system/blueprints/flex/user-accounts.yaml +++ b/system/blueprints/flex/user-accounts.yaml @@ -125,6 +125,17 @@ config: - username - fullname + relationships: + media: + type: media + cardinality: to-many + avatar: + type: media + cardinality: to-one +# roles: +# type: user-groups +# cardinality: to-many + blueprints: configure: fields: diff --git a/system/config/system.yaml b/system/config/system.yaml index 380d650..2ffd02a 100644 --- a/system/config/system.yaml +++ b/system/config/system.yaml @@ -35,6 +35,7 @@ home: pages: type: regular # EXPERIMENTAL: Page type: regular or flex + dirs: ['page://'] # Advanced functionality, allows for multiple page paths theme: quark # Default theme (defaults to "quark" theme) order: by: default # Order pages by "default", "alpha" or "date" @@ -144,6 +145,7 @@ log: handler: file # Log handler. Currently supported: file | syslog syslog: facility: local6 # Syslog facilities output + tag: grav # Syslog tag. Default: "grav". debugger: enabled: false # Enable Grav debugger and following settings diff --git a/system/defines.php b/system/defines.php index 5f743db..803ab45 100644 --- a/system/defines.php +++ b/system/defines.php @@ -3,13 +3,13 @@ /** * @package Grav\Core * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ // Some standard defines define('GRAV', true); -define('GRAV_VERSION', '1.7.31'); +define('GRAV_VERSION', '1.7.38'); define('GRAV_SCHEMA', '1.7.0_2020-11-20_1'); define('GRAV_TESTING', false); diff --git a/system/install.php b/system/install.php index 5c9440f..05e6949 100644 --- a/system/install.php +++ b/system/install.php @@ -2,7 +2,7 @@ /** * @package Grav\Core * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/router.php b/system/router.php index c19f814..2c9eefc 100644 --- a/system/router.php +++ b/system/router.php @@ -3,7 +3,7 @@ /** * @package Grav\Core * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets.php b/system/src/Grav/Common/Assets.php index 621a140..125a518 100644 --- a/system/src/Grav/Common/Assets.php +++ b/system/src/Grav/Common/Assets.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/BaseAsset.php b/system/src/Grav/Common/Assets/BaseAsset.php index d062d75..c1d67ce 100644 --- a/system/src/Grav/Common/Assets/BaseAsset.php +++ b/system/src/Grav/Common/Assets/BaseAsset.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/BlockAssets.php b/system/src/Grav/Common/Assets/BlockAssets.php index 7d97960..de9984f 100644 --- a/system/src/Grav/Common/Assets/BlockAssets.php +++ b/system/src/Grav/Common/Assets/BlockAssets.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/Css.php b/system/src/Grav/Common/Assets/Css.php index ea6b388..4c80ead 100644 --- a/system/src/Grav/Common/Assets/Css.php +++ b/system/src/Grav/Common/Assets/Css.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/InlineCss.php b/system/src/Grav/Common/Assets/InlineCss.php index 4984db4..ab53eb9 100644 --- a/system/src/Grav/Common/Assets/InlineCss.php +++ b/system/src/Grav/Common/Assets/InlineCss.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/InlineJs.php b/system/src/Grav/Common/Assets/InlineJs.php index e38a51a..c591c3e 100644 --- a/system/src/Grav/Common/Assets/InlineJs.php +++ b/system/src/Grav/Common/Assets/InlineJs.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/InlineJsModule.php b/system/src/Grav/Common/Assets/InlineJsModule.php index 42ce6f1..2eaf138 100644 --- a/system/src/Grav/Common/Assets/InlineJsModule.php +++ b/system/src/Grav/Common/Assets/InlineJsModule.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/Js.php b/system/src/Grav/Common/Assets/Js.php index 8687a86..048cf17 100644 --- a/system/src/Grav/Common/Assets/Js.php +++ b/system/src/Grav/Common/Assets/Js.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/JsModule.php b/system/src/Grav/Common/Assets/JsModule.php index 5c2a836..519b9d9 100644 --- a/system/src/Grav/Common/Assets/JsModule.php +++ b/system/src/Grav/Common/Assets/JsModule.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/Link.php b/system/src/Grav/Common/Assets/Link.php index ecafcea..8ab193e 100644 --- a/system/src/Grav/Common/Assets/Link.php +++ b/system/src/Grav/Common/Assets/Link.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/Pipeline.php b/system/src/Grav/Common/Assets/Pipeline.php index 0010d7b..e828a68 100644 --- a/system/src/Grav/Common/Assets/Pipeline.php +++ b/system/src/Grav/Common/Assets/Pipeline.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/Traits/AssetUtilsTrait.php b/system/src/Grav/Common/Assets/Traits/AssetUtilsTrait.php index 0e3f392..e2d8981 100644 --- a/system/src/Grav/Common/Assets/Traits/AssetUtilsTrait.php +++ b/system/src/Grav/Common/Assets/Traits/AssetUtilsTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets\Traits * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/Traits/LegacyAssetsTrait.php b/system/src/Grav/Common/Assets/Traits/LegacyAssetsTrait.php index c1ef0a3..28372a6 100644 --- a/system/src/Grav/Common/Assets/Traits/LegacyAssetsTrait.php +++ b/system/src/Grav/Common/Assets/Traits/LegacyAssetsTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets\Traits * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Assets/Traits/TestingAssetsTrait.php b/system/src/Grav/Common/Assets/Traits/TestingAssetsTrait.php index b11b439..a16eb37 100644 --- a/system/src/Grav/Common/Assets/Traits/TestingAssetsTrait.php +++ b/system/src/Grav/Common/Assets/Traits/TestingAssetsTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Assets\Traits * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Backup/Backups.php b/system/src/Grav/Common/Backup/Backups.php index ff4789d..aa84fdf 100644 --- a/system/src/Grav/Common/Backup/Backups.php +++ b/system/src/Grav/Common/Backup/Backups.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Backup * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Browser.php b/system/src/Grav/Common/Browser.php index ffc8da3..a5fbaed 100644 --- a/system/src/Grav/Common/Browser.php +++ b/system/src/Grav/Common/Browser.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Cache.php b/system/src/Grav/Common/Cache.php index ed40a08..2e92190 100644 --- a/system/src/Grav/Common/Cache.php +++ b/system/src/Grav/Common/Cache.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Composer.php b/system/src/Grav/Common/Composer.php index 667edf2..caf5eb1 100644 --- a/system/src/Grav/Common/Composer.php +++ b/system/src/Grav/Common/Composer.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Config/CompiledBase.php b/system/src/Grav/Common/Config/CompiledBase.php index b462b4c..999b0c0 100644 --- a/system/src/Grav/Common/Config/CompiledBase.php +++ b/system/src/Grav/Common/Config/CompiledBase.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Config * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Config/CompiledBlueprints.php b/system/src/Grav/Common/Config/CompiledBlueprints.php index e838591..df9d1be 100644 --- a/system/src/Grav/Common/Config/CompiledBlueprints.php +++ b/system/src/Grav/Common/Config/CompiledBlueprints.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Config * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Config/CompiledConfig.php b/system/src/Grav/Common/Config/CompiledConfig.php index 2db6de5..4513133 100644 --- a/system/src/Grav/Common/Config/CompiledConfig.php +++ b/system/src/Grav/Common/Config/CompiledConfig.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Config * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Config/CompiledLanguages.php b/system/src/Grav/Common/Config/CompiledLanguages.php index 0a26686..cd7f904 100644 --- a/system/src/Grav/Common/Config/CompiledLanguages.php +++ b/system/src/Grav/Common/Config/CompiledLanguages.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Config * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Config/Config.php b/system/src/Grav/Common/Config/Config.php index ca027bf..e814d3e 100644 --- a/system/src/Grav/Common/Config/Config.php +++ b/system/src/Grav/Common/Config/Config.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Config * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Config/ConfigFileFinder.php b/system/src/Grav/Common/Config/ConfigFileFinder.php index 28f9dc1..68f8161 100644 --- a/system/src/Grav/Common/Config/ConfigFileFinder.php +++ b/system/src/Grav/Common/Config/ConfigFileFinder.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Config * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Config/Languages.php b/system/src/Grav/Common/Config/Languages.php index 05798c5..44d92f1 100644 --- a/system/src/Grav/Common/Config/Languages.php +++ b/system/src/Grav/Common/Config/Languages.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Config * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Config/Setup.php b/system/src/Grav/Common/Config/Setup.php index f8ce943..68db799 100644 --- a/system/src/Grav/Common/Config/Setup.php +++ b/system/src/Grav/Common/Config/Setup.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Config * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -182,13 +182,14 @@ class Setup extends Data // If no environment is set, make sure we get one (CLI or hostname). if (null === $environment) { if (defined('GRAV_CLI')) { + $request = null; + $uri = null; $environment = 'cli'; } else { /** @var ServerRequestInterface $request */ $request = $container['request']; - $host = $request->getUri()->getHost(); - - $environment = Utils::substrToString($host, ':'); + $uri = $request->getUri(); + $environment = $uri->getHost(); } } diff --git a/system/src/Grav/Common/Data/Blueprint.php b/system/src/Grav/Common/Data/Blueprint.php index ef6aef5..c13d9a9 100644 --- a/system/src/Grav/Common/Data/Blueprint.php +++ b/system/src/Grav/Common/Data/Blueprint.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Data * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -515,7 +515,7 @@ class Blueprint extends BlueprintForm $success = $this->resolveActions($user, $actions); } if (!$success) { - $this->addPropertyRecursive($field, 'validate', ['ignore' => true]); + static::addPropertyRecursive($field, 'validate', ['ignore' => true]); } } @@ -566,7 +566,7 @@ class Blueprint extends BlueprintForm } if ($matches) { - $this->addPropertyRecursive($field, 'validate', ['ignore' => true]); + static::addPropertyRecursive($field, 'validate', ['ignore' => true]); return; } } @@ -577,7 +577,7 @@ class Blueprint extends BlueprintForm * @param mixed $value * @return void */ - protected function addPropertyRecursive(array &$field, $property, $value) + public static function addPropertyRecursive(array &$field, $property, $value) { if (is_array($value) && isset($field[$property]) && is_array($field[$property])) { $field[$property] = array_merge_recursive($field[$property], $value); @@ -587,7 +587,7 @@ class Blueprint extends BlueprintForm if (!empty($field['fields'])) { foreach ($field['fields'] as $key => &$child) { - $this->addPropertyRecursive($child, $property, $value); + static::addPropertyRecursive($child, $property, $value); } } } diff --git a/system/src/Grav/Common/Data/BlueprintSchema.php b/system/src/Grav/Common/Data/BlueprintSchema.php index 8cc6303..137e042 100644 --- a/system/src/Grav/Common/Data/BlueprintSchema.php +++ b/system/src/Grav/Common/Data/BlueprintSchema.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Data * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Data/Blueprints.php b/system/src/Grav/Common/Data/Blueprints.php index dfdd46f..60dd8be 100644 --- a/system/src/Grav/Common/Data/Blueprints.php +++ b/system/src/Grav/Common/Data/Blueprints.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Data * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Data/Data.php b/system/src/Grav/Common/Data/Data.php index 0f09b2d..92d890e 100644 --- a/system/src/Grav/Common/Data/Data.php +++ b/system/src/Grav/Common/Data/Data.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Data * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Data/DataInterface.php b/system/src/Grav/Common/Data/DataInterface.php index a4bc214..44d77eb 100644 --- a/system/src/Grav/Common/Data/DataInterface.php +++ b/system/src/Grav/Common/Data/DataInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Data * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Data/Validation.php b/system/src/Grav/Common/Data/Validation.php index 569ea51..a551fb5 100644 --- a/system/src/Grav/Common/Data/Validation.php +++ b/system/src/Grav/Common/Data/Validation.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Data * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -246,7 +246,9 @@ class Validation return false; } - $max = (int)($params['max'] ?? 0); + $multiline = isset($params['multiline']) && $params['multiline']; + + $max = (int)($params['max'] ?? ($multiline ? 65536 : 2048)); if ($max && $len > $max) { return false; } @@ -256,7 +258,7 @@ class Validation return false; } - if ((!isset($params['multiline']) || !$params['multiline']) && preg_match('/\R/um', $value)) { + if (!$multiline && preg_match('/\R/um', $value)) { return false; } @@ -317,6 +319,10 @@ class Validation */ public static function typeCommaList($value, array $params, array $field) { + if (!isset($params['max'])) { + $params['max'] = 2048; + } + return is_array($value) ? true : self::typeText($value, $params, $field); } @@ -379,6 +385,10 @@ class Validation */ public static function typePassword($value, array $params, array $field) { + if (!isset($params['max'])) { + $params['max'] = 256; + } + return self::typeText($value, $params, $field); } @@ -621,6 +631,10 @@ class Validation */ public static function typeEmail($value, array $params, array $field) { + if (!isset($params['max'])) { + $params['max'] = 320; + } + $values = !is_array($value) ? explode(',', preg_replace('/\s+/', '', $value)) : $value; foreach ($values as $val) { @@ -642,6 +656,10 @@ class Validation */ public static function typeUrl($value, array $params, array $field) { + if (!isset($params['max'])) { + $params['max'] = 2048; + } + return self::typeText($value, $params, $field) && filter_var($value, FILTER_VALIDATE_URL); } diff --git a/system/src/Grav/Common/Data/ValidationException.php b/system/src/Grav/Common/Data/ValidationException.php index 9a3d900..fa82e2b 100644 --- a/system/src/Grav/Common/Data/ValidationException.php +++ b/system/src/Grav/Common/Data/ValidationException.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Data * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Debugger.php b/system/src/Grav/Common/Debugger.php index e7b1624..da9eaa6 100644 --- a/system/src/Grav/Common/Debugger.php +++ b/system/src/Grav/Common/Debugger.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Errors/BareHandler.php b/system/src/Grav/Common/Errors/BareHandler.php index 9093827..2d824cb 100644 --- a/system/src/Grav/Common/Errors/BareHandler.php +++ b/system/src/Grav/Common/Errors/BareHandler.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Errors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Errors/Errors.php b/system/src/Grav/Common/Errors/Errors.php index 92f885b..9357ba6 100644 --- a/system/src/Grav/Common/Errors/Errors.php +++ b/system/src/Grav/Common/Errors/Errors.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Errors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Errors/SimplePageHandler.php b/system/src/Grav/Common/Errors/SimplePageHandler.php index 80c4f96..4b0db05 100644 --- a/system/src/Grav/Common/Errors/SimplePageHandler.php +++ b/system/src/Grav/Common/Errors/SimplePageHandler.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Errors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Errors/SystemFacade.php b/system/src/Grav/Common/Errors/SystemFacade.php index edf2b53..04645ce 100644 --- a/system/src/Grav/Common/Errors/SystemFacade.php +++ b/system/src/Grav/Common/Errors/SystemFacade.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Errors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -43,4 +43,25 @@ class SystemFacade extends \Whoops\Util\SystemFacade $handler(); } } + + + /** + * @param int $httpCode + * + * @return int + */ + public function setHttpResponseCode($httpCode) + { + if (!headers_sent()) { + // Ensure that no 'location' header is present as otherwise this + // will override the HTTP code being set here, and mask the + // expected error page. + header_remove('location'); + + // Work around PHP bug #8218 (8.0.17 & 8.1.4). + header_remove('Content-Encoding'); + } + + return http_response_code($httpCode); + } } diff --git a/system/src/Grav/Common/File/CompiledFile.php b/system/src/Grav/Common/File/CompiledFile.php index 2228422..0654568 100644 --- a/system/src/Grav/Common/File/CompiledFile.php +++ b/system/src/Grav/Common/File/CompiledFile.php @@ -3,13 +3,15 @@ /** * @package Grav\Common\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ namespace Grav\Common\File; use Exception; +use Grav\Common\Debugger; +use Grav\Common\Grav; use Grav\Common\Utils; use RocketTheme\Toolbox\File\PhpFile; use RuntimeException; @@ -32,9 +34,10 @@ trait CompiledFile public function content($var = null) { try { + $filename = $this->filename; // If nothing has been loaded, attempt to get pre-compiled version of the file first. if ($var === null && $this->raw === null && $this->content === null) { - $key = md5($this->filename); + $key = md5($filename); $file = PhpFile::instance(CACHE_DIR . "compiled/files/{$key}{$this->extension}.php"); $modified = $this->modified(); @@ -48,39 +51,49 @@ trait CompiledFile $class = get_class($this); + $size = filesize($filename); $cache = $file->exists() ? $file->content() : null; // Load real file if cache isn't up to date (or is invalid). if (!isset($cache['@class']) || $cache['@class'] !== $class || $cache['modified'] !== $modified - || $cache['filename'] !== $this->filename + || ($cache['size'] ?? null) !== $size + || $cache['filename'] !== $filename ) { // Attempt to lock the file for writing. try { - $file->lock(false); + $locked = $file->lock(false); } catch (Exception $e) { - // Another process has locked the file; we will check this in a bit. + $locked = false; + + /** @var Debugger $debugger */ + $debugger = Grav::instance()['debugger']; + $debugger->addMessage(sprintf('%s(): Cannot obtain a lock for compiling cache file for %s: %s', __METHOD__, $this->filename, $e->getMessage()), 'warning'); } // Decode RAW file into compiled array. $data = (array)$this->decode($this->raw()); $cache = [ '@class' => $class, - 'filename' => $this->filename, + 'filename' => $filename, 'modified' => $modified, + 'size' => $size, 'data' => $data ]; // If compiled file wasn't already locked by another process, save it. - if ($file->locked() !== false) { + if ($locked) { $file->save($cache); $file->unlock(); // Compile cached file into bytecode cache - if (function_exists('opcache_invalidate')) { + if (function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN)) { + $lockName = $file->filename(); + // Silence error if function exists, but is restricted. - @opcache_invalidate($file->filename(), true); + @opcache_invalidate($lockName, true); + @opcache_compile_file($lockName); } } } @@ -89,12 +102,71 @@ trait CompiledFile $this->content = $cache['data']; } } catch (Exception $e) { - throw new RuntimeException(sprintf('Failed to read %s: %s', Utils::basename($this->filename), $e->getMessage()), 500, $e); + throw new RuntimeException(sprintf('Failed to read %s: %s', Utils::basename($filename), $e->getMessage()), 500, $e); } return parent::content($var); } + /** + * Save file. + * + * @param mixed $data Optional data to be saved, usually array. + * @return void + * @throws RuntimeException + */ + public function save($data = null) + { + // Make sure that the cache file is always up to date! + $key = md5($this->filename); + $file = PhpFile::instance(CACHE_DIR . "compiled/files/{$key}{$this->extension}.php"); + try { + $locked = $file->lock(); + } catch (Exception $e) { + $locked = false; + + /** @var Debugger $debugger */ + $debugger = Grav::instance()['debugger']; + $debugger->addMessage(sprintf('%s(): Cannot obtain a lock for compiling cache file for %s: %s', __METHOD__, $this->filename, $e->getMessage()), 'warning'); + } + + parent::save($data); + + if ($locked) { + $modified = $this->modified(); + $filename = $this->filename; + $class = get_class($this); + $size = filesize($filename); + + // windows doesn't play nicely with this as it can't read when locked + if (!Utils::isWindows()) { + // Reload data from the filesystem. This ensures that we always cache the correct data (see issue #2282). + $this->raw = $this->content = null; + $data = (array)$this->decode($this->raw()); + } + + // Decode data into compiled array. + $cache = [ + '@class' => $class, + 'filename' => $filename, + 'modified' => $modified, + 'size' => $size, + 'data' => $data + ]; + + $file->save($cache); + $file->unlock(); + + // Compile cached file into bytecode cache + if (function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN)) { + $lockName = $file->filename(); + // Silence error if function exists, but is restricted. + @opcache_invalidate($lockName, true); + @opcache_compile_file($lockName); + } + } + } + /** * Serialize file. * diff --git a/system/src/Grav/Common/File/CompiledJsonFile.php b/system/src/Grav/Common/File/CompiledJsonFile.php index e8347bb..cb78922 100644 --- a/system/src/Grav/Common/File/CompiledJsonFile.php +++ b/system/src/Grav/Common/File/CompiledJsonFile.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/File/CompiledMarkdownFile.php b/system/src/Grav/Common/File/CompiledMarkdownFile.php index 1083111..dd1bb0a 100644 --- a/system/src/Grav/Common/File/CompiledMarkdownFile.php +++ b/system/src/Grav/Common/File/CompiledMarkdownFile.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/File/CompiledYamlFile.php b/system/src/Grav/Common/File/CompiledYamlFile.php index 0f0c64f..4e5a231 100644 --- a/system/src/Grav/Common/File/CompiledYamlFile.php +++ b/system/src/Grav/Common/File/CompiledYamlFile.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Filesystem/Archiver.php b/system/src/Grav/Common/Filesystem/Archiver.php index 4c291a5..9e68137 100644 --- a/system/src/Grav/Common/Filesystem/Archiver.php +++ b/system/src/Grav/Common/Filesystem/Archiver.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Filesystem * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Filesystem/Folder.php b/system/src/Grav/Common/Filesystem/Folder.php index 8dac2e5..9465790 100644 --- a/system/src/Grav/Common/Filesystem/Folder.php +++ b/system/src/Grav/Common/Filesystem/Folder.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Filesystem * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -31,32 +31,34 @@ abstract class Folder /** * Recursively find the last modified time under given path. * - * @param string $path + * @param array $paths * @return int */ - public static function lastModifiedFolder($path) + public static function lastModifiedFolder(array $paths): int { - if (!file_exists($path)) { - return 0; - } - $last_modified = 0; /** @var UniformResourceLocator $locator */ $locator = Grav::instance()['locator']; $flags = RecursiveDirectoryIterator::SKIP_DOTS; - if ($locator->isStream($path)) { - $directory = $locator->getRecursiveIterator($path, $flags); - } else { - $directory = new RecursiveDirectoryIterator($path, $flags); - } - $filter = new RecursiveFolderFilterIterator($directory); - $iterator = new RecursiveIteratorIterator($filter, RecursiveIteratorIterator::SELF_FIRST); - foreach ($iterator as $dir) { - $dir_modified = $dir->getMTime(); - if ($dir_modified > $last_modified) { - $last_modified = $dir_modified; + foreach ($paths as $path) { + if (!file_exists($path)) { + return 0; + } + if ($locator->isStream($path)) { + $directory = $locator->getRecursiveIterator($path, $flags); + } else { + $directory = new RecursiveDirectoryIterator($path, $flags); + } + $filter = new RecursiveFolderFilterIterator($directory); + $iterator = new RecursiveIteratorIterator($filter, RecursiveIteratorIterator::SELF_FIRST); + + foreach ($iterator as $dir) { + $dir_modified = $dir->getMTime(); + if ($dir_modified > $last_modified) { + $last_modified = $dir_modified; + } } } @@ -66,38 +68,40 @@ abstract class Folder /** * Recursively find the last modified time under given path by file. * - * @param string $path + * @param array $paths * @param string $extensions which files to search for specifically * @return int */ - public static function lastModifiedFile($path, $extensions = 'md|yaml') + public static function lastModifiedFile(array $paths, $extensions = 'md|yaml'): int { - if (!file_exists($path)) { - return 0; - } - $last_modified = 0; /** @var UniformResourceLocator $locator */ $locator = Grav::instance()['locator']; $flags = RecursiveDirectoryIterator::SKIP_DOTS; - if ($locator->isStream($path)) { - $directory = $locator->getRecursiveIterator($path, $flags); - } else { - $directory = new RecursiveDirectoryIterator($path, $flags); - } - $recursive = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST); - $iterator = new RegexIterator($recursive, '/^.+\.'.$extensions.'$/i'); - /** @var RecursiveDirectoryIterator $file */ - foreach ($iterator as $filepath => $file) { - try { - $file_modified = $file->getMTime(); - if ($file_modified > $last_modified) { - $last_modified = $file_modified; + foreach($paths as $path) { + if (!file_exists($path)) { + return 0; + } + if ($locator->isStream($path)) { + $directory = $locator->getRecursiveIterator($path, $flags); + } else { + $directory = new RecursiveDirectoryIterator($path, $flags); + } + $recursive = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST); + $iterator = new RegexIterator($recursive, '/^.+\.'.$extensions.'$/i'); + + /** @var RecursiveDirectoryIterator $file */ + foreach ($iterator as $file) { + try { + $file_modified = $file->getMTime(); + if ($file_modified > $last_modified) { + $last_modified = $file_modified; + } + } catch (Exception $e) { + Grav::instance()['log']->error('Could not process file: ' . $e->getMessage()); } - } catch (Exception $e) { - Grav::instance()['log']->error('Could not process file: ' . $e->getMessage()); } } @@ -107,28 +111,30 @@ abstract class Folder /** * Recursively md5 hash all files in a path * - * @param string $path + * @param array $paths * @return string */ - public static function hashAllFiles($path) + public static function hashAllFiles(array $paths): string { $files = []; - if (file_exists($path)) { - $flags = RecursiveDirectoryIterator::SKIP_DOTS; + foreach ($paths as $path) { + if (file_exists($path)) { + $flags = RecursiveDirectoryIterator::SKIP_DOTS; - /** @var UniformResourceLocator $locator */ - $locator = Grav::instance()['locator']; - if ($locator->isStream($path)) { - $directory = $locator->getRecursiveIterator($path, $flags); - } else { - $directory = new RecursiveDirectoryIterator($path, $flags); - } + /** @var UniformResourceLocator $locator */ + $locator = Grav::instance()['locator']; + if ($locator->isStream($path)) { + $directory = $locator->getRecursiveIterator($path, $flags); + } else { + $directory = new RecursiveDirectoryIterator($path, $flags); + } - $iterator = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST); + $iterator = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST); - foreach ($iterator as $file) { - $files[] = $file->getPathname() . '?'. $file->getMTime(); + foreach ($iterator as $file) { + $files[] = $file->getPathname() . '?'. $file->getMTime(); + } } } diff --git a/system/src/Grav/Common/Filesystem/RecursiveDirectoryFilterIterator.php b/system/src/Grav/Common/Filesystem/RecursiveDirectoryFilterIterator.php index 75c19bc..929629c 100644 --- a/system/src/Grav/Common/Filesystem/RecursiveDirectoryFilterIterator.php +++ b/system/src/Grav/Common/Filesystem/RecursiveDirectoryFilterIterator.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Filesystem * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php b/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php index 12d6c6b..70f4340 100644 --- a/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php +++ b/system/src/Grav/Common/Filesystem/RecursiveFolderFilterIterator.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Filesystem * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Filesystem/ZipArchiver.php b/system/src/Grav/Common/Filesystem/ZipArchiver.php index 4f2a9ee..4b7a3ca 100644 --- a/system/src/Grav/Common/Filesystem/ZipArchiver.php +++ b/system/src/Grav/Common/Filesystem/ZipArchiver.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Filesystem * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/FlexCollection.php b/system/src/Grav/Common/Flex/FlexCollection.php index 704e21f..3a9116c 100644 --- a/system/src/Grav/Common/Flex/FlexCollection.php +++ b/system/src/Grav/Common/Flex/FlexCollection.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/FlexIndex.php b/system/src/Grav/Common/Flex/FlexIndex.php index f903c88..317a9a0 100644 --- a/system/src/Grav/Common/Flex/FlexIndex.php +++ b/system/src/Grav/Common/Flex/FlexIndex.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/FlexObject.php b/system/src/Grav/Common/Flex/FlexObject.php index 887d7a3..39c63bc 100644 --- a/system/src/Grav/Common/Flex/FlexObject.php +++ b/system/src/Grav/Common/Flex/FlexObject.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Traits/FlexCollectionTrait.php b/system/src/Grav/Common/Flex/Traits/FlexCollectionTrait.php index b919b40..077daca 100644 --- a/system/src/Grav/Common/Flex/Traits/FlexCollectionTrait.php +++ b/system/src/Grav/Common/Flex/Traits/FlexCollectionTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Traits/FlexCommonTrait.php b/system/src/Grav/Common/Flex/Traits/FlexCommonTrait.php index 9291a42..b652c93 100644 --- a/system/src/Grav/Common/Flex/Traits/FlexCommonTrait.php +++ b/system/src/Grav/Common/Flex/Traits/FlexCommonTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Traits/FlexGravTrait.php b/system/src/Grav/Common/Flex/Traits/FlexGravTrait.php index c34b89d..c995185 100644 --- a/system/src/Grav/Common/Flex/Traits/FlexGravTrait.php +++ b/system/src/Grav/Common/Flex/Traits/FlexGravTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Traits/FlexIndexTrait.php b/system/src/Grav/Common/Flex/Traits/FlexIndexTrait.php index a71eb99..253fe8e 100644 --- a/system/src/Grav/Common/Flex/Traits/FlexIndexTrait.php +++ b/system/src/Grav/Common/Flex/Traits/FlexIndexTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Traits/FlexObjectTrait.php b/system/src/Grav/Common/Flex/Traits/FlexObjectTrait.php index 3c81f07..2f0adfa 100644 --- a/system/src/Grav/Common/Flex/Traits/FlexObjectTrait.php +++ b/system/src/Grav/Common/Flex/Traits/FlexObjectTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Generic/GenericCollection.php b/system/src/Grav/Common/Flex/Types/Generic/GenericCollection.php index e4ec3d4..8f74703 100644 --- a/system/src/Grav/Common/Flex/Types/Generic/GenericCollection.php +++ b/system/src/Grav/Common/Flex/Types/Generic/GenericCollection.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Generic/GenericIndex.php b/system/src/Grav/Common/Flex/Types/Generic/GenericIndex.php index fdba503..0053398 100644 --- a/system/src/Grav/Common/Flex/Types/Generic/GenericIndex.php +++ b/system/src/Grav/Common/Flex/Types/Generic/GenericIndex.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Generic/GenericObject.php b/system/src/Grav/Common/Flex/Types/Generic/GenericObject.php index eba642b..ab0028f 100644 --- a/system/src/Grav/Common/Flex/Types/Generic/GenericObject.php +++ b/system/src/Grav/Common/Flex/Types/Generic/GenericObject.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Pages/PageCollection.php b/system/src/Grav/Common/Flex/Types/Pages/PageCollection.php index b6c5230..9442d0f 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/PageCollection.php +++ b/system/src/Grav/Common/Flex/Types/Pages/PageCollection.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Pages/PageIndex.php b/system/src/Grav/Common/Flex/Types/Pages/PageIndex.php index f3978bc..6ad36ef 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/PageIndex.php +++ b/system/src/Grav/Common/Flex/Types/Pages/PageIndex.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -454,7 +454,7 @@ class PageIndex extends FlexPageIndex implements PageCollectionInterface continue; } - // Get the main key without template and langauge. + // Get the main key without template and language. [$main_key,] = explode('|', $entry['storage_key'] . '|', 2); // Update storage key and language. @@ -527,10 +527,7 @@ class PageIndex extends FlexPageIndex implements PageCollectionInterface $language = $options['lang']; $status = 'error'; - $msg = null; $response = []; - $children = null; - $sub_route = null; $extra = null; // Handle leaf_route @@ -610,12 +607,12 @@ class PageIndex extends FlexPageIndex implements PageCollectionInterface $children = $page->children(); /** @var PageIndex $children */ $children = $children->getIndex(); - $selectedChildren = $children->filterBy($filters, true); + $selectedChildren = $children->filterBy($filters + ['language' => $language], true); /** @var Header $header */ $header = $page->header(); - if (!$field && $header->get('admin.children_display_order') === 'collection' && ($orderby = $header->get('content.order.by'))) { + if (!$field && $header->get('admin.children_display_order', 'collection') === 'collection' && ($orderby = $header->get('content.order.by'))) { // Use custom sorting by page header. $sortby = $orderby; $order = $header->get('content.order.dir', $order); diff --git a/system/src/Grav/Common/Flex/Types/Pages/PageObject.php b/system/src/Grav/Common/Flex/Types/Pages/PageObject.php index a05f0eb..db6c2c5 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/PageObject.php +++ b/system/src/Grav/Common/Flex/Types/Pages/PageObject.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -242,6 +242,7 @@ class PageObject extends FlexPageObject { /** @var PageCollection $siblings */ $siblings = $variables['siblings']; + /** @var PageObject $sibling */ foreach ($siblings as $sibling) { $sibling->save(false); } @@ -585,38 +586,46 @@ class PageObject extends FlexPageObject */ public function filterBy(array $filters, bool $recursive = false): bool { + $language = $filters['language'] ?? null; + if (null !== $language) { + /** @var PageObject $test */ + $test = $this->getTranslation($language) ?? $this; + } else { + $test = $this; + } + foreach ($filters as $key => $value) { switch ($key) { case 'search': - $matches = $this->search((string)$value) > 0.0; + $matches = $test->search((string)$value) > 0.0; break; case 'page_type': $types = $value ? explode(',', $value) : []; - $matches = in_array($this->template(), $types, true); + $matches = in_array($test->template(), $types, true); break; case 'extension': - $matches = Utils::contains((string)$value, $this->extension()); + $matches = Utils::contains((string)$value, $test->extension()); break; case 'routable': - $matches = $this->isRoutable() === (bool)$value; + $matches = $test->isRoutable() === (bool)$value; break; case 'published': - $matches = $this->isPublished() === (bool)$value; + $matches = $test->isPublished() === (bool)$value; break; case 'visible': - $matches = $this->isVisible() === (bool)$value; + $matches = $test->isVisible() === (bool)$value; break; case 'module': - $matches = $this->isModule() === (bool)$value; + $matches = $test->isModule() === (bool)$value; break; case 'page': - $matches = $this->isPage() === (bool)$value; + $matches = $test->isPage() === (bool)$value; break; case 'folder': - $matches = $this->isPage() === !$value; + $matches = $test->isPage() === !$value; break; case 'translated': - $matches = $this->hasTranslation() === (bool)$value; + $matches = $test->hasTranslation() === (bool)$value; break; default: $matches = true; diff --git a/system/src/Grav/Common/Flex/Types/Pages/Storage/PageStorage.php b/system/src/Grav/Common/Flex/Types/Pages/Storage/PageStorage.php index f590e36..136a64a 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/Storage/PageStorage.php +++ b/system/src/Grav/Common/Flex/Types/Pages/Storage/PageStorage.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Pages/Traits/PageContentTrait.php b/system/src/Grav/Common/Flex/Types/Pages/Traits/PageContentTrait.php index 9a2c7c3..355c583 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/Traits/PageContentTrait.php +++ b/system/src/Grav/Common/Flex/Types/Pages/Traits/PageContentTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Pages/Traits/PageLegacyTrait.php b/system/src/Grav/Common/Flex/Types/Pages/Traits/PageLegacyTrait.php index 98f3949..bb8e728 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/Traits/PageLegacyTrait.php +++ b/system/src/Grav/Common/Flex/Types/Pages/Traits/PageLegacyTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Pages/Traits/PageRoutableTrait.php b/system/src/Grav/Common/Flex/Types/Pages/Traits/PageRoutableTrait.php index ace74dc..1608ee3 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/Traits/PageRoutableTrait.php +++ b/system/src/Grav/Common/Flex/Types/Pages/Traits/PageRoutableTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Pages/Traits/PageTranslateTrait.php b/system/src/Grav/Common/Flex/Types/Pages/Traits/PageTranslateTrait.php index a30ae1a..6f1b943 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/Traits/PageTranslateTrait.php +++ b/system/src/Grav/Common/Flex/Types/Pages/Traits/PageTranslateTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupCollection.php b/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupCollection.php index 3a91d77..d322581 100644 --- a/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupCollection.php +++ b/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupCollection.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupIndex.php b/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupIndex.php index 66de52e..1d75d0b 100644 --- a/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupIndex.php +++ b/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupIndex.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupObject.php b/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupObject.php index 4a59d52..d1e4c40 100644 --- a/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupObject.php +++ b/system/src/Grav/Common/Flex/Types/UserGroups/UserGroupObject.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Users/Storage/UserFileStorage.php b/system/src/Grav/Common/Flex/Types/Users/Storage/UserFileStorage.php index 664f24f..d8b4914 100644 --- a/system/src/Grav/Common/Flex/Types/Users/Storage/UserFileStorage.php +++ b/system/src/Grav/Common/Flex/Types/Users/Storage/UserFileStorage.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Users/Storage/UserFolderStorage.php b/system/src/Grav/Common/Flex/Types/Users/Storage/UserFolderStorage.php index a037f0e..774fa96 100644 --- a/system/src/Grav/Common/Flex/Types/Users/Storage/UserFolderStorage.php +++ b/system/src/Grav/Common/Flex/Types/Users/Storage/UserFolderStorage.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Users/Traits/UserObjectLegacyTrait.php b/system/src/Grav/Common/Flex/Types/Users/Traits/UserObjectLegacyTrait.php index 07acf66..813e13c 100644 --- a/system/src/Grav/Common/Flex/Types/Users/Traits/UserObjectLegacyTrait.php +++ b/system/src/Grav/Common/Flex/Types/Users/Traits/UserObjectLegacyTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Users/UserCollection.php b/system/src/Grav/Common/Flex/Types/Users/UserCollection.php index f5641e7..5fb4641 100644 --- a/system/src/Grav/Common/Flex/Types/Users/UserCollection.php +++ b/system/src/Grav/Common/Flex/Types/Users/UserCollection.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Flex/Types/Users/UserIndex.php b/system/src/Grav/Common/Flex/Types/Users/UserIndex.php index 4a33b73..cc1a705 100644 --- a/system/src/Grav/Common/Flex/Types/Users/UserIndex.php +++ b/system/src/Grav/Common/Flex/Types/Users/UserIndex.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -30,7 +30,7 @@ use function is_string; */ class UserIndex extends FlexIndex implements UserCollectionInterface { - public const VERSION = parent::VERSION . '.1'; + public const VERSION = parent::VERSION . '.2'; /** * @param FlexStorageInterface $storage @@ -50,7 +50,7 @@ class UserIndex extends FlexIndex implements UserCollectionInterface // return $index['index']; //} - // Load up to date index. + // Load up-to-date index. $entries = parent::loadEntriesFromStorage($storage); return static::updateIndexFile($storage, $index['index'], $entries, ['force_update' => $force]); @@ -142,9 +142,11 @@ class UserIndex extends FlexIndex implements UserCollectionInterface } elseif ($field === 'flex_key') { $user = $this->withKeyField('flex_key')->get($query); } elseif ($field === 'email') { - $user = $this->withKeyField('email')->get($query); + $email = mb_strtolower($query); + $user = $this->withKeyField('email')->get($email); } elseif ($field === 'username') { - $user = $this->get(static::filterUsername($query, $this->getFlexDirectory()->getStorage())); + $username = static::filterUsername($query, $this->getFlexDirectory()->getStorage()); + $user = $this->get($username); } else { $user = $this->__call('find', [$query, $field]); } diff --git a/system/src/Grav/Common/Flex/Types/Users/UserObject.php b/system/src/Grav/Common/Flex/Types/Users/UserObject.php index 9dec972..39f47e7 100644 --- a/system/src/Grav/Common/Flex/Types/Users/UserObject.php +++ b/system/src/Grav/Common/Flex/Types/Users/UserObject.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -31,6 +31,7 @@ use Grav\Common\Flex\Types\UserGroups\UserGroupIndex; use Grav\Common\User\Interfaces\UserInterface; use Grav\Common\User\Traits\UserTrait; use Grav\Common\Utils; +use Grav\Framework\Contracts\Relationships\ToOneRelationshipInterface; use Grav\Framework\File\Formatter\JsonFormatter; use Grav\Framework\File\Formatter\YamlFormatter; use Grav\Framework\Filesystem\Filesystem; @@ -38,7 +39,10 @@ use Grav\Framework\Flex\Flex; use Grav\Framework\Flex\FlexDirectory; use Grav\Framework\Flex\Storage\FileStorage; use Grav\Framework\Flex\Traits\FlexMediaTrait; +use Grav\Framework\Flex\Traits\FlexRelationshipsTrait; use Grav\Framework\Form\FormFlashFile; +use Grav\Framework\Media\MediaIdentifier; +use Grav\Framework\Media\UploadedMediaObject; use Psr\Http\Message\UploadedFileInterface; use RocketTheme\Toolbox\Event\Event; use RocketTheme\Toolbox\File\FileInterface; @@ -77,6 +81,7 @@ class UserObject extends FlexObject implements UserInterface, Countable } use UserTrait; use UserObjectLegacyTrait; + use FlexRelationshipsTrait; /** @var Closure|null */ static public $authorizeCallable; @@ -672,6 +677,81 @@ class UserObject extends FlexObject implements UserInterface, Countable return $folder; } + /** + * @param string $name + * @return array|object|null + * @internal + */ + public function initRelationship(string $name) + { + switch ($name) { + case 'media': + $list = []; + foreach ($this->getMedia()->all() as $filename => $object) { + $list[] = $this->buildMediaObject(null, $filename, $object); + } + + return $list; + case 'avatar': + return $this->buildMediaObject('avatar', basename($this->getAvatarUrl()), $this->getAvatarImage()); + } + + throw new \InvalidArgumentException(sprintf('%s: Relationship %s does not exist', $this->getFlexType(), $name)); + } + + /** + * @return bool Return true if relationships were updated. + */ + protected function updateRelationships(): bool + { + $modified = $this->getRelationships()->getModified(); + if ($modified) { + foreach ($modified as $relationship) { + $name = $relationship->getName(); + switch ($name) { + case 'avatar': + \assert($relationship instanceof ToOneRelationshipInterface); + $this->updateAvatarRelationship($relationship); + break; + default: + throw new \InvalidArgumentException(sprintf('%s: Relationship %s cannot be modified', $this->getFlexType(), $name), 400); + } + } + + $this->resetRelationships(); + + return true; + } + + return false; + } + + /** + * @param ToOneRelationshipInterface $relationship + */ + protected function updateAvatarRelationship(ToOneRelationshipInterface $relationship): void + { + $files = []; + $avatar = $this->getAvatarImage(); + if ($avatar) { + $files['avatar'][$avatar->filename] = null; + } + + $identifier = $relationship->getIdentifier(); + if ($identifier) { + \assert($identifier instanceof MediaIdentifier); + $object = $identifier->getObject(); + if ($object instanceof UploadedMediaObject) { + $uploadedFile = $object->getUploadedFile(); + if ($uploadedFile) { + $files['avatar'][$uploadedFile->getClientFilename()] = $uploadedFile; + } + } + } + + $this->update([], $files); + } + /** * @param string $name * @return Blueprint diff --git a/system/src/Grav/Common/Form/FormFlash.php b/system/src/Grav/Common/Form/FormFlash.php index 7acaf7f..f77a7e4 100644 --- a/system/src/Grav/Common/Form/FormFlash.php +++ b/system/src/Grav/Common/Form/FormFlash.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Form * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/AbstractCollection.php b/system/src/Grav/Common/GPM/AbstractCollection.php index 91fa69e..bff3c56 100644 --- a/system/src/Grav/Common/GPM/AbstractCollection.php +++ b/system/src/Grav/Common/GPM/AbstractCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Common/AbstractPackageCollection.php b/system/src/Grav/Common/GPM/Common/AbstractPackageCollection.php index 7b918e0..9559358 100644 --- a/system/src/Grav/Common/GPM/Common/AbstractPackageCollection.php +++ b/system/src/Grav/Common/GPM/Common/AbstractPackageCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Common/CachedCollection.php b/system/src/Grav/Common/GPM/Common/CachedCollection.php index c3b62e5..cd71ce2 100644 --- a/system/src/Grav/Common/GPM/Common/CachedCollection.php +++ b/system/src/Grav/Common/GPM/Common/CachedCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Common/Package.php b/system/src/Grav/Common/GPM/Common/Package.php index 5d96011..cf5a804 100644 --- a/system/src/Grav/Common/GPM/Common/Package.php +++ b/system/src/Grav/Common/GPM/Common/Package.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/GPM.php b/system/src/Grav/Common/GPM/GPM.php index 7031945..60c927a 100644 --- a/system/src/Grav/Common/GPM/GPM.php +++ b/system/src/Grav/Common/GPM/GPM.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -12,6 +12,7 @@ namespace Grav\Common\GPM; use Exception; use Grav\Common\Grav; use Grav\Common\Filesystem\Folder; +use Grav\Common\HTTP\Response; use Grav\Common\Inflector; use Grav\Common\Iterator; use Grav\Common\Utils; diff --git a/system/src/Grav/Common/GPM/Installer.php b/system/src/Grav/Common/GPM/Installer.php index 8a1a530..71f9bd8 100644 --- a/system/src/Grav/Common/GPM/Installer.php +++ b/system/src/Grav/Common/GPM/Installer.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Licenses.php b/system/src/Grav/Common/GPM/Licenses.php index e932bd4..b62fee5 100644 --- a/system/src/Grav/Common/GPM/Licenses.php +++ b/system/src/Grav/Common/GPM/Licenses.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php b/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php index bc7ceab..83ba3e9 100644 --- a/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php +++ b/system/src/Grav/Common/GPM/Local/AbstractPackageCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Local/Package.php b/system/src/Grav/Common/GPM/Local/Package.php index 08444a7..87a422d 100644 --- a/system/src/Grav/Common/GPM/Local/Package.php +++ b/system/src/Grav/Common/GPM/Local/Package.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Local/Packages.php b/system/src/Grav/Common/GPM/Local/Packages.php index b63b93b..4a1de0b 100644 --- a/system/src/Grav/Common/GPM/Local/Packages.php +++ b/system/src/Grav/Common/GPM/Local/Packages.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Local/Plugins.php b/system/src/Grav/Common/GPM/Local/Plugins.php index a1626f8..5d4eade 100644 --- a/system/src/Grav/Common/GPM/Local/Plugins.php +++ b/system/src/Grav/Common/GPM/Local/Plugins.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Local/Themes.php b/system/src/Grav/Common/GPM/Local/Themes.php index d153794..3780dbd 100644 --- a/system/src/Grav/Common/GPM/Local/Themes.php +++ b/system/src/Grav/Common/GPM/Local/Themes.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php b/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php index 02e98e7..31b1676 100644 --- a/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php +++ b/system/src/Grav/Common/GPM/Remote/AbstractPackageCollection.php @@ -3,15 +3,15 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ namespace Grav\Common\GPM\Remote; use Grav\Common\Grav; +use Grav\Common\HTTP\Response; use Grav\Common\GPM\Common\AbstractPackageCollection as BaseCollection; -use Grav\Common\GPM\Response; use \Doctrine\Common\Cache\FilesystemCache; use RuntimeException; diff --git a/system/src/Grav/Common/GPM/Remote/GravCore.php b/system/src/Grav/Common/GPM/Remote/GravCore.php index 2998975..efe1199 100644 --- a/system/src/Grav/Common/GPM/Remote/GravCore.php +++ b/system/src/Grav/Common/GPM/Remote/GravCore.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Remote/Package.php b/system/src/Grav/Common/GPM/Remote/Package.php index 5193255..6db3477 100644 --- a/system/src/Grav/Common/GPM/Remote/Package.php +++ b/system/src/Grav/Common/GPM/Remote/Package.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Remote/Packages.php b/system/src/Grav/Common/GPM/Remote/Packages.php index 0ac2ef9..82acc80 100644 --- a/system/src/Grav/Common/GPM/Remote/Packages.php +++ b/system/src/Grav/Common/GPM/Remote/Packages.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Remote/Plugins.php b/system/src/Grav/Common/GPM/Remote/Plugins.php index 8383cd7..6451c80 100644 --- a/system/src/Grav/Common/GPM/Remote/Plugins.php +++ b/system/src/Grav/Common/GPM/Remote/Plugins.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Remote/Themes.php b/system/src/Grav/Common/GPM/Remote/Themes.php index a8ee9fa..63663c5 100644 --- a/system/src/Grav/Common/GPM/Remote/Themes.php +++ b/system/src/Grav/Common/GPM/Remote/Themes.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/GPM/Upgrader.php b/system/src/Grav/Common/GPM/Upgrader.php index b3e6869..5f25594 100644 --- a/system/src/Grav/Common/GPM/Upgrader.php +++ b/system/src/Grav/Common/GPM/Upgrader.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\GPM * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Getters.php b/system/src/Grav/Common/Getters.php index ed03499..73e3997 100644 --- a/system/src/Grav/Common/Getters.php +++ b/system/src/Grav/Common/Getters.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Grav.php b/system/src/Grav/Common/Grav.php index b9b44a4..ccdcaa0 100644 --- a/system/src/Grav/Common/Grav.php +++ b/system/src/Grav/Common/Grav.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -48,6 +48,7 @@ use Grav\Common\Service\TaskServiceProvider; use Grav\Common\Twig\Twig; use Grav\Framework\DI\Container; use Grav\Framework\Psr7\Response; +use Grav\Framework\RequestHandler\Middlewares\MultipartRequestSupport; use Grav\Framework\RequestHandler\RequestHandler; use Grav\Framework\Route\Route; use Grav\Framework\Session\Messages; @@ -117,6 +118,7 @@ class Grav extends Container * @var array All middleware processors that are processed in $this->process() */ protected $middleware = [ + 'multipartRequestSupport', 'initializeProcessor', 'pluginsProcessor', 'themesProcessor', @@ -259,6 +261,9 @@ class Grav extends Container $container = new Container( [ + 'multipartRequestSupport' => function () { + return new MultipartRequestSupport(); + }, 'initializeProcessor' => function () { return new InitializeProcessor($this); }, @@ -341,6 +346,23 @@ class Grav extends Container } } + /** + * Clean any output buffers. Useful when exiting from the application. + * + * Please use $grav->close() and $grav->redirect() instead of calling this one! + * + * @return void + */ + public function cleanOutputBuffers(): void + { + // Make sure nothing extra gets written to the response. + while (ob_get_level()) { + ob_end_clean(); + } + // Work around PHP bug #8218 (8.0.17 & 8.1.4). + header_remove('Content-Encoding'); + } + /** * Terminates Grav request with a response. * @@ -351,10 +373,7 @@ class Grav extends Container */ public function close(ResponseInterface $response): void { - // Make sure nothing extra gets written to the response. - while (ob_get_level()) { - ob_end_clean(); - } + $this->cleanOutputBuffers(); // Close the session. if (isset($this['session'])) { @@ -400,7 +419,7 @@ class Grav extends Container /** * @param ResponseInterface $response * @return never-return - * @deprecated 1.7 Do not use + * @deprecated 1.7 Use $grav->close() instead. */ public function exit(ResponseInterface $response): void { diff --git a/system/src/Grav/Common/GravTrait.php b/system/src/Grav/Common/GravTrait.php index 5416286..9eedd9c 100644 --- a/system/src/Grav/Common/GravTrait.php +++ b/system/src/Grav/Common/GravTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/HTTP/Client.php b/system/src/Grav/Common/HTTP/Client.php index c85d6b2..a90dd36 100644 --- a/system/src/Grav/Common/HTTP/Client.php +++ b/system/src/Grav/Common/HTTP/Client.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\HTTP * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/HTTP/Response.php b/system/src/Grav/Common/HTTP/Response.php index 4a5bc8b..77ca36f 100644 --- a/system/src/Grav/Common/HTTP/Response.php +++ b/system/src/Grav/Common/HTTP/Response.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\HTTP * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Helpers/Base32.php b/system/src/Grav/Common/Helpers/Base32.php index 0d1c21a..246458f 100644 --- a/system/src/Grav/Common/Helpers/Base32.php +++ b/system/src/Grav/Common/Helpers/Base32.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Helpers * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Helpers/Excerpts.php b/system/src/Grav/Common/Helpers/Excerpts.php index a62c7e5..ee2a2ec 100644 --- a/system/src/Grav/Common/Helpers/Excerpts.php +++ b/system/src/Grav/Common/Helpers/Excerpts.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Helpers * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Helpers/Exif.php b/system/src/Grav/Common/Helpers/Exif.php index a7dc973..1859d6f 100644 --- a/system/src/Grav/Common/Helpers/Exif.php +++ b/system/src/Grav/Common/Helpers/Exif.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Helpers * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Helpers/LogViewer.php b/system/src/Grav/Common/Helpers/LogViewer.php index cf5ffe9..060e561 100644 --- a/system/src/Grav/Common/Helpers/LogViewer.php +++ b/system/src/Grav/Common/Helpers/LogViewer.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Helpers * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Helpers/Truncator.php b/system/src/Grav/Common/Helpers/Truncator.php index 03c3eea..318079c 100644 --- a/system/src/Grav/Common/Helpers/Truncator.php +++ b/system/src/Grav/Common/Helpers/Truncator.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Helpers * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Helpers/YamlLinter.php b/system/src/Grav/Common/Helpers/YamlLinter.php index b31180f..4460fd4 100644 --- a/system/src/Grav/Common/Helpers/YamlLinter.php +++ b/system/src/Grav/Common/Helpers/YamlLinter.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Helpers * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Inflector.php b/system/src/Grav/Common/Inflector.php index 216b733..03e22ac 100644 --- a/system/src/Grav/Common/Inflector.php +++ b/system/src/Grav/Common/Inflector.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Iterator.php b/system/src/Grav/Common/Iterator.php index 5db7bd0..20e719e 100644 --- a/system/src/Grav/Common/Iterator.php +++ b/system/src/Grav/Common/Iterator.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Language/Language.php b/system/src/Grav/Common/Language/Language.php index fe006ed..bfeca42 100644 --- a/system/src/Grav/Common/Language/Language.php +++ b/system/src/Grav/Common/Language/Language.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Language * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Language/LanguageCodes.php b/system/src/Grav/Common/Language/LanguageCodes.php index 3fa4948..24ecdd6 100644 --- a/system/src/Grav/Common/Language/LanguageCodes.php +++ b/system/src/Grav/Common/Language/LanguageCodes.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Language * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -153,6 +153,8 @@ class LanguageCodes 'vi' => [ 'name' => 'Vietnamese', 'nativeName' => 'Tiếng Việt' ], 'wo' => [ 'name' => 'Wolof', 'nativeName' => 'Wolof' ], 'xh' => [ 'name' => 'Xhosa', 'nativeName' => 'isiXhosa' ], + 'yi' => [ 'name' => 'Yiddish', 'nativeName' => 'ייִדיש', 'orientation' => 'rtl' ], + 'ydd' => [ 'name' => 'Yiddish', 'nativeName' => 'ייִדיש', 'orientation' => 'rtl' ], 'zh' => [ 'name' => 'Chinese (Simplified)', 'nativeName' => '中文 (简体)' ], 'zh-CN' => [ 'name' => 'Chinese (Simplified)', 'nativeName' => '中文 (简体)' ], 'zh-TW' => [ 'name' => 'Chinese (Traditional)', 'nativeName' => '正體中文 (繁體)' ], diff --git a/system/src/Grav/Common/Markdown/Parsedown.php b/system/src/Grav/Common/Markdown/Parsedown.php index f0d8a48..634a174 100644 --- a/system/src/Grav/Common/Markdown/Parsedown.php +++ b/system/src/Grav/Common/Markdown/Parsedown.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Markdown * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Markdown/ParsedownExtra.php b/system/src/Grav/Common/Markdown/ParsedownExtra.php index ef450fe..0081372 100644 --- a/system/src/Grav/Common/Markdown/ParsedownExtra.php +++ b/system/src/Grav/Common/Markdown/ParsedownExtra.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Markdown * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php index a593dd7..b97b129 100644 --- a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php +++ b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Markdown * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Interfaces/AudioMediaInterface.php b/system/src/Grav/Common/Media/Interfaces/AudioMediaInterface.php index 6465d6b..a57762f 100644 --- a/system/src/Grav/Common/Media/Interfaces/AudioMediaInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/AudioMediaInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Interfaces/ImageManipulateInterface.php b/system/src/Grav/Common/Media/Interfaces/ImageManipulateInterface.php index eb38ea8..8ad545f 100644 --- a/system/src/Grav/Common/Media/Interfaces/ImageManipulateInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/ImageManipulateInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Interfaces/ImageMediaInterface.php b/system/src/Grav/Common/Media/Interfaces/ImageMediaInterface.php index cbf8f1d..a8b7159 100644 --- a/system/src/Grav/Common/Media/Interfaces/ImageMediaInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/ImageMediaInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Interfaces/MediaCollectionInterface.php b/system/src/Grav/Common/Media/Interfaces/MediaCollectionInterface.php index 62c531c..92ef972 100644 --- a/system/src/Grav/Common/Media/Interfaces/MediaCollectionInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/MediaCollectionInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Interfaces/MediaFileInterface.php b/system/src/Grav/Common/Media/Interfaces/MediaFileInterface.php index c20e4de..39fbb9f 100644 --- a/system/src/Grav/Common/Media/Interfaces/MediaFileInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/MediaFileInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Interfaces/MediaInterface.php b/system/src/Grav/Common/Media/Interfaces/MediaInterface.php index 273556a..ffa0008 100644 --- a/system/src/Grav/Common/Media/Interfaces/MediaInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/MediaInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Interfaces/MediaLinkInterface.php b/system/src/Grav/Common/Media/Interfaces/MediaLinkInterface.php index 41747be..25a6f16 100644 --- a/system/src/Grav/Common/Media/Interfaces/MediaLinkInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/MediaLinkInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Interfaces/MediaObjectInterface.php b/system/src/Grav/Common/Media/Interfaces/MediaObjectInterface.php index 9334759..aefe046 100644 --- a/system/src/Grav/Common/Media/Interfaces/MediaObjectInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/MediaObjectInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -158,14 +158,6 @@ interface MediaObjectInterface extends \Grav\Framework\Media\Interfaces\MediaObj */ public function thumbnail($type = 'auto'); - /** - * Return URL to file. - * - * @param bool $reset - * @return string - */ - public function url($reset = true); - /** * Turn the current Medium into a Link * @@ -221,18 +213,6 @@ interface MediaObjectInterface extends \Grav\Framework\Media\Interfaces\MediaObj #[\ReturnTypeWillChange] public function __call($method, $args); - /** - * Get value by using dot notation for nested arrays/objects. - * - * @example $value = $this->get('this.is.my.nested.variable'); - * - * @param string $name Dot separated path to the requested value. - * @param mixed $default Default value (or null). - * @param string|null $separator Separator, defaults to '.' - * @return mixed Value. - */ - public function get($name, $default = null, $separator = null); - /** * Set value by using dot notation for nested arrays/objects. * diff --git a/system/src/Grav/Common/Media/Interfaces/MediaPlayerInterface.php b/system/src/Grav/Common/Media/Interfaces/MediaPlayerInterface.php index fbe6f65..a41811b 100644 --- a/system/src/Grav/Common/Media/Interfaces/MediaPlayerInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/MediaPlayerInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Interfaces/MediaUploadInterface.php b/system/src/Grav/Common/Media/Interfaces/MediaUploadInterface.php index 7362599..26efc33 100644 --- a/system/src/Grav/Common/Media/Interfaces/MediaUploadInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/MediaUploadInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Interfaces/VideoMediaInterface.php b/system/src/Grav/Common/Media/Interfaces/VideoMediaInterface.php index 6d42fef..0673eb4 100644 --- a/system/src/Grav/Common/Media/Interfaces/VideoMediaInterface.php +++ b/system/src/Grav/Common/Media/Interfaces/VideoMediaInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/AudioMediaTrait.php b/system/src/Grav/Common/Media/Traits/AudioMediaTrait.php index a083472..7e95656 100644 --- a/system/src/Grav/Common/Media/Traits/AudioMediaTrait.php +++ b/system/src/Grav/Common/Media/Traits/AudioMediaTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/ImageLoadingTrait.php b/system/src/Grav/Common/Media/Traits/ImageLoadingTrait.php index 75e23ca..c79efaf 100644 --- a/system/src/Grav/Common/Media/Traits/ImageLoadingTrait.php +++ b/system/src/Grav/Common/Media/Traits/ImageLoadingTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/ImageMediaTrait.php b/system/src/Grav/Common/Media/Traits/ImageMediaTrait.php index c1c46dc..9a0ad82 100644 --- a/system/src/Grav/Common/Media/Traits/ImageMediaTrait.php +++ b/system/src/Grav/Common/Media/Traits/ImageMediaTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/MediaFileTrait.php b/system/src/Grav/Common/Media/Traits/MediaFileTrait.php index 63906fc..2691e2a 100644 --- a/system/src/Grav/Common/Media/Traits/MediaFileTrait.php +++ b/system/src/Grav/Common/Media/Traits/MediaFileTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/MediaObjectTrait.php b/system/src/Grav/Common/Media/Traits/MediaObjectTrait.php index 85ed6d2..fd0994e 100644 --- a/system/src/Grav/Common/Media/Traits/MediaObjectTrait.php +++ b/system/src/Grav/Common/Media/Traits/MediaObjectTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/MediaPlayerTrait.php b/system/src/Grav/Common/Media/Traits/MediaPlayerTrait.php index 7e59d64..0fcb733 100644 --- a/system/src/Grav/Common/Media/Traits/MediaPlayerTrait.php +++ b/system/src/Grav/Common/Media/Traits/MediaPlayerTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/MediaTrait.php b/system/src/Grav/Common/Media/Traits/MediaTrait.php index 14bfa90..1ab4f1e 100644 --- a/system/src/Grav/Common/Media/Traits/MediaTrait.php +++ b/system/src/Grav/Common/Media/Traits/MediaTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/MediaUploadTrait.php b/system/src/Grav/Common/Media/Traits/MediaUploadTrait.php index 88591f6..46eadea 100644 --- a/system/src/Grav/Common/Media/Traits/MediaUploadTrait.php +++ b/system/src/Grav/Common/Media/Traits/MediaUploadTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/StaticResizeTrait.php b/system/src/Grav/Common/Media/Traits/StaticResizeTrait.php index d8a4b08..1065f9d 100644 --- a/system/src/Grav/Common/Media/Traits/StaticResizeTrait.php +++ b/system/src/Grav/Common/Media/Traits/StaticResizeTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/ThumbnailMediaTrait.php b/system/src/Grav/Common/Media/Traits/ThumbnailMediaTrait.php index 100b532..a86a4b0 100644 --- a/system/src/Grav/Common/Media/Traits/ThumbnailMediaTrait.php +++ b/system/src/Grav/Common/Media/Traits/ThumbnailMediaTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Media/Traits/VideoMediaTrait.php b/system/src/Grav/Common/Media/Traits/VideoMediaTrait.php index 07f0c3f..ddb3cf0 100644 --- a/system/src/Grav/Common/Media/Traits/VideoMediaTrait.php +++ b/system/src/Grav/Common/Media/Traits/VideoMediaTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Collection.php b/system/src/Grav/Common/Page/Collection.php index 987b8d9..b025d5f 100644 --- a/system/src/Grav/Common/Page/Collection.php +++ b/system/src/Grav/Common/Page/Collection.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Header.php b/system/src/Grav/Common/Page/Header.php index c18b58d..50b284b 100644 --- a/system/src/Grav/Common/Page/Header.php +++ b/system/src/Grav/Common/Page/Header.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Interfaces/PageCollectionInterface.php b/system/src/Grav/Common/Page/Interfaces/PageCollectionInterface.php index 493ab43..6518401 100644 --- a/system/src/Grav/Common/Page/Interfaces/PageCollectionInterface.php +++ b/system/src/Grav/Common/Page/Interfaces/PageCollectionInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Interfaces/PageContentInterface.php b/system/src/Grav/Common/Page/Interfaces/PageContentInterface.php index a80972b..a37fcef 100644 --- a/system/src/Grav/Common/Page/Interfaces/PageContentInterface.php +++ b/system/src/Grav/Common/Page/Interfaces/PageContentInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Interfaces/PageInterface.php b/system/src/Grav/Common/Page/Interfaces/PageInterface.php index 56fc891..c7ea047 100644 --- a/system/src/Grav/Common/Page/Interfaces/PageInterface.php +++ b/system/src/Grav/Common/Page/Interfaces/PageInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Interfaces/PagesSourceInterface.php b/system/src/Grav/Common/Page/Interfaces/PagesSourceInterface.php index ff4ebda..adaee6b 100644 --- a/system/src/Grav/Common/Page/Interfaces/PagesSourceInterface.php +++ b/system/src/Grav/Common/Page/Interfaces/PagesSourceInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Markdown/Excerpts.php b/system/src/Grav/Common/Page/Markdown/Excerpts.php index 17f9cbf..ab3a905 100644 --- a/system/src/Grav/Common/Page/Markdown/Excerpts.php +++ b/system/src/Grav/Common/Page/Markdown/Excerpts.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Media.php b/system/src/Grav/Common/Page/Media.php index 6c0a6c3..e79cd94 100644 --- a/system/src/Grav/Common/Page/Media.php +++ b/system/src/Grav/Common/Page/Media.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -152,7 +152,7 @@ class Media extends AbstractMedia foreach ($iterator as $file => $info) { // Ignore folders and Markdown files. $filename = $info->getFilename(); - if (!$info->isFile() || $info->getExtension() === 'md' || $filename === 'frontmatter.yaml' || strpos($filename, '.') === 0) { + if (!$info->isFile() || $info->getExtension() === 'md' || $filename === 'frontmatter.yaml' || $filename === 'media.json' || strpos($filename, '.') === 0) { continue; } diff --git a/system/src/Grav/Common/Page/Medium/AbstractMedia.php b/system/src/Grav/Common/Page/Medium/AbstractMedia.php index 9b3650b..4ba9ff8 100644 --- a/system/src/Grav/Common/Page/Medium/AbstractMedia.php +++ b/system/src/Grav/Common/Page/Medium/AbstractMedia.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/AudioMedium.php b/system/src/Grav/Common/Page/Medium/AudioMedium.php index cc53f81..f37c651 100644 --- a/system/src/Grav/Common/Page/Medium/AudioMedium.php +++ b/system/src/Grav/Common/Page/Medium/AudioMedium.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/GlobalMedia.php b/system/src/Grav/Common/Page/Medium/GlobalMedia.php index 20f63ad..ee694e7 100644 --- a/system/src/Grav/Common/Page/Medium/GlobalMedia.php +++ b/system/src/Grav/Common/Page/Medium/GlobalMedia.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/ImageFile.php b/system/src/Grav/Common/Page/Medium/ImageFile.php index 1aae7ee..66b601b 100644 --- a/system/src/Grav/Common/Page/Medium/ImageFile.php +++ b/system/src/Grav/Common/Page/Medium/ImageFile.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/ImageMedium.php b/system/src/Grav/Common/Page/Medium/ImageMedium.php index 42d8f0e..d215465 100644 --- a/system/src/Grav/Common/Page/Medium/ImageMedium.php +++ b/system/src/Grav/Common/Page/Medium/ImageMedium.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -361,8 +361,8 @@ class ImageMedium extends Medium implements ImageMediaInterface, ImageManipulate // Scaling operations $scale = ($scale ?? $config->get('system.images.watermark.scale', 100)) / 100; - $wwidth = $this->get('width') * $scale; - $wheight = $this->get('height') * $scale; + $wwidth = (int)$this->get('width') * $scale; + $wheight = (int)$this->get('height') * $scale; $watermark->resize($wwidth, $wheight); // Position operations @@ -377,11 +377,11 @@ class ImageMedium extends Medium implements ImageMediaInterface, ImageManipulate break; case 'bottom': - $positionY = $this->get('height')-$wheight; + $positionY = (int)$this->get('height')-$wheight; break; case 'center': - $positionY = ($this->get('height')/2) - ($wheight/2); + $positionY = ((int)$this->get('height')/2) - ($wheight/2); break; } @@ -392,11 +392,11 @@ class ImageMedium extends Medium implements ImageMediaInterface, ImageManipulate break; case 'right': - $positionX = $this->get('width')-$wwidth; + $positionX = (int)$this->get('width')-$wwidth; break; case 'center': - $positionX = ($this->get('width')/2) - ($wwidth/2); + $positionX = ((int)$this->get('width')/2) - ($wwidth/2); break; } diff --git a/system/src/Grav/Common/Page/Medium/Link.php b/system/src/Grav/Common/Page/Medium/Link.php index c76d8c1..01d3c13 100644 --- a/system/src/Grav/Common/Page/Medium/Link.php +++ b/system/src/Grav/Common/Page/Medium/Link.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/Medium.php b/system/src/Grav/Common/Page/Medium/Medium.php index 0891c0c..4f089d1 100644 --- a/system/src/Grav/Common/Page/Medium/Medium.php +++ b/system/src/Grav/Common/Page/Medium/Medium.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/MediumFactory.php b/system/src/Grav/Common/Page/Medium/MediumFactory.php index 913f198..9001515 100644 --- a/system/src/Grav/Common/Page/Medium/MediumFactory.php +++ b/system/src/Grav/Common/Page/Medium/MediumFactory.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php b/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php index 4ab2fb5..b817328 100644 --- a/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php +++ b/system/src/Grav/Common/Page/Medium/ParsedownHtmlTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/RenderableInterface.php b/system/src/Grav/Common/Page/Medium/RenderableInterface.php index 1ee6a96..4c2046f 100644 --- a/system/src/Grav/Common/Page/Medium/RenderableInterface.php +++ b/system/src/Grav/Common/Page/Medium/RenderableInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/StaticImageMedium.php b/system/src/Grav/Common/Page/Medium/StaticImageMedium.php index 9780100..a01cd18 100644 --- a/system/src/Grav/Common/Page/Medium/StaticImageMedium.php +++ b/system/src/Grav/Common/Page/Medium/StaticImageMedium.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/StaticResizeTrait.php b/system/src/Grav/Common/Page/Medium/StaticResizeTrait.php index caaa7e2..3c14495 100644 --- a/system/src/Grav/Common/Page/Medium/StaticResizeTrait.php +++ b/system/src/Grav/Common/Page/Medium/StaticResizeTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/ThumbnailImageMedium.php b/system/src/Grav/Common/Page/Medium/ThumbnailImageMedium.php index 1e4d862..8b54cfb 100644 --- a/system/src/Grav/Common/Page/Medium/ThumbnailImageMedium.php +++ b/system/src/Grav/Common/Page/Medium/ThumbnailImageMedium.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/VectorImageMedium.php b/system/src/Grav/Common/Page/Medium/VectorImageMedium.php index c44f35a..18a5d27 100644 --- a/system/src/Grav/Common/Page/Medium/VectorImageMedium.php +++ b/system/src/Grav/Common/Page/Medium/VectorImageMedium.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Medium/VideoMedium.php b/system/src/Grav/Common/Page/Medium/VideoMedium.php index 0e629dc..8642f7f 100644 --- a/system/src/Grav/Common/Page/Medium/VideoMedium.php +++ b/system/src/Grav/Common/Page/Medium/VideoMedium.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index 25f8ff6..14e7a12 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -622,7 +622,12 @@ class Page implements PageInterface $headers['Vary'] = 'Accept-Encoding'; } - return $headers; + + // Added new Headers event + $headers_obj = (object) $headers; + Grav::instance()->fireEvent('onPageHeaders', new Event(['headers' => $headers_obj])); + + return (array)$headers_obj; } /** diff --git a/system/src/Grav/Common/Page/Pages.php b/system/src/Grav/Common/Page/Pages.php index ec48b51..9282a8f 100644 --- a/system/src/Grav/Common/Page/Pages.php +++ b/system/src/Grav/Common/Page/Pages.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -88,6 +88,8 @@ class Pages /** @var string */ protected $check_method; /** @var string */ + protected $simple_pages_hash; + /** @var string */ protected $pages_cache_id; /** @var bool */ protected $initialized = false; @@ -100,6 +102,7 @@ class Pages /** @var string|null */ protected static $home_route; + /** * Constructor * @@ -1712,10 +1715,7 @@ class Pages /** @var Language $language */ $language = $this->grav['language']; - $pages_dir = $locator->findResource('page://'); - if (!is_string($pages_dir)) { - throw new RuntimeException('Internal Error'); - } + $pages_dirs = $this->getPagesPaths(); // Set active language $this->active_lang = $language->getActive(); @@ -1731,16 +1731,17 @@ class Pages $hash = 0; break; case 'folder': - $hash = Folder::lastModifiedFolder($pages_dir); + $hash = Folder::lastModifiedFolder($pages_dirs); break; case 'hash': - $hash = Folder::hashAllFiles($pages_dir); + $hash = Folder::hashAllFiles($pages_dirs); break; default: - $hash = Folder::lastModifiedFile($pages_dir); + $hash = Folder::lastModifiedFile($pages_dirs); } - $this->pages_cache_id = md5($pages_dir . $hash . $language->getActive() . $config->checksum()); + $this->simple_pages_hash = json_encode($pages_dirs) . $hash . $config->checksum(); + $this->pages_cache_id = md5($this->simple_pages_hash . $language->getActive()); /** @var Cache $cache */ $cache = $this->grav['cache']; @@ -1760,18 +1761,39 @@ class Pages $this->grav['debugger']->addMessage('Page cache disabled, rebuilding pages..'); } - $this->resetPages($pages_dir); + $this->resetPages($pages_dirs); + } + + protected function getPagesPaths(): array + { + $grav = Grav::instance(); + $locator = $grav['locator']; + $paths = []; + + $dirs = (array) $grav['config']->get('system.pages.dirs', ['page://']); + foreach ($dirs as $dir) { + $path = $locator->findResource($dir); + if (file_exists($path)) { + $paths[] = $path; + } + } + + return $paths; } /** * Accessible method to manually reset the pages cache * - * @param string $pages_dir + * @param array $pages_dirs */ - public function resetPages($pages_dir): void + public function resetPages(array $pages_dirs): void { $this->sort = []; - $this->recurse($pages_dir); + + foreach ($pages_dirs as $dir) { + $this->recurse($dir); + } + $this->buildRoutes(); // cache if needed @@ -1795,7 +1817,7 @@ class Pages * @throws RuntimeException * @internal */ - protected function recurse($directory, PageInterface $parent = null) + protected function recurse(string $directory, PageInterface $parent = null) { $directory = rtrim($directory, DS); $page = new Page; @@ -2177,7 +2199,7 @@ class Pages * @param array $list * @return array */ - protected function arrayShuffle($list) + protected function arrayShuffle(array $list): array { $keys = array_keys($list); shuffle($keys); @@ -2193,7 +2215,7 @@ class Pages /** * @return string */ - protected function getVersion() + protected function getVersion(): string { return $this->directory ? 'flex' : 'regular'; } @@ -2204,10 +2226,20 @@ class Pages * this is particularly useful to know if pages have changed and you want * to sync another cache with pages cache - works best in `onPagesInitialized()` * - * @return string + * @return null|string */ - public function getPagesCacheId() + public function getPagesCacheId(): ?string { return $this->pages_cache_id; } + + /** + * Get the simple pages hash that is not md5 encoded, and isn't specific to language + * + * @return null|string + */ + public function getSimplePagesHash(): ?string + { + return $this->simple_pages_hash; + } } diff --git a/system/src/Grav/Common/Page/Types.php b/system/src/Grav/Common/Page/Types.php index 420c588..ffe49a2 100644 --- a/system/src/Grav/Common/Page/Types.php +++ b/system/src/Grav/Common/Page/Types.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Page * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Plugin.php b/system/src/Grav/Common/Plugin.php index 30e5344..73bcfb6 100644 --- a/system/src/Grav/Common/Plugin.php +++ b/system/src/Grav/Common/Plugin.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Plugins.php b/system/src/Grav/Common/Plugins.php index 42b1593..935a208 100644 --- a/system/src/Grav/Common/Plugins.php +++ b/system/src/Grav/Common/Plugins.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/AssetsProcessor.php b/system/src/Grav/Common/Processors/AssetsProcessor.php index e460fb0..9e626b3 100644 --- a/system/src/Grav/Common/Processors/AssetsProcessor.php +++ b/system/src/Grav/Common/Processors/AssetsProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/BackupsProcessor.php b/system/src/Grav/Common/Processors/BackupsProcessor.php index 83e8a0c..1d5595a 100644 --- a/system/src/Grav/Common/Processors/BackupsProcessor.php +++ b/system/src/Grav/Common/Processors/BackupsProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/DebuggerAssetsProcessor.php b/system/src/Grav/Common/Processors/DebuggerAssetsProcessor.php index a3d5a51..0f55e29 100644 --- a/system/src/Grav/Common/Processors/DebuggerAssetsProcessor.php +++ b/system/src/Grav/Common/Processors/DebuggerAssetsProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/Events/RequestHandlerEvent.php b/system/src/Grav/Common/Processors/Events/RequestHandlerEvent.php index 30f6195..3bf89fe 100644 --- a/system/src/Grav/Common/Processors/Events/RequestHandlerEvent.php +++ b/system/src/Grav/Common/Processors/Events/RequestHandlerEvent.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/InitializeProcessor.php b/system/src/Grav/Common/Processors/InitializeProcessor.php index 04e06ed..234b08c 100644 --- a/system/src/Grav/Common/Processors/InitializeProcessor.php +++ b/system/src/Grav/Common/Processors/InitializeProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -251,7 +251,8 @@ class InitializeProcessor extends ProcessorBase $log->popHandler(); $facility = $config->get('system.log.syslog.facility', 'local6'); - $logHandler = new SyslogHandler('grav', $facility); + $tag = $config->get('system.log.syslog.tag', 'grav'); + $logHandler = new SyslogHandler($tag, $facility); $formatter = new LineFormatter("%channel%.%level_name%: %message% %extra%"); $logHandler->setFormatter($formatter); diff --git a/system/src/Grav/Common/Processors/PagesProcessor.php b/system/src/Grav/Common/Processors/PagesProcessor.php index 3338e0c..14a09bb 100644 --- a/system/src/Grav/Common/Processors/PagesProcessor.php +++ b/system/src/Grav/Common/Processors/PagesProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/PluginsProcessor.php b/system/src/Grav/Common/Processors/PluginsProcessor.php index ae87901..41c9f65 100644 --- a/system/src/Grav/Common/Processors/PluginsProcessor.php +++ b/system/src/Grav/Common/Processors/PluginsProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/ProcessorBase.php b/system/src/Grav/Common/Processors/ProcessorBase.php index 9353391..eaa9805 100644 --- a/system/src/Grav/Common/Processors/ProcessorBase.php +++ b/system/src/Grav/Common/Processors/ProcessorBase.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/ProcessorInterface.php b/system/src/Grav/Common/Processors/ProcessorInterface.php index 0aed195..c38de03 100644 --- a/system/src/Grav/Common/Processors/ProcessorInterface.php +++ b/system/src/Grav/Common/Processors/ProcessorInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/RenderProcessor.php b/system/src/Grav/Common/Processors/RenderProcessor.php index e12cc45..dab4f01 100644 --- a/system/src/Grav/Common/Processors/RenderProcessor.php +++ b/system/src/Grav/Common/Processors/RenderProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/RequestProcessor.php b/system/src/Grav/Common/Processors/RequestProcessor.php index bad410c..48a6200 100644 --- a/system/src/Grav/Common/Processors/RequestProcessor.php +++ b/system/src/Grav/Common/Processors/RequestProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/SchedulerProcessor.php b/system/src/Grav/Common/Processors/SchedulerProcessor.php index 722bfcc..743e738 100644 --- a/system/src/Grav/Common/Processors/SchedulerProcessor.php +++ b/system/src/Grav/Common/Processors/SchedulerProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/TasksProcessor.php b/system/src/Grav/Common/Processors/TasksProcessor.php index 29f3458..b17bfd6 100644 --- a/system/src/Grav/Common/Processors/TasksProcessor.php +++ b/system/src/Grav/Common/Processors/TasksProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/ThemesProcessor.php b/system/src/Grav/Common/Processors/ThemesProcessor.php index 60d089e..8ce6813 100644 --- a/system/src/Grav/Common/Processors/ThemesProcessor.php +++ b/system/src/Grav/Common/Processors/ThemesProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Processors/TwigProcessor.php b/system/src/Grav/Common/Processors/TwigProcessor.php index ffc1032..c71dabc 100644 --- a/system/src/Grav/Common/Processors/TwigProcessor.php +++ b/system/src/Grav/Common/Processors/TwigProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Processors * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Scheduler/Cron.php b/system/src/Grav/Common/Scheduler/Cron.php index 0103839..86ef193 100644 --- a/system/src/Grav/Common/Scheduler/Cron.php +++ b/system/src/Grav/Common/Scheduler/Cron.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Scheduler * @author Originally based on jqCron by Arnaud Buathier modified for Grav integration - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Scheduler/IntervalTrait.php b/system/src/Grav/Common/Scheduler/IntervalTrait.php index 5f7406b..8ce20a1 100644 --- a/system/src/Grav/Common/Scheduler/IntervalTrait.php +++ b/system/src/Grav/Common/Scheduler/IntervalTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Scheduler * @author Originally based on peppeocchi/php-cron-scheduler modified for Grav integration - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Scheduler/Job.php b/system/src/Grav/Common/Scheduler/Job.php index 4156119..4de0028 100644 --- a/system/src/Grav/Common/Scheduler/Job.php +++ b/system/src/Grav/Common/Scheduler/Job.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Scheduler * @author Originally based on peppeocchi/php-cron-scheduler modified for Grav integration - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Scheduler/Scheduler.php b/system/src/Grav/Common/Scheduler/Scheduler.php index 19eb9ea..1a1750b 100644 --- a/system/src/Grav/Common/Scheduler/Scheduler.php +++ b/system/src/Grav/Common/Scheduler/Scheduler.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Scheduler * @author Originally based on peppeocchi/php-cron-scheduler modified for Grav integration - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Security.php b/system/src/Grav/Common/Security.php index 779e619..519095c 100644 --- a/system/src/Grav/Common/Security.php +++ b/system/src/Grav/Common/Security.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -97,7 +97,7 @@ class Security */ public static function detectXssFromPages(Pages $pages, $route = true, callable $status = null) { - $routes = $pages->routes(); + $routes = $pages->getList(null, 0, true); // Remove duplicate for homepage unset($routes['/']); @@ -110,26 +110,23 @@ class Security 'steps' => count($routes), ]); - foreach ($routes as $path) { + foreach (array_keys($routes) as $route) { $status && $status([ 'type' => 'progress', ]); try { - $page = $pages->get($path); + $page = $pages->find($route); + if ($page->exists()) { + // call the content to load/cache it + $header = (array) $page->header(); + $content = $page->value('content'); - // call the content to load/cache it - $header = (array) $page->header(); - $content = $page->value('content'); + $data = ['header' => $header, 'content' => $content]; + $results = static::detectXssFromArray($data); - $data = ['header' => $header, 'content' => $content]; - $results = static::detectXssFromArray($data); - - if (!empty($results)) { - if ($route) { - $list[$page->route()] = $results; - } else { - $list[$page->filePathClean()] = $results; + if (!empty($results)) { + $list[$page->rawRoute()] = $results; } } } catch (Exception $e) { @@ -222,7 +219,8 @@ class Security $string = html_entity_decode($string, ENT_NOQUOTES | ENT_HTML5, 'UTF-8'); // Strip whitespace characters - $string = preg_replace('!\s!u', '', $string); + $string = preg_replace('!\s!u', ' ', $string); + $stripped = preg_replace('!\s!u', '', $string); // Set the patterns we'll test against $patterns = [ @@ -245,7 +243,7 @@ class Security // Iterate over rules and return label if fail foreach ($patterns as $name => $regex) { if (!empty($enabled_rules[$name])) { - if (preg_match($regex, $string) || preg_match($regex, $orig)) { + if (preg_match($regex, $string) || preg_match($regex, $stripped) || preg_match($regex, $orig)) { return $name; } } diff --git a/system/src/Grav/Common/Service/AccountsServiceProvider.php b/system/src/Grav/Common/Service/AccountsServiceProvider.php index 60f26e5..4706122 100644 --- a/system/src/Grav/Common/Service/AccountsServiceProvider.php +++ b/system/src/Grav/Common/Service/AccountsServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/AssetsServiceProvider.php b/system/src/Grav/Common/Service/AssetsServiceProvider.php index 54a44a1..9a04667 100644 --- a/system/src/Grav/Common/Service/AssetsServiceProvider.php +++ b/system/src/Grav/Common/Service/AssetsServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/BackupsServiceProvider.php b/system/src/Grav/Common/Service/BackupsServiceProvider.php index 58f5021..0617c47 100644 --- a/system/src/Grav/Common/Service/BackupsServiceProvider.php +++ b/system/src/Grav/Common/Service/BackupsServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/ConfigServiceProvider.php b/system/src/Grav/Common/Service/ConfigServiceProvider.php index e65e228..a050c1e 100644 --- a/system/src/Grav/Common/Service/ConfigServiceProvider.php +++ b/system/src/Grav/Common/Service/ConfigServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/ErrorServiceProvider.php b/system/src/Grav/Common/Service/ErrorServiceProvider.php index 02d38c9..c58b2fd 100644 --- a/system/src/Grav/Common/Service/ErrorServiceProvider.php +++ b/system/src/Grav/Common/Service/ErrorServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/FilesystemServiceProvider.php b/system/src/Grav/Common/Service/FilesystemServiceProvider.php index 1dde5b3..19bac29 100644 --- a/system/src/Grav/Common/Service/FilesystemServiceProvider.php +++ b/system/src/Grav/Common/Service/FilesystemServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/FlexServiceProvider.php b/system/src/Grav/Common/Service/FlexServiceProvider.php index e7b283a..8cac426 100644 --- a/system/src/Grav/Common/Service/FlexServiceProvider.php +++ b/system/src/Grav/Common/Service/FlexServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -97,7 +97,9 @@ class FlexServiceProvider implements ServiceProviderInterface 'options' => [ 'file' => 'user', 'pattern' => '{FOLDER}/{KEY:2}/{KEY}/{FILE}{EXT}', - 'key' => 'storage_key' + 'key' => 'storage_key', + 'indexed' => true, + 'case_sensitive' => false ], ]; } @@ -107,7 +109,9 @@ class FlexServiceProvider implements ServiceProviderInterface 'class' => UserFileStorage::class, 'options' => [ 'pattern' => '{FOLDER}/{KEY}{EXT}', - 'key' => 'username' + 'key' => 'username', + 'indexed' => true, + 'case_sensitive' => false ], ]; } diff --git a/system/src/Grav/Common/Service/InflectorServiceProvider.php b/system/src/Grav/Common/Service/InflectorServiceProvider.php index f43a446..239d2b9 100644 --- a/system/src/Grav/Common/Service/InflectorServiceProvider.php +++ b/system/src/Grav/Common/Service/InflectorServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/LoggerServiceProvider.php b/system/src/Grav/Common/Service/LoggerServiceProvider.php index 43a67ca..6eb0a9d 100644 --- a/system/src/Grav/Common/Service/LoggerServiceProvider.php +++ b/system/src/Grav/Common/Service/LoggerServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/OutputServiceProvider.php b/system/src/Grav/Common/Service/OutputServiceProvider.php index 2dbd343..23f7a7a 100644 --- a/system/src/Grav/Common/Service/OutputServiceProvider.php +++ b/system/src/Grav/Common/Service/OutputServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/PagesServiceProvider.php b/system/src/Grav/Common/Service/PagesServiceProvider.php index fa6631e..52ef5ea 100644 --- a/system/src/Grav/Common/Service/PagesServiceProvider.php +++ b/system/src/Grav/Common/Service/PagesServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/RequestServiceProvider.php b/system/src/Grav/Common/Service/RequestServiceProvider.php index a44c735..ad6a861 100644 --- a/system/src/Grav/Common/Service/RequestServiceProvider.php +++ b/system/src/Grav/Common/Service/RequestServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/SchedulerServiceProvider.php b/system/src/Grav/Common/Service/SchedulerServiceProvider.php index 13918fb..5769286 100644 --- a/system/src/Grav/Common/Service/SchedulerServiceProvider.php +++ b/system/src/Grav/Common/Service/SchedulerServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/SessionServiceProvider.php b/system/src/Grav/Common/Service/SessionServiceProvider.php index 80e24b4..0fbe49b 100644 --- a/system/src/Grav/Common/Service/SessionServiceProvider.php +++ b/system/src/Grav/Common/Service/SessionServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/StreamsServiceProvider.php b/system/src/Grav/Common/Service/StreamsServiceProvider.php index f501b49..93ebd1b 100644 --- a/system/src/Grav/Common/Service/StreamsServiceProvider.php +++ b/system/src/Grav/Common/Service/StreamsServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Service/TaskServiceProvider.php b/system/src/Grav/Common/Service/TaskServiceProvider.php index 2989e9d..ce5ec64 100644 --- a/system/src/Grav/Common/Service/TaskServiceProvider.php +++ b/system/src/Grav/Common/Service/TaskServiceProvider.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Service * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Session.php b/system/src/Grav/Common/Session.php index 513143e..14d09a2 100644 --- a/system/src/Grav/Common/Session.php +++ b/system/src/Grav/Common/Session.php @@ -3,13 +3,14 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ namespace Grav\Common; use Grav\Common\Form\FormFlash; +use Grav\Events\BeforeSessionStartEvent; use Grav\Events\SessionStartEvent; use Grav\Plugin\Form\Forms; use JsonException; @@ -177,6 +178,17 @@ class Session extends \Grav\Framework\Session\Session return null; } + /** + * @return void + */ + protected function onBeforeSessionStart(): void + { + $event = new BeforeSessionStartEvent($this); + + $grav = Grav::instance(); + $grav->dispatchEvent($event); + } + /** * @return void */ diff --git a/system/src/Grav/Common/Taxonomy.php b/system/src/Grav/Common/Taxonomy.php index 5079a25..1b336bd 100644 --- a/system/src/Grav/Common/Taxonomy.php +++ b/system/src/Grav/Common/Taxonomy.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Theme.php b/system/src/Grav/Common/Theme.php index 6013129..0ed2788 100644 --- a/system/src/Grav/Common/Theme.php +++ b/system/src/Grav/Common/Theme.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Themes.php b/system/src/Grav/Common/Themes.php index 3567cca..e3ce636 100644 --- a/system/src/Grav/Common/Themes.php +++ b/system/src/Grav/Common/Themes.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Exception/TwigException.php b/system/src/Grav/Common/Twig/Exception/TwigException.php index 7605de4..3a2e155 100644 --- a/system/src/Grav/Common/Twig/Exception/TwigException.php +++ b/system/src/Grav/Common/Twig/Exception/TwigException.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig\Exception * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Extension/FilesystemExtension.php b/system/src/Grav/Common/Twig/Extension/FilesystemExtension.php index 0ae793e..a06ed05 100644 --- a/system/src/Grav/Common/Twig/Extension/FilesystemExtension.php +++ b/system/src/Grav/Common/Twig/Extension/FilesystemExtension.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Extension/GravExtension.php b/system/src/Grav/Common/Twig/Extension/GravExtension.php index 52e2a18..f3a122e 100644 --- a/system/src/Grav/Common/Twig/Extension/GravExtension.php +++ b/system/src/Grav/Common/Twig/Extension/GravExtension.php @@ -3,12 +3,13 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ namespace Grav\Common\Twig\Extension; +use CallbackFilterIterator; use Cron\CronExpression; use Grav\Common\Config\Config; use Grav\Common\Data\Data; @@ -41,6 +42,7 @@ use JsonSerializable; use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; use Traversable; use Twig\Environment; +use Twig\Error\RuntimeError; use Twig\Extension\AbstractExtension; use Twig\Extension\GlobalsInterface; use Twig\Loader\FilesystemLoader; @@ -145,6 +147,7 @@ class GravExtension extends AbstractExtension implements GlobalsInterface new TwigFilter('yaml_encode', [$this, 'yamlEncodeFilter']), new TwigFilter('yaml_decode', [$this, 'yamlDecodeFilter']), new TwigFilter('nicecron', [$this, 'niceCronFilter']), + new TwigFilter('replace_last', [$this, 'replaceLastFilter']), // Translations new TwigFilter('t', [$this, 'translate'], ['needs_environment' => true]), @@ -166,6 +169,9 @@ class GravExtension extends AbstractExtension implements GlobalsInterface // PHP methods new TwigFilter('count', 'count'), new TwigFilter('array_diff', 'array_diff'), + + // Security fix + new TwigFilter('filter', [$this, 'filterFilter'], ['needs_environment' => true]), ]; } @@ -194,6 +200,7 @@ class GravExtension extends AbstractExtension implements GlobalsInterface new TwigFunction('gist', [$this, 'gistFunc']), new TwigFunction('nonce_field', [$this, 'nonceFieldFunc']), new TwigFunction('pathinfo', 'pathinfo'), + new TwigFunction('parseurl', 'parse_url'), new TwigFunction('random_string', [$this, 'randomStringFunc']), new TwigFunction('repeat', [$this, 'repeatFunc']), new TwigFunction('regex_replace', [$this, 'regexReplace']), @@ -547,6 +554,21 @@ class GravExtension extends AbstractExtension implements GlobalsInterface return $cron->getText('en'); } + /** + * @param string|mixed $str + * @param string $search + * @param string $replace + * @return string|mixed + */ + public function replaceLastFilter($str, $search, $replace) + { + if (is_string($str) && ($pos = mb_strrpos($str, $search)) !== false) { + $str = mb_substr($str, 0, $pos) . $replace . mb_substr($str, $pos + mb_strlen($search)); + } + + return $str; + } + /** * Get Cron object for a crontab 'at' format * @@ -1659,4 +1681,20 @@ class GravExtension extends AbstractExtension implements GlobalsInterface return is_string($var); } } + + /** + * @param Environment $env + * @param array $array + * @param callable|string $arrow + * @return array|CallbackFilterIterator + * @throws RuntimeError + */ + function filterFilter(Environment $env, $array, $arrow) + { + if (is_string($arrow) && Utils::isDangerousFunction($arrow)) { + throw new RuntimeError('Twig |filter("' . $arrow . '") is not allowed.'); + } + + return twig_array_filter($env, $array, $arrow); + } } diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeCache.php b/system/src/Grav/Common/Twig/Node/TwigNodeCache.php index e05e372..64a13a6 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeCache.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeCache.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeLink.php b/system/src/Grav/Common/Twig/Node/TwigNodeLink.php index a468633..7be655a 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeLink.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeLink.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeMarkdown.php b/system/src/Grav/Common/Twig/Node/TwigNodeMarkdown.php index 4637db7..2eaae8c 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeMarkdown.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeMarkdown.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeRender.php b/system/src/Grav/Common/Twig/Node/TwigNodeRender.php index dbce3c6..e2bcf06 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeRender.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeRender.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeScript.php b/system/src/Grav/Common/Twig/Node/TwigNodeScript.php index 03554bd..5726283 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeScript.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeScript.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeStyle.php b/system/src/Grav/Common/Twig/Node/TwigNodeStyle.php index 1c3568c..5a1dfd1 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeStyle.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeStyle.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeSwitch.php b/system/src/Grav/Common/Twig/Node/TwigNodeSwitch.php index 7bd368e..3aa0889 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeSwitch.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeSwitch.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeThrow.php b/system/src/Grav/Common/Twig/Node/TwigNodeThrow.php index 41ca15d..7ccf771 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeThrow.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeThrow.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Node/TwigNodeTryCatch.php b/system/src/Grav/Common/Twig/Node/TwigNodeTryCatch.php index 1213b7c..9f0af14 100644 --- a/system/src/Grav/Common/Twig/Node/TwigNodeTryCatch.php +++ b/system/src/Grav/Common/Twig/Node/TwigNodeTryCatch.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserCache.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserCache.php index 1cf2191..d3658b2 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserCache.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserCache.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserLink.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserLink.php index 2cb0208..b9fb21f 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserLink.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserLink.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserMarkdown.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserMarkdown.php index 49e34e6..f3d55c0 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserMarkdown.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserMarkdown.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserRender.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserRender.php index de16266..9572f9b 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserRender.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserRender.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserScript.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserScript.php index b943a25..4cc575f 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserScript.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserScript.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserStyle.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserStyle.php index 0687395..03f9fd0 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserStyle.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserStyle.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserSwitch.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserSwitch.php index c63fe95..b52c729 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserSwitch.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserSwitch.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. * @origin https://gist.github.com/maxgalbu/9409182 */ diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserThrow.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserThrow.php index 41f415d..f99f454 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserThrow.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserThrow.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserTryCatch.php b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserTryCatch.php index 9930632..21f9694 100644 --- a/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserTryCatch.php +++ b/system/src/Grav/Common/Twig/TokenParser/TwigTokenParserTryCatch.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/Twig.php b/system/src/Grav/Common/Twig/Twig.php index 39ae3c6..66a9d78 100644 --- a/system/src/Grav/Common/Twig/Twig.php +++ b/system/src/Grav/Common/Twig/Twig.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TwigClockworkDataSource.php b/system/src/Grav/Common/Twig/TwigClockworkDataSource.php index 407a05e..310eb7f 100644 --- a/system/src/Grav/Common/Twig/TwigClockworkDataSource.php +++ b/system/src/Grav/Common/Twig/TwigClockworkDataSource.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TwigClockworkDumper.php b/system/src/Grav/Common/Twig/TwigClockworkDumper.php index c960cf2..ce430de 100644 --- a/system/src/Grav/Common/Twig/TwigClockworkDumper.php +++ b/system/src/Grav/Common/Twig/TwigClockworkDumper.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TwigEnvironment.php b/system/src/Grav/Common/Twig/TwigEnvironment.php index dba8846..36f1b96 100644 --- a/system/src/Grav/Common/Twig/TwigEnvironment.php +++ b/system/src/Grav/Common/Twig/TwigEnvironment.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/TwigExtension.php b/system/src/Grav/Common/Twig/TwigExtension.php index 07c442e..df857db 100644 --- a/system/src/Grav/Common/Twig/TwigExtension.php +++ b/system/src/Grav/Common/Twig/TwigExtension.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Twig/WriteCacheFileTrait.php b/system/src/Grav/Common/Twig/WriteCacheFileTrait.php index 575a281..d88eff9 100644 --- a/system/src/Grav/Common/Twig/WriteCacheFileTrait.php +++ b/system/src/Grav/Common/Twig/WriteCacheFileTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Twig * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Uri.php b/system/src/Grav/Common/Uri.php index 76d9a99..c192438 100644 --- a/system/src/Grav/Common/Uri.php +++ b/system/src/Grav/Common/Uri.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/User/Access.php b/system/src/Grav/Common/User/Access.php index 96f4d96..54b276b 100644 --- a/system/src/Grav/Common/User/Access.php +++ b/system/src/Grav/Common/User/Access.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/User/Authentication.php b/system/src/Grav/Common/User/Authentication.php index c32fd62..613db79 100644 --- a/system/src/Grav/Common/User/Authentication.php +++ b/system/src/Grav/Common/User/Authentication.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/User/DataUser/User.php b/system/src/Grav/Common/User/DataUser/User.php index 9cd3904..dfa178a 100644 --- a/system/src/Grav/Common/User/DataUser/User.php +++ b/system/src/Grav/Common/User/DataUser/User.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/User/DataUser/UserCollection.php b/system/src/Grav/Common/User/DataUser/UserCollection.php index d0ada09..4682d77 100644 --- a/system/src/Grav/Common/User/DataUser/UserCollection.php +++ b/system/src/Grav/Common/User/DataUser/UserCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -112,11 +112,12 @@ class UserCollection implements UserCollectionInterface // If not found, try the fields if (!$user->exists()) { + $query = mb_strtolower($query); foreach ($files as $file) { if (Utils::endsWith($file, YAML_EXT)) { $find_user = $this->load(trim(Utils::pathinfo($file, PATHINFO_FILENAME))); foreach ($fields as $field) { - if (isset($find_user[$field]) && $find_user[$field] === $query) { + if (isset($find_user[$field]) && mb_strtolower($find_user[$field]) === $query) { return $find_user; } } diff --git a/system/src/Grav/Common/User/Group.php b/system/src/Grav/Common/User/Group.php index 9be619a..92585f5 100644 --- a/system/src/Grav/Common/User/Group.php +++ b/system/src/Grav/Common/User/Group.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/User/Interfaces/AuthorizeInterface.php b/system/src/Grav/Common/User/Interfaces/AuthorizeInterface.php index 1aeb004..670a83e 100644 --- a/system/src/Grav/Common/User/Interfaces/AuthorizeInterface.php +++ b/system/src/Grav/Common/User/Interfaces/AuthorizeInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/User/Interfaces/UserCollectionInterface.php b/system/src/Grav/Common/User/Interfaces/UserCollectionInterface.php index 5bcfbc0..b380182 100644 --- a/system/src/Grav/Common/User/Interfaces/UserCollectionInterface.php +++ b/system/src/Grav/Common/User/Interfaces/UserCollectionInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/User/Interfaces/UserGroupInterface.php b/system/src/Grav/Common/User/Interfaces/UserGroupInterface.php index c18388c..b7bbcff 100644 --- a/system/src/Grav/Common/User/Interfaces/UserGroupInterface.php +++ b/system/src/Grav/Common/User/Interfaces/UserGroupInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/User/Interfaces/UserInterface.php b/system/src/Grav/Common/User/Interfaces/UserInterface.php index dcd014c..2dbeb5c 100644 --- a/system/src/Grav/Common/User/Interfaces/UserInterface.php +++ b/system/src/Grav/Common/User/Interfaces/UserInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/User/Traits/UserTrait.php b/system/src/Grav/Common/User/Traits/UserTrait.php index 91c41aa..77cb6c3 100644 --- a/system/src/Grav/Common/User/Traits/UserTrait.php +++ b/system/src/Grav/Common/User/Traits/UserTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/User/User.php b/system/src/Grav/Common/User/User.php index b38c72e..a02cc69 100644 --- a/system/src/Grav/Common/User/User.php +++ b/system/src/Grav/Common/User/User.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\User * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Common/Utils.php b/system/src/Grav/Common/Utils.php index 145a893..078a49a 100644 --- a/system/src/Grav/Common/Utils.php +++ b/system/src/Grav/Common/Utils.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -83,6 +83,7 @@ abstract class Utils $resource = false; if (static::contains((string)$input, '://')) { + // Url contains a scheme (https:// , user:// etc). /** @var UniformResourceLocator $locator */ $locator = $grav['locator']; @@ -134,6 +135,16 @@ abstract class Utils $resource = $locator->findResource($input, false); } } else { + // Just a path. + /** @var Pages $pages */ + $pages = $grav['pages']; + + // Is this a page? + $page = $pages->find($input, true); + if ($page && $page->routable()) { + return $page->url($domain); + } + $root = preg_quote($uri->rootUrl(), '#'); $pattern = '#(' . $root . '$|' . $root . '/)#'; if (!empty($root) && preg_match($pattern, $input, $matches)) { @@ -657,18 +668,17 @@ abstract class Utils */ public static function download($file, $force_download = true, $sec = 0, $bytes = 1024, array $options = []) { + $grav = Grav::instance(); + if (file_exists($file)) { // fire download event - Grav::instance()->fireEvent('onBeforeDownload', new Event(['file' => $file, 'options' => &$options])); + $grav->fireEvent('onBeforeDownload', new Event(['file' => $file, 'options' => &$options])); $file_parts = static::pathinfo($file); $mimetype = $options['mime'] ?? static::getMimeByExtension($file_parts['extension']); $size = filesize($file); // File size - // clean all buffers - while (ob_get_level()) { - ob_end_clean(); - } + $grav->cleanOutputBuffers(); // required for IE, otherwise Content-Disposition may be ignored if (ini_get('zlib.output_compression')) { @@ -703,8 +713,8 @@ abstract class Utils $new_length = $size; header('Content-Length: ' . $size); - if (Grav::instance()['config']->get('system.cache.enabled')) { - $expires = $options['expires'] ?? Grav::instance()['config']->get('system.pages.expires'); + if ($grav['config']->get('system.cache.enabled')) { + $expires = $options['expires'] ?? $grav['config']->get('system.pages.expires'); if ($expires > 0) { $expires_date = gmdate('D, d M Y H:i:s T', time() + $expires); header('Cache-Control: max-age=' . $expires); diff --git a/system/src/Grav/Common/Yaml.php b/system/src/Grav/Common/Yaml.php index 0758599..ef287f3 100644 --- a/system/src/Grav/Common/Yaml.php +++ b/system/src/Grav/Common/Yaml.php @@ -3,7 +3,7 @@ /** * @package Grav\Common * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Application/Application.php b/system/src/Grav/Console/Application/Application.php index 873b94e..2b3a7f5 100644 --- a/system/src/Grav/Console/Application/Application.php +++ b/system/src/Grav/Console/Application/Application.php @@ -3,7 +3,7 @@ /** * @package Grav\Console * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Application/CommandLoader/PluginCommandLoader.php b/system/src/Grav/Console/Application/CommandLoader/PluginCommandLoader.php index adf6447..1f5753c 100644 --- a/system/src/Grav/Console/Application/CommandLoader/PluginCommandLoader.php +++ b/system/src/Grav/Console/Application/CommandLoader/PluginCommandLoader.php @@ -3,7 +3,7 @@ /** * @package Grav\Console * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Application/GpmApplication.php b/system/src/Grav/Console/Application/GpmApplication.php index f9e6b61..d334102 100644 --- a/system/src/Grav/Console/Application/GpmApplication.php +++ b/system/src/Grav/Console/Application/GpmApplication.php @@ -3,7 +3,7 @@ /** * @package Grav\Console * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Application/GravApplication.php b/system/src/Grav/Console/Application/GravApplication.php index f06dae6..5d6cfed 100644 --- a/system/src/Grav/Console/Application/GravApplication.php +++ b/system/src/Grav/Console/Application/GravApplication.php @@ -3,7 +3,7 @@ /** * @package Grav\Console * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Application/PluginApplication.php b/system/src/Grav/Console/Application/PluginApplication.php index e365b1e..64b9b6d 100644 --- a/system/src/Grav/Console/Application/PluginApplication.php +++ b/system/src/Grav/Console/Application/PluginApplication.php @@ -3,7 +3,7 @@ /** * @package Grav\Console * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/BackupCommand.php b/system/src/Grav/Console/Cli/BackupCommand.php index 1fe84ea..37596e2 100644 --- a/system/src/Grav/Console/Cli/BackupCommand.php +++ b/system/src/Grav/Console/Cli/BackupCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/CleanCommand.php b/system/src/Grav/Console/Cli/CleanCommand.php index e6b8f98..41aab2b 100644 --- a/system/src/Grav/Console/Cli/CleanCommand.php +++ b/system/src/Grav/Console/Cli/CleanCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/ClearCacheCommand.php b/system/src/Grav/Console/Cli/ClearCacheCommand.php index 7550dd9..882be21 100644 --- a/system/src/Grav/Console/Cli/ClearCacheCommand.php +++ b/system/src/Grav/Console/Cli/ClearCacheCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/ComposerCommand.php b/system/src/Grav/Console/Cli/ComposerCommand.php index 0dc9bcd..6a23c4e 100644 --- a/system/src/Grav/Console/Cli/ComposerCommand.php +++ b/system/src/Grav/Console/Cli/ComposerCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/InstallCommand.php b/system/src/Grav/Console/Cli/InstallCommand.php index 33198cb..6a47164 100644 --- a/system/src/Grav/Console/Cli/InstallCommand.php +++ b/system/src/Grav/Console/Cli/InstallCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -147,7 +147,7 @@ class InstallCommand extends GravCommand foreach ($this->config['git'] as $repo => $data) { $path = $this->destination . DS . $data['path']; if (!file_exists($path)) { - exec('cd "' . $this->destination . '" && git clone -b ' . $data['branch'] . ' --depth 1 ' . $data['url'] . ' ' . $data['path'], $output, $return); + exec('cd ' . escapeshellarg($this->destination) . ' && git clone -b ' . $data['branch'] . ' --depth 1 ' . $data['url'] . ' ' . $data['path'], $output, $return); if (!$return) { $io->writeln('SUCCESS cloned ' . $data['url'] . ' -> ' . $path . ''); diff --git a/system/src/Grav/Console/Cli/LogViewerCommand.php b/system/src/Grav/Console/Cli/LogViewerCommand.php index d7e127e..8c26af2 100644 --- a/system/src/Grav/Console/Cli/LogViewerCommand.php +++ b/system/src/Grav/Console/Cli/LogViewerCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/NewProjectCommand.php b/system/src/Grav/Console/Cli/NewProjectCommand.php index 7abbc4e..4121669 100644 --- a/system/src/Grav/Console/Cli/NewProjectCommand.php +++ b/system/src/Grav/Console/Cli/NewProjectCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/PageSystemValidatorCommand.php b/system/src/Grav/Console/Cli/PageSystemValidatorCommand.php index 3a69600..ef46fcd 100644 --- a/system/src/Grav/Console/Cli/PageSystemValidatorCommand.php +++ b/system/src/Grav/Console/Cli/PageSystemValidatorCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/SandboxCommand.php b/system/src/Grav/Console/Cli/SandboxCommand.php index 0ba2850..f7b308a 100644 --- a/system/src/Grav/Console/Cli/SandboxCommand.php +++ b/system/src/Grav/Console/Cli/SandboxCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/SchedulerCommand.php b/system/src/Grav/Console/Cli/SchedulerCommand.php index 91fc57d..35e20e3 100644 --- a/system/src/Grav/Console/Cli/SchedulerCommand.php +++ b/system/src/Grav/Console/Cli/SchedulerCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/SecurityCommand.php b/system/src/Grav/Console/Cli/SecurityCommand.php index b6cb662..5feacce 100644 --- a/system/src/Grav/Console/Cli/SecurityCommand.php +++ b/system/src/Grav/Console/Cli/SecurityCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/ServerCommand.php b/system/src/Grav/Console/Cli/ServerCommand.php index 29b423e..1fd8c9b 100644 --- a/system/src/Grav/Console/Cli/ServerCommand.php +++ b/system/src/Grav/Console/Cli/ServerCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Cli/YamlLinterCommand.php b/system/src/Grav/Console/Cli/YamlLinterCommand.php index 75a7559..452fc6d 100644 --- a/system/src/Grav/Console/Cli/YamlLinterCommand.php +++ b/system/src/Grav/Console/Cli/YamlLinterCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Cli * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/ConsoleCommand.php b/system/src/Grav/Console/ConsoleCommand.php index c522c88..15fc88a 100644 --- a/system/src/Grav/Console/ConsoleCommand.php +++ b/system/src/Grav/Console/ConsoleCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/ConsoleTrait.php b/system/src/Grav/Console/ConsoleTrait.php index 0af4075..479b08c 100644 --- a/system/src/Grav/Console/ConsoleTrait.php +++ b/system/src/Grav/Console/ConsoleTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Console * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -288,7 +288,7 @@ trait ConsoleTrait { $composer = Composer::getComposerExecutor(); - return system($composer . ' --working-dir="'.$path.'" --no-interaction --no-dev --prefer-dist -o '. $action); + return system($composer . ' --working-dir=' . escapeshellarg($path) . ' --no-interaction --no-dev --prefer-dist -o '. $action); } /** diff --git a/system/src/Grav/Console/Gpm/DirectInstallCommand.php b/system/src/Grav/Console/Gpm/DirectInstallCommand.php index fbb0220..704f628 100644 --- a/system/src/Grav/Console/Gpm/DirectInstallCommand.php +++ b/system/src/Grav/Console/Gpm/DirectInstallCommand.php @@ -3,19 +3,18 @@ /** * @package Grav\Console\Gpm * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ namespace Grav\Console\Gpm; use Exception; -use Grav\Common\Cache; use Grav\Common\Grav; use Grav\Common\Filesystem\Folder; +use Grav\Common\HTTP\Response; use Grav\Common\GPM\GPM; use Grav\Common\GPM\Installer; -use Grav\Common\GPM\Response; use Grav\Console\GpmCommand; use RuntimeException; use Symfony\Component\Console\Input\InputArgument; diff --git a/system/src/Grav/Console/Gpm/IndexCommand.php b/system/src/Grav/Console/Gpm/IndexCommand.php index 367322b..1930a2d 100644 --- a/system/src/Grav/Console/Gpm/IndexCommand.php +++ b/system/src/Grav/Console/Gpm/IndexCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Gpm * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Gpm/InfoCommand.php b/system/src/Grav/Console/Gpm/InfoCommand.php index c6f8552..493563f 100644 --- a/system/src/Grav/Console/Gpm/InfoCommand.php +++ b/system/src/Grav/Console/Gpm/InfoCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Gpm * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Gpm/InstallCommand.php b/system/src/Grav/Console/Gpm/InstallCommand.php index d25ebe3..f16b5be 100644 --- a/system/src/Grav/Console/Gpm/InstallCommand.php +++ b/system/src/Grav/Console/Gpm/InstallCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Gpm * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -11,10 +11,10 @@ namespace Grav\Console\Gpm; use Exception; use Grav\Common\Filesystem\Folder; +use Grav\Common\HTTP\Response; use Grav\Common\GPM\GPM; use Grav\Common\GPM\Installer; use Grav\Common\GPM\Licenses; -use Grav\Common\GPM\Response; use Grav\Common\GPM\Remote\Package; use Grav\Common\Grav; use Grav\Common\Utils; @@ -485,7 +485,7 @@ class InstallCommand extends GpmCommand { $io = $this->getIO(); - exec('cd ' . $this->destination); + exec('cd ' . escapeshellarg($this->destination)); $to = $this->destination . DS . $package->install_path; $from = $this->getSymlinkSource($package); diff --git a/system/src/Grav/Console/Gpm/SelfupgradeCommand.php b/system/src/Grav/Console/Gpm/SelfupgradeCommand.php index a3d53ff..ccf3b49 100644 --- a/system/src/Grav/Console/Gpm/SelfupgradeCommand.php +++ b/system/src/Grav/Console/Gpm/SelfupgradeCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Gpm * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -11,8 +11,8 @@ namespace Grav\Console\Gpm; use Exception; use Grav\Common\Filesystem\Folder; +use Grav\Common\HTTP\Response; use Grav\Common\GPM\Installer; -use Grav\Common\GPM\Response; use Grav\Common\GPM\Upgrader; use Grav\Common\Grav; use Grav\Console\GpmCommand; diff --git a/system/src/Grav/Console/Gpm/UninstallCommand.php b/system/src/Grav/Console/Gpm/UninstallCommand.php index a3db657..33f86a3 100644 --- a/system/src/Grav/Console/Gpm/UninstallCommand.php +++ b/system/src/Grav/Console/Gpm/UninstallCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Gpm * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Gpm/UpdateCommand.php b/system/src/Grav/Console/Gpm/UpdateCommand.php index 73c5c9e..bd92c54 100644 --- a/system/src/Grav/Console/Gpm/UpdateCommand.php +++ b/system/src/Grav/Console/Gpm/UpdateCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Gpm * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Gpm/VersionCommand.php b/system/src/Grav/Console/Gpm/VersionCommand.php index 8629196..0bc83e4 100644 --- a/system/src/Grav/Console/Gpm/VersionCommand.php +++ b/system/src/Grav/Console/Gpm/VersionCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Gpm * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/GpmCommand.php b/system/src/Grav/Console/GpmCommand.php index a14eb47..2a64dbd 100644 --- a/system/src/Grav/Console/GpmCommand.php +++ b/system/src/Grav/Console/GpmCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/GravCommand.php b/system/src/Grav/Console/GravCommand.php index 7db18e2..9d7e2f4 100644 --- a/system/src/Grav/Console/GravCommand.php +++ b/system/src/Grav/Console/GravCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/Plugin/PluginListCommand.php b/system/src/Grav/Console/Plugin/PluginListCommand.php index 0226614..0e8baf7 100644 --- a/system/src/Grav/Console/Plugin/PluginListCommand.php +++ b/system/src/Grav/Console/Plugin/PluginListCommand.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\Plugin * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Console/TerminalObjects/Table.php b/system/src/Grav/Console/TerminalObjects/Table.php index 153993d..b741bd4 100644 --- a/system/src/Grav/Console/TerminalObjects/Table.php +++ b/system/src/Grav/Console/TerminalObjects/Table.php @@ -3,7 +3,7 @@ /** * @package Grav\Console\TerminalObjects * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Events/BeforeSessionStartEvent.php b/system/src/Grav/Events/BeforeSessionStartEvent.php new file mode 100644 index 0000000..ef6037c --- /dev/null +++ b/system/src/Grav/Events/BeforeSessionStartEvent.php @@ -0,0 +1,36 @@ +start() right before session_start() call. + * + * @property SessionInterface $session Session instance. + */ +class BeforeSessionStartEvent extends Event +{ + /** @var SessionInterface */ + public $session; + + public function __construct(SessionInterface $session) + { + $this->session = $session; + } + + public function __debugInfo(): array + { + return (array)$this; + } +} diff --git a/system/src/Grav/Events/FlexRegisterEvent.php b/system/src/Grav/Events/FlexRegisterEvent.php index b02ed1d..3d4d3c7 100644 --- a/system/src/Grav/Events/FlexRegisterEvent.php +++ b/system/src/Grav/Events/FlexRegisterEvent.php @@ -3,7 +3,7 @@ /** * @package Grav\Events * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Events/PermissionsRegisterEvent.php b/system/src/Grav/Events/PermissionsRegisterEvent.php index 434dcfa..7120a3a 100644 --- a/system/src/Grav/Events/PermissionsRegisterEvent.php +++ b/system/src/Grav/Events/PermissionsRegisterEvent.php @@ -3,7 +3,7 @@ /** * @package Grav\Events * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Events/PluginsLoadedEvent.php b/system/src/Grav/Events/PluginsLoadedEvent.php index 13e2226..41adf4c 100644 --- a/system/src/Grav/Events/PluginsLoadedEvent.php +++ b/system/src/Grav/Events/PluginsLoadedEvent.php @@ -3,7 +3,7 @@ /** * @package Grav\Events * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Events/SessionStartEvent.php b/system/src/Grav/Events/SessionStartEvent.php index fc4f364..94a1820 100644 --- a/system/src/Grav/Events/SessionStartEvent.php +++ b/system/src/Grav/Events/SessionStartEvent.php @@ -3,7 +3,7 @@ /** * @package Grav\Events * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Acl/Access.php b/system/src/Grav/Framework/Acl/Access.php index 45cf2bf..8708e63 100644 --- a/system/src/Grav/Framework/Acl/Access.php +++ b/system/src/Grav/Framework/Acl/Access.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Acl * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Acl/Action.php b/system/src/Grav/Framework/Acl/Action.php index 6251c3c..3160a10 100644 --- a/system/src/Grav/Framework/Acl/Action.php +++ b/system/src/Grav/Framework/Acl/Action.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Acl * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Acl/Permissions.php b/system/src/Grav/Framework/Acl/Permissions.php index e54590a..db26820 100644 --- a/system/src/Grav/Framework/Acl/Permissions.php +++ b/system/src/Grav/Framework/Acl/Permissions.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Acl * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Acl/PermissionsReader.php b/system/src/Grav/Framework/Acl/PermissionsReader.php index 350fc96..f2214f6 100644 --- a/system/src/Grav/Framework/Acl/PermissionsReader.php +++ b/system/src/Grav/Framework/Acl/PermissionsReader.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Acl * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Acl/RecursiveActionIterator.php b/system/src/Grav/Framework/Acl/RecursiveActionIterator.php index 1fb9a60..cbde180 100644 --- a/system/src/Grav/Framework/Acl/RecursiveActionIterator.php +++ b/system/src/Grav/Framework/Acl/RecursiveActionIterator.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Acl * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Cache/AbstractCache.php b/system/src/Grav/Framework/Cache/AbstractCache.php index b6d00a3..978a1b6 100644 --- a/system/src/Grav/Framework/Cache/AbstractCache.php +++ b/system/src/Grav/Framework/Cache/AbstractCache.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Cache * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Cache/Adapter/ChainCache.php b/system/src/Grav/Framework/Cache/Adapter/ChainCache.php index bca940f..a0a8193 100644 --- a/system/src/Grav/Framework/Cache/Adapter/ChainCache.php +++ b/system/src/Grav/Framework/Cache/Adapter/ChainCache.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Cache * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Cache/Adapter/DoctrineCache.php b/system/src/Grav/Framework/Cache/Adapter/DoctrineCache.php index 15afed3..b65ec32 100644 --- a/system/src/Grav/Framework/Cache/Adapter/DoctrineCache.php +++ b/system/src/Grav/Framework/Cache/Adapter/DoctrineCache.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Cache * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Cache/Adapter/FileCache.php b/system/src/Grav/Framework/Cache/Adapter/FileCache.php index 7f1d5e7..085528b 100644 --- a/system/src/Grav/Framework/Cache/Adapter/FileCache.php +++ b/system/src/Grav/Framework/Cache/Adapter/FileCache.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Cache * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Cache/Adapter/MemoryCache.php b/system/src/Grav/Framework/Cache/Adapter/MemoryCache.php index 21cd89c..d128a68 100644 --- a/system/src/Grav/Framework/Cache/Adapter/MemoryCache.php +++ b/system/src/Grav/Framework/Cache/Adapter/MemoryCache.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Cache * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Cache/Adapter/SessionCache.php b/system/src/Grav/Framework/Cache/Adapter/SessionCache.php index 02fe7c9..c5fecaa 100644 --- a/system/src/Grav/Framework/Cache/Adapter/SessionCache.php +++ b/system/src/Grav/Framework/Cache/Adapter/SessionCache.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Cache * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Cache/CacheInterface.php b/system/src/Grav/Framework/Cache/CacheInterface.php index 03dfa7a..9bb8b63 100644 --- a/system/src/Grav/Framework/Cache/CacheInterface.php +++ b/system/src/Grav/Framework/Cache/CacheInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Cache * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Cache/CacheTrait.php b/system/src/Grav/Framework/Cache/CacheTrait.php index 37dd6c9..5a6bb2a 100644 --- a/system/src/Grav/Framework/Cache/CacheTrait.php +++ b/system/src/Grav/Framework/Cache/CacheTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Cache * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -157,9 +157,6 @@ trait CacheTrait $this->validateKeys($keys); $keys = array_unique($keys); $keys = array_combine($keys, $keys); - if (empty($keys)) { - return []; - } $list = $this->doGetMultiple($keys, $this->miss); diff --git a/system/src/Grav/Framework/Cache/Exception/CacheException.php b/system/src/Grav/Framework/Cache/Exception/CacheException.php index db33883..890aac2 100644 --- a/system/src/Grav/Framework/Cache/Exception/CacheException.php +++ b/system/src/Grav/Framework/Cache/Exception/CacheException.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Cache * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Cache/Exception/InvalidArgumentException.php b/system/src/Grav/Framework/Cache/Exception/InvalidArgumentException.php index 70c0418..8c27de7 100644 --- a/system/src/Grav/Framework/Cache/Exception/InvalidArgumentException.php +++ b/system/src/Grav/Framework/Cache/Exception/InvalidArgumentException.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Cache * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Collection/AbstractFileCollection.php b/system/src/Grav/Framework/Collection/AbstractFileCollection.php index 500aea8..08a279d 100644 --- a/system/src/Grav/Framework/Collection/AbstractFileCollection.php +++ b/system/src/Grav/Framework/Collection/AbstractFileCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Collection * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Collection/AbstractIndexCollection.php b/system/src/Grav/Framework/Collection/AbstractIndexCollection.php index 02916d9..de5d7cb 100644 --- a/system/src/Grav/Framework/Collection/AbstractIndexCollection.php +++ b/system/src/Grav/Framework/Collection/AbstractIndexCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Collection * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Collection/AbstractLazyCollection.php b/system/src/Grav/Framework/Collection/AbstractLazyCollection.php index b0a93f5..8f0b981 100644 --- a/system/src/Grav/Framework/Collection/AbstractLazyCollection.php +++ b/system/src/Grav/Framework/Collection/AbstractLazyCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Collection * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Collection/ArrayCollection.php b/system/src/Grav/Framework/Collection/ArrayCollection.php index cad02f2..2826cf6 100644 --- a/system/src/Grav/Framework/Collection/ArrayCollection.php +++ b/system/src/Grav/Framework/Collection/ArrayCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Collection * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Collection/CollectionInterface.php b/system/src/Grav/Framework/Collection/CollectionInterface.php index e098dd6..39e5692 100644 --- a/system/src/Grav/Framework/Collection/CollectionInterface.php +++ b/system/src/Grav/Framework/Collection/CollectionInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Collection * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Collection/FileCollection.php b/system/src/Grav/Framework/Collection/FileCollection.php index bae0e7b..7314a78 100644 --- a/system/src/Grav/Framework/Collection/FileCollection.php +++ b/system/src/Grav/Framework/Collection/FileCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Collection * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Collection/FileCollectionInterface.php b/system/src/Grav/Framework/Collection/FileCollectionInterface.php index 1b56da9..04024d5 100644 --- a/system/src/Grav/Framework/Collection/FileCollectionInterface.php +++ b/system/src/Grav/Framework/Collection/FileCollectionInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Collection * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Compat/Serializable.php b/system/src/Grav/Framework/Compat/Serializable.php index 22e4648..9e81281 100644 --- a/system/src/Grav/Framework/Compat/Serializable.php +++ b/system/src/Grav/Framework/Compat/Serializable.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Compat * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/ContentBlock/ContentBlock.php b/system/src/Grav/Framework/ContentBlock/ContentBlock.php index 7259df0..345e9ba 100644 --- a/system/src/Grav/Framework/ContentBlock/ContentBlock.php +++ b/system/src/Grav/Framework/ContentBlock/ContentBlock.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\ContentBlock * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/ContentBlock/ContentBlockInterface.php b/system/src/Grav/Framework/ContentBlock/ContentBlockInterface.php index bb0e46f..74d6cbd 100644 --- a/system/src/Grav/Framework/ContentBlock/ContentBlockInterface.php +++ b/system/src/Grav/Framework/ContentBlock/ContentBlockInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\ContentBlock * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/ContentBlock/HtmlBlock.php b/system/src/Grav/Framework/ContentBlock/HtmlBlock.php index 69d417c..dfeb924 100644 --- a/system/src/Grav/Framework/ContentBlock/HtmlBlock.php +++ b/system/src/Grav/Framework/ContentBlock/HtmlBlock.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\ContentBlock * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/ContentBlock/HtmlBlockInterface.php b/system/src/Grav/Framework/ContentBlock/HtmlBlockInterface.php index b151d7b..2191d67 100644 --- a/system/src/Grav/Framework/ContentBlock/HtmlBlockInterface.php +++ b/system/src/Grav/Framework/ContentBlock/HtmlBlockInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\ContentBlock * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Contracts/Media/MediaObjectInterface.php b/system/src/Grav/Framework/Contracts/Media/MediaObjectInterface.php new file mode 100644 index 0000000..75b80f0 --- /dev/null +++ b/system/src/Grav/Framework/Contracts/Media/MediaObjectInterface.php @@ -0,0 +1,52 @@ +|ArrayAccess + * @phpstan-pure + */ + public function getIdentifierMeta(); +} diff --git a/system/src/Grav/Framework/Contracts/Relationships/RelationshipInterface.php b/system/src/Grav/Framework/Contracts/Relationships/RelationshipInterface.php new file mode 100644 index 0000000..c0a7edf --- /dev/null +++ b/system/src/Grav/Framework/Contracts/Relationships/RelationshipInterface.php @@ -0,0 +1,81 @@ + + */ +interface RelationshipInterface extends Countable, IteratorAggregate, JsonSerializable, Serializable +{ + /** + * @return string + * @phpstan-pure + */ + public function getName(): string; + + /** + * @return string + * @phpstan-pure + */ + public function getType(): string; + + /** + * @return bool + * @phpstan-pure + */ + public function isModified(): bool; + + /** + * @return string + * @phpstan-pure + */ + public function getCardinality(): string; + + /** + * @return P + * @phpstan-pure + */ + public function getParent(): IdentifierInterface; + + /** + * @param string $id + * @param string|null $type + * @return bool + * @phpstan-pure + */ + public function has(string $id, string $type = null): bool; + + /** + * @param T $identifier + * @return bool + * @phpstan-pure + */ + public function hasIdentifier(IdentifierInterface $identifier): bool; + + /** + * @param T $identifier + * @return bool + */ + public function addIdentifier(IdentifierInterface $identifier): bool; + + /** + * @param T|null $identifier + * @return bool + */ + public function removeIdentifier(IdentifierInterface $identifier = null): bool; + + /** + * @return iterable + */ + public function getIterator(): iterable; +} diff --git a/system/src/Grav/Framework/Contracts/Relationships/RelationshipsInterface.php b/system/src/Grav/Framework/Contracts/Relationships/RelationshipsInterface.php new file mode 100644 index 0000000..4bd90a3 --- /dev/null +++ b/system/src/Grav/Framework/Contracts/Relationships/RelationshipsInterface.php @@ -0,0 +1,53 @@ +> + * @extends Iterator> + */ +interface RelationshipsInterface extends Countable, ArrayAccess, Iterator, JsonSerializable +{ + /** + * @return bool + * @phpstan-pure + */ + public function isModified(): bool; + + /** + * @return array + */ + public function getModified(): array; + + /** + * @return int + * @phpstan-pure + */ + public function count(): int; + + /** + * @param string $offset + * @return RelationshipInterface|null + */ + public function offsetGet($offset): ?RelationshipInterface; + + /** + * @return RelationshipInterface|null + */ + public function current(): ?RelationshipInterface; + + /** + * @return string + * @phpstan-pure + */ + public function key(): string; +} diff --git a/system/src/Grav/Framework/Contracts/Relationships/ToManyRelationshipInterface.php b/system/src/Grav/Framework/Contracts/Relationships/ToManyRelationshipInterface.php new file mode 100644 index 0000000..723bef6 --- /dev/null +++ b/system/src/Grav/Framework/Contracts/Relationships/ToManyRelationshipInterface.php @@ -0,0 +1,55 @@ + + */ +interface ToManyRelationshipInterface extends RelationshipInterface +{ + /** + * @param positive-int $pos + * @return IdentifierInterface|null + */ + public function getNthIdentifier(int $pos): ?IdentifierInterface; + + /** + * @param string $id + * @param string|null $type + * @return T|null + * @phpstan-pure + */ + public function getIdentifier(string $id, string $type = null): ?IdentifierInterface; + + /** + * @param string $id + * @param string|null $type + * @return T|null + * @phpstan-pure + */ + public function getObject(string $id, string $type = null): ?object; + + /** + * @param iterable $identifiers + * @return bool + */ + public function addIdentifiers(iterable $identifiers): bool; + + /** + * @param iterable $identifiers + * @return bool + */ + public function replaceIdentifiers(iterable $identifiers): bool; + + /** + * @param iterable $identifiers + * @return bool + */ + public function removeIdentifiers(iterable $identifiers): bool; +} diff --git a/system/src/Grav/Framework/Contracts/Relationships/ToOneRelationshipInterface.php b/system/src/Grav/Framework/Contracts/Relationships/ToOneRelationshipInterface.php new file mode 100644 index 0000000..0e6aeb9 --- /dev/null +++ b/system/src/Grav/Framework/Contracts/Relationships/ToOneRelationshipInterface.php @@ -0,0 +1,37 @@ + + */ +interface ToOneRelationshipInterface extends RelationshipInterface +{ + /** + * @param string|null $id + * @param string|null $type + * @return T|null + * @phpstan-pure + */ + public function getIdentifier(string $id = null, string $type = null): ?IdentifierInterface; + + /** + * @param string|null $id + * @param string|null $type + * @return T|null + * @phpstan-pure + */ + public function getObject(string $id = null, string $type = null): ?object; + + /** + * @param T|null $identifier + * @return bool + */ + public function replaceIdentifier(IdentifierInterface $identifier = null): bool; +} diff --git a/system/src/Grav/Framework/Controller/Traits/ControllerResponseTrait.php b/system/src/Grav/Framework/Controller/Traits/ControllerResponseTrait.php index 24e1fc2..3063de5 100644 --- a/system/src/Grav/Framework/Controller/Traits/ControllerResponseTrait.php +++ b/system/src/Grav/Framework/Controller/Traits/ControllerResponseTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Controller * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/DI/Container.php b/system/src/Grav/Framework/DI/Container.php index dde0da3..1b071bb 100644 --- a/system/src/Grav/Framework/DI/Container.php +++ b/system/src/Grav/Framework/DI/Container.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\DI * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/AbstractFile.php b/system/src/Grav/Framework/File/AbstractFile.php index b216ea6..105f98a 100644 --- a/system/src/Grav/Framework/File/AbstractFile.php +++ b/system/src/Grav/Framework/File/AbstractFile.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/CsvFile.php b/system/src/Grav/Framework/File/CsvFile.php index 7eba91e..2468ccc 100644 --- a/system/src/Grav/Framework/File/CsvFile.php +++ b/system/src/Grav/Framework/File/CsvFile.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/DataFile.php b/system/src/Grav/Framework/File/DataFile.php index 189db53..4f51830 100644 --- a/system/src/Grav/Framework/File/DataFile.php +++ b/system/src/Grav/Framework/File/DataFile.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/File.php b/system/src/Grav/Framework/File/File.php index b1a1c4f..73f841c 100644 --- a/system/src/Grav/Framework/File/File.php +++ b/system/src/Grav/Framework/File/File.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/Formatter/AbstractFormatter.php b/system/src/Grav/Framework/File/Formatter/AbstractFormatter.php index 6a6981b..87bfce7 100644 --- a/system/src/Grav/Framework/File/Formatter/AbstractFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/AbstractFormatter.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File\Formatter * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/Formatter/CsvFormatter.php b/system/src/Grav/Framework/File/Formatter/CsvFormatter.php index 37ab5bb..72ff7a8 100644 --- a/system/src/Grav/Framework/File/Formatter/CsvFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/CsvFormatter.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File\Formatter * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/Formatter/IniFormatter.php b/system/src/Grav/Framework/File/Formatter/IniFormatter.php index ecf67d1..a41a060 100644 --- a/system/src/Grav/Framework/File/Formatter/IniFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/IniFormatter.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File\Formatter * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/Formatter/JsonFormatter.php b/system/src/Grav/Framework/File/Formatter/JsonFormatter.php index 2bd6c79..32b06ef 100644 --- a/system/src/Grav/Framework/File/Formatter/JsonFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/JsonFormatter.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File\Formatter * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/Formatter/MarkdownFormatter.php b/system/src/Grav/Framework/File/Formatter/MarkdownFormatter.php index e36276a..00ba879 100644 --- a/system/src/Grav/Framework/File/Formatter/MarkdownFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/MarkdownFormatter.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File\Formatter * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/Formatter/SerializeFormatter.php b/system/src/Grav/Framework/File/Formatter/SerializeFormatter.php index 25aee81..8feafcf 100644 --- a/system/src/Grav/Framework/File/Formatter/SerializeFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/SerializeFormatter.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File\Formatter * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/Formatter/YamlFormatter.php b/system/src/Grav/Framework/File/Formatter/YamlFormatter.php index 31aff2c..0aa9691 100644 --- a/system/src/Grav/Framework/File/Formatter/YamlFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/YamlFormatter.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File\Formatter * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/IniFile.php b/system/src/Grav/Framework/File/IniFile.php index 0807ee3..4da83e9 100644 --- a/system/src/Grav/Framework/File/IniFile.php +++ b/system/src/Grav/Framework/File/IniFile.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/Interfaces/FileFormatterInterface.php b/system/src/Grav/Framework/File/Interfaces/FileFormatterInterface.php index 78714af..79c55fd 100644 --- a/system/src/Grav/Framework/File/Interfaces/FileFormatterInterface.php +++ b/system/src/Grav/Framework/File/Interfaces/FileFormatterInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/Interfaces/FileInterface.php b/system/src/Grav/Framework/File/Interfaces/FileInterface.php index f2cc288..02d376b 100644 --- a/system/src/Grav/Framework/File/Interfaces/FileInterface.php +++ b/system/src/Grav/Framework/File/Interfaces/FileInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/JsonFile.php b/system/src/Grav/Framework/File/JsonFile.php index 7751e84..89af083 100644 --- a/system/src/Grav/Framework/File/JsonFile.php +++ b/system/src/Grav/Framework/File/JsonFile.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/MarkdownFile.php b/system/src/Grav/Framework/File/MarkdownFile.php index a79d5ce..bcabf41 100644 --- a/system/src/Grav/Framework/File/MarkdownFile.php +++ b/system/src/Grav/Framework/File/MarkdownFile.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/File/YamlFile.php b/system/src/Grav/Framework/File/YamlFile.php index c4300ad..97d5a70 100644 --- a/system/src/Grav/Framework/File/YamlFile.php +++ b/system/src/Grav/Framework/File/YamlFile.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\File * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Filesystem/Filesystem.php b/system/src/Grav/Framework/Filesystem/Filesystem.php index ddbbab0..79de64c 100644 --- a/system/src/Grav/Framework/Filesystem/Filesystem.php +++ b/system/src/Grav/Framework/Filesystem/Filesystem.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Filesystem * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Filesystem/Interfaces/FilesystemInterface.php b/system/src/Grav/Framework/Filesystem/Interfaces/FilesystemInterface.php index 4006c8f..98da126 100644 --- a/system/src/Grav/Framework/Filesystem/Interfaces/FilesystemInterface.php +++ b/system/src/Grav/Framework/Filesystem/Interfaces/FilesystemInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Filesystem * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Flex.php b/system/src/Grav/Framework/Flex/Flex.php index 4d662d1..34c05f1 100644 --- a/system/src/Grav/Framework/Flex/Flex.php +++ b/system/src/Grav/Framework/Flex/Flex.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/FlexCollection.php b/system/src/Grav/Framework/Flex/FlexCollection.php index 186c60a..373758c 100644 --- a/system/src/Grav/Framework/Flex/FlexCollection.php +++ b/system/src/Grav/Framework/Flex/FlexCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -147,6 +147,10 @@ class FlexCollection extends ObjectCollection implements FlexCollectionInterface */ public function search(string $search, $properties = null, array $options = null) { + $directory = $this->getFlexDirectory(); + $properties = $directory->getSearchProperties($properties); + $options = $directory->getSearchOptions($options); + $matching = $this->call('search', [$search, $properties, $options]); $matching = array_filter($matching); diff --git a/system/src/Grav/Framework/Flex/FlexDirectory.php b/system/src/Grav/Framework/Flex/FlexDirectory.php index f96633b..4fcf917 100644 --- a/system/src/Grav/Framework/Flex/FlexDirectory.php +++ b/system/src/Grav/Framework/Flex/FlexDirectory.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -170,6 +170,44 @@ class FlexDirectory implements FlexDirectoryInterface return null === $name ? $this->config : $this->config->get($name, $default); } + /** + * @param string|string[]|null $properties + * @return array + */ + public function getSearchProperties($properties = null): array + { + if (null !== $properties) { + return (array)$properties; + } + + $properties = $this->getConfig('data.search.fields'); + if (!$properties) { + $fields = $this->getConfig('admin.views.list.fields') ?? $this->getConfig('admin.list.fields', []); + foreach ($fields as $property => $value) { + if (!empty($value['link'])) { + $properties[] = $property; + } + } + } + + return $properties; + } + + /** + * @param array|null $options + * @return array + */ + public function getSearchOptions(array $options = null): array + { + if (empty($options['merge'])) { + return $options ?? (array)$this->getConfig('data.search.options'); + } + + unset($options['merge']); + + return $options + (array)$this->getConfig('data.search.options'); + } + /** * @param string|null $name * @param array $options @@ -750,6 +788,7 @@ class FlexDirectory implements FlexDirectoryInterface public function reloadIndex(): void { $this->getCache('index')->clear(); + $this->getIndex()::loadEntriesFromStorage($this->getStorage()); $this->indexes = []; $this->objects = []; @@ -797,6 +836,9 @@ class FlexDirectory implements FlexDirectoryInterface $blueprint->addDynamicHandler('flex', function (array &$field, $property, array &$call) { $this->dynamicFlexField($field, $property, $call); }); + $blueprint->addDynamicHandler('authorize', function (array &$field, $property, array &$call) { + $this->dynamicAuthorizeField($field, $property, $call); + }); if ($context) { $blueprint->setContext($context); @@ -878,6 +920,40 @@ class FlexDirectory implements FlexDirectoryInterface if (is_array($value) && isset($field[$property]) && is_array($field[$property])) { $value = $this->mergeArrays($field[$property], $value); } + $value = $not ? !$value : $value; + + if ($property === 'ignore' && $value) { + Blueprint::addPropertyRecursive($field, 'validate', ['ignore' => true]); + } else { + $field[$property] = $value; + } + } + } + + /** + * @param array $field + * @param string $property + * @param array $call + * @return void + */ + protected function dynamicAuthorizeField(array &$field, $property, array $call): void + { + $params = (array)$call['params']; + $object = $call['object'] ?? null; + $permission = array_shift($params); + $not = false; + if (str_starts_with($permission, '!')) { + $permission = substr($permission, 1); + $not = true; + } elseif (str_starts_with($permission, 'not ')) { + $permission = substr($permission, 4); + $not = true; + } + $permission = trim($permission); + + if ($object) { + $value = $object->isAuthorized($permission) ?? false; + $field[$property] = $not ? !$value : $value; } } diff --git a/system/src/Grav/Framework/Flex/FlexDirectoryForm.php b/system/src/Grav/Framework/Flex/FlexDirectoryForm.php index 709f418..52835c0 100644 --- a/system/src/Grav/Framework/Flex/FlexDirectoryForm.php +++ b/system/src/Grav/Framework/Flex/FlexDirectoryForm.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -275,6 +275,7 @@ class FlexDirectoryForm implements FlexDirectoryFormInterface, JsonSerializable 'unique_id' => $this->getUniqueId(), 'form_name' => $this->getName(), 'folder' => $this->getFlashFolder(), + 'id' => $this->getFlashId(), 'directory' => $this->getDirectory() ]; diff --git a/system/src/Grav/Framework/Flex/FlexForm.php b/system/src/Grav/Framework/Flex/FlexForm.php index a1263f6..0cefc7f 100644 --- a/system/src/Grav/Framework/Flex/FlexForm.php +++ b/system/src/Grav/Framework/Flex/FlexForm.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -326,6 +326,7 @@ class FlexForm implements FlexObjectFormInterface, JsonSerializable 'unique_id' => $this->getUniqueId(), 'form_name' => $this->getName(), 'folder' => $this->getFlashFolder(), + 'id' => $this->getFlashId(), 'object' => $this->getObject() ]; diff --git a/system/src/Grav/Framework/Flex/FlexFormFlash.php b/system/src/Grav/Framework/Flex/FlexFormFlash.php index 3f52cdb..95feee9 100644 --- a/system/src/Grav/Framework/Flex/FlexFormFlash.php +++ b/system/src/Grav/Framework/Flex/FlexFormFlash.php @@ -3,7 +3,7 @@ /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/FlexIdentifier.php b/system/src/Grav/Framework/Flex/FlexIdentifier.php new file mode 100644 index 0000000..ec47ed8 --- /dev/null +++ b/system/src/Grav/Framework/Flex/FlexIdentifier.php @@ -0,0 +1,75 @@ + + */ +class FlexIdentifier extends Identifier +{ + /** @var string */ + private $keyField; + /** @var FlexObjectInterface|null */ + private $object = null; + + /** + * @param FlexObjectInterface $object + * @return FlexIdentifier + */ + public static function createFromObject(FlexObjectInterface $object): FlexIdentifier + { + $instance = new static($object->getKey(), $object->getFlexType(), 'key'); + $instance->setObject($object); + + return $instance; + } + + /** + * IdentifierInterface constructor. + * @param string $id + * @param string $type + * @param string $keyField + */ + public function __construct(string $id, string $type, string $keyField = 'key') + { + parent::__construct($id, $type); + + $this->keyField = $keyField; + } + + /** + * @return T + */ + public function getObject(): ?FlexObjectInterface + { + if (!isset($this->object)) { + /** @var Flex $flex */ + $flex = Grav::instance()['flex']; + + $this->object = $flex->getObject($this->getId(), $this->getType(), $this->keyField); + } + + return $this->object; + } + + /** + * @param T $object + */ + public function setObject(FlexObjectInterface $object): void + { + $type = $this->getType(); + if ($type !== $object->getFlexType()) { + throw new RuntimeException(sprintf('Object has to be type %s, %s given', $type, $object->getFlexType())); + } + + $this->object = $object; + } +} diff --git a/system/src/Grav/Framework/Flex/FlexIndex.php b/system/src/Grav/Framework/Flex/FlexIndex.php index 54438af..612ef42 100644 --- a/system/src/Grav/Framework/Flex/FlexIndex.php +++ b/system/src/Grav/Framework/Flex/FlexIndex.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -162,6 +162,10 @@ class FlexIndex extends ObjectIndex implements FlexIndexInterface */ public function search(string $search, $properties = null, array $options = null) { + $directory = $this->getFlexDirectory(); + $properties = $directory->getSearchProperties($properties); + $options = $directory->getSearchOptions($options); + return $this->__call('search', [$search, $properties, $options]); } diff --git a/system/src/Grav/Framework/Flex/FlexObject.php b/system/src/Grav/Framework/Flex/FlexObject.php index afc656c..2450e4e 100644 --- a/system/src/Grav/Framework/Flex/FlexObject.php +++ b/system/src/Grav/Framework/Flex/FlexObject.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -287,17 +287,9 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface */ public function search(string $search, $properties = null, array $options = null): float { - $properties = (array)($properties ?? $this->getFlexDirectory()->getConfig('data.search.fields')); - if (!$properties) { - $fields = $this->getFlexDirectory()->getConfig('admin.views.list.fields') ?? $this->getFlexDirectory()->getConfig('admin.list.fields', []); - foreach ($fields as $property => $value) { - if (!empty($value['link'])) { - $properties[] = $property; - } - } - } - - $options = $options ?? (array)$this->getFlexDirectory()->getConfig('data.search.options'); + $directory = $this->getFlexDirectory(); + $properties = $directory->getSearchProperties($properties); + $options = $directory->getSearchOptions($options); $weight = 0; foreach ($properties as $property) { diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexAuthorizeInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexAuthorizeInterface.php index c1025a4..965bf62 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexAuthorizeInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexAuthorizeInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexCollectionInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexCollectionInterface.php index d14b69f..cd29c1b 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexCollectionInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexCollectionInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexCommonInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexCommonInterface.php index 7c1975f..e86c371 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexCommonInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexCommonInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexDirectoryFormInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexDirectoryFormInterface.php index 203c766..d7c6814 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexDirectoryFormInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexDirectoryFormInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexDirectoryInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexDirectoryInterface.php index a77df95..cd8f256 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexDirectoryInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexDirectoryInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexFormInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexFormInterface.php index ba9996a..2c778ef 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexFormInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexFormInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexIndexInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexIndexInterface.php index d8f8ba3..5dc8f4b 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexIndexInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexIndexInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexInterface.php index f1376a5..0c04636 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexObjectFormInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexObjectFormInterface.php index 190a963..f3c29f7 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexObjectFormInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexObjectFormInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexObjectInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexObjectInterface.php index d02bc8b..c4670b1 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexObjectInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexObjectInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexStorageInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexStorageInterface.php index 4209924..e5158d7 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexStorageInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexStorageInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Interfaces/FlexTranslateInterface.php b/system/src/Grav/Framework/Flex/Interfaces/FlexTranslateInterface.php index 8df11fa..93ac932 100644 --- a/system/src/Grav/Framework/Flex/Interfaces/FlexTranslateInterface.php +++ b/system/src/Grav/Framework/Flex/Interfaces/FlexTranslateInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Pages/FlexPageCollection.php b/system/src/Grav/Framework/Flex/Pages/FlexPageCollection.php index 5901557..356c113 100644 --- a/system/src/Grav/Framework/Flex/Pages/FlexPageCollection.php +++ b/system/src/Grav/Framework/Flex/Pages/FlexPageCollection.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Pages/FlexPageIndex.php b/system/src/Grav/Framework/Flex/Pages/FlexPageIndex.php index 5bb5517..54ebeaf 100644 --- a/system/src/Grav/Framework/Flex/Pages/FlexPageIndex.php +++ b/system/src/Grav/Framework/Flex/Pages/FlexPageIndex.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Pages/FlexPageObject.php b/system/src/Grav/Framework/Flex/Pages/FlexPageObject.php index e700424..ea8694b 100644 --- a/system/src/Grav/Framework/Flex/Pages/FlexPageObject.php +++ b/system/src/Grav/Framework/Flex/Pages/FlexPageObject.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Pages/Traits/PageAuthorsTrait.php b/system/src/Grav/Framework/Flex/Pages/Traits/PageAuthorsTrait.php index d0934e1..d7d47f1 100644 --- a/system/src/Grav/Framework/Flex/Pages/Traits/PageAuthorsTrait.php +++ b/system/src/Grav/Framework/Flex/Pages/Traits/PageAuthorsTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Pages/Traits/PageContentTrait.php b/system/src/Grav/Framework/Flex/Pages/Traits/PageContentTrait.php index 43dfee1..bdda602 100644 --- a/system/src/Grav/Framework/Flex/Pages/Traits/PageContentTrait.php +++ b/system/src/Grav/Framework/Flex/Pages/Traits/PageContentTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php b/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php index d753803..a36b9f0 100644 --- a/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php +++ b/system/src/Grav/Framework/Flex/Pages/Traits/PageLegacyTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php b/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php index c4c8cd7..9161bc8 100644 --- a/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php +++ b/system/src/Grav/Framework/Flex/Pages/Traits/PageRoutableTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Pages/Traits/PageTranslateTrait.php b/system/src/Grav/Framework/Flex/Pages/Traits/PageTranslateTrait.php index 4bec685..726dc4b 100644 --- a/system/src/Grav/Framework/Flex/Pages/Traits/PageTranslateTrait.php +++ b/system/src/Grav/Framework/Flex/Pages/Traits/PageTranslateTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php b/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php index ee04c51..237ca52 100644 --- a/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Storage/FileStorage.php b/system/src/Grav/Framework/Flex/Storage/FileStorage.php index 1864439..ae444a5 100644 --- a/system/src/Grav/Framework/Flex/Storage/FileStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/FileStorage.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Storage/FolderStorage.php b/system/src/Grav/Framework/Flex/Storage/FolderStorage.php index 600e989..70ba66f 100644 --- a/system/src/Grav/Framework/Flex/Storage/FolderStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/FolderStorage.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php b/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php index 73e2b06..9c448d1 100644 --- a/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Traits/FlexAuthorizeTrait.php b/system/src/Grav/Framework/Flex/Traits/FlexAuthorizeTrait.php index ef4c433..7b1240d 100644 --- a/system/src/Grav/Framework/Flex/Traits/FlexAuthorizeTrait.php +++ b/system/src/Grav/Framework/Flex/Traits/FlexAuthorizeTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php b/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php index ad437eb..6c69d20 100644 --- a/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php +++ b/system/src/Grav/Framework/Flex/Traits/FlexMediaTrait.php @@ -5,7 +5,7 @@ namespace Grav\Framework\Flex\Traits; /** * @package Grav\Framework\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -22,6 +22,9 @@ use Grav\Framework\Cache\CacheInterface; use Grav\Framework\Filesystem\Filesystem; use Grav\Framework\Flex\FlexDirectory; use Grav\Framework\Form\FormFlashFile; +use Grav\Framework\Media\Interfaces\MediaObjectInterface; +use Grav\Framework\Media\MediaObject; +use Grav\Framework\Media\UploadedMediaObject; use Psr\Http\Message\UploadedFileInterface; use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator; use RuntimeException; @@ -30,7 +33,6 @@ use function in_array; use function is_array; use function is_callable; use function is_int; -use function is_object; use function is_string; use function strpos; @@ -297,6 +299,55 @@ trait FlexMediaTrait ]; } + /** + * @param string|null $field + * @param string $filename + * @param MediaObjectInterface|null $image + * @return MediaObject|UploadedMediaObject + */ + protected function buildMediaObject(?string $field, string $filename, MediaObjectInterface $image = null) + { + if (!$image) { + $media = $field ? $this->getMediaField($field) : null; + if ($media) { + $image = $media[$filename]; + } + } + + return new MediaObject($field, $filename, $image, $this); + } + + /** + * @param string|null $field + * @return array + */ + protected function buildMediaList(?string $field): array + { + $names = $field ? (array)$this->getNestedProperty($field) : []; + $media = $field ? $this->getMediaField($field) : null; + if (null === $media) { + $media = $this->getMedia(); + } + + $list = []; + foreach ($names as $key => $val) { + $name = is_string($val) ? $val : $key; + $medium = $media[$name]; + if ($medium) { + if ($medium->uploaded_file) { + $upload = $medium->uploaded_file; + $id = $upload instanceof FormFlashFile ? $upload->getId() : "{$field}-{$name}"; + + $list[] = new UploadedMediaObject($id, $field, $name, $upload); + } else { + $list[] = $this->buildMediaObject($field, $name, $medium); + } + } + } + + return $list; + } + /** * @param array $files * @return void @@ -375,7 +426,7 @@ trait FlexMediaTrait $updated = false; foreach ($this->getUpdatedMedia() as $filename => $upload) { if (is_array($upload)) { - // Uses new format with [UploadedFileInterface, array]. + /** @var array{UploadedFileInterface,array} $upload */ $settings = $upload[1]; if (isset($settings['destination']) && $settings['destination'] === $media->getPath()) { $upload = $upload[0]; @@ -388,6 +439,7 @@ trait FlexMediaTrait $updated = true; if ($medium) { $medium->uploaded = true; + $medium->uploaded_file = $upload; $media->add($filename, $medium); } elseif (is_callable([$media, 'hide'])) { $media->hide($filename); diff --git a/system/src/Grav/Framework/Flex/Traits/FlexRelatedDirectoryTrait.php b/system/src/Grav/Framework/Flex/Traits/FlexRelatedDirectoryTrait.php index de98359..7428195 100644 --- a/system/src/Grav/Framework/Flex/Traits/FlexRelatedDirectoryTrait.php +++ b/system/src/Grav/Framework/Flex/Traits/FlexRelatedDirectoryTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Common\Flex * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Flex/Traits/FlexRelationshipsTrait.php b/system/src/Grav/Framework/Flex/Traits/FlexRelationshipsTrait.php new file mode 100644 index 0000000..2a73eba --- /dev/null +++ b/system/src/Grav/Framework/Flex/Traits/FlexRelationshipsTrait.php @@ -0,0 +1,61 @@ +_relationships)) { + $blueprint = $this->getBlueprint(); + $options = $blueprint->get('config/relationships', []); + $parent = FlexIdentifier::createFromObject($this); + + $this->_relationships = new Relationships($parent, $options); + } + + return $this->_relationships; + } + + /** + * @param string $name + * @return RelationshipInterface|null + */ + public function getRelationship(string $name): ?RelationshipInterface + { + return $this->getRelationships()[$name]; + } + + protected function resetRelationships(): void + { + $this->_relationships = null; + } + + /** + * @param iterable $collection + * @return array + */ + protected function buildFlexIdentifierList(iterable $collection): array + { + $list = []; + foreach ($collection as $object) { + $list[] = FlexIdentifier::createFromObject($object); + } + + return $list; + } +} diff --git a/system/src/Grav/Framework/Form/FormFlash.php b/system/src/Grav/Framework/Form/FormFlash.php index 863eb4a..5e22ef7 100644 --- a/system/src/Grav/Framework/Form/FormFlash.php +++ b/system/src/Grav/Framework/Form/FormFlash.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Form * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -31,6 +31,8 @@ class FormFlash implements FormFlashInterface /** @var bool */ protected $exists; /** @var string */ + protected $id; + /** @var string */ protected $sessionId; /** @var string */ protected $uniqueId; @@ -75,9 +77,12 @@ class FormFlash implements FormFlashInterface }); } - $this->sessionId = $config['session_id'] ?? 'no-session'; + $this->id = $config['id'] ?? ''; + $this->sessionId = $config['session_id'] ?? ''; $this->uniqueId = $config['unique_id'] ?? ''; + $this->setUser($config['user'] ?? null); + $folder = $config['folder'] ?? ($this->sessionId ? 'tmp://forms/' . $this->sessionId : ''); /** @var UniformResourceLocator $locator */ @@ -133,6 +138,14 @@ class FormFlash implements FormFlashInterface return $data; } + /** + * @inheritDoc + */ + public function getId(): string + { + return $this->id && $this->uniqueId ? $this->id . '/' . $this->uniqueId : ''; + } + /** * @inheritDoc */ @@ -390,8 +403,8 @@ class FormFlash implements FormFlashInterface */ public function clearFiles() { - foreach ($this->files as $field => $files) { - foreach ($files as $name => $upload) { + foreach ($this->files as $files) { + foreach ($files as $upload) { $this->removeTmpFile($upload['tmp_name'] ?? ''); } } @@ -406,6 +419,7 @@ class FormFlash implements FormFlashInterface { return [ 'form' => $this->formName, + 'id' => $this->getId(), 'unique_id' => $this->uniqueId, 'url' => $this->url, 'user' => $this->user, diff --git a/system/src/Grav/Framework/Form/FormFlashFile.php b/system/src/Grav/Framework/Form/FormFlashFile.php index 65af544..3f96ed8 100644 --- a/system/src/Grav/Framework/Form/FormFlashFile.php +++ b/system/src/Grav/Framework/Form/FormFlashFile.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Form * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -28,6 +28,8 @@ use function sprintf; */ class FormFlashFile implements UploadedFileInterface, JsonSerializable { + /** @var string */ + private $id; /** @var string */ private $field; /** @var bool */ @@ -45,6 +47,7 @@ class FormFlashFile implements UploadedFileInterface, JsonSerializable */ public function __construct(string $field, array $upload, FormFlash $flash) { + $this->id = $flash->getId() ?: $flash->getUniqueId(); $this->field = $field; $this->upload = $upload; $this->flash = $flash; @@ -107,6 +110,11 @@ class FormFlashFile implements UploadedFileInterface, JsonSerializable } } + public function getId(): string + { + return $this->id; + } + /** * @return string */ @@ -222,6 +230,7 @@ class FormFlashFile implements UploadedFileInterface, JsonSerializable public function __debugInfo() { return [ + 'id:private' => $this->id, 'field:private' => $this->field, 'moved:private' => $this->moved, 'upload:private' => $this->upload, diff --git a/system/src/Grav/Framework/Form/Interfaces/FormFactoryInterface.php b/system/src/Grav/Framework/Form/Interfaces/FormFactoryInterface.php index 6a85f66..6a21a35 100644 --- a/system/src/Grav/Framework/Form/Interfaces/FormFactoryInterface.php +++ b/system/src/Grav/Framework/Form/Interfaces/FormFactoryInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Form * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Form/Interfaces/FormFlashInterface.php b/system/src/Grav/Framework/Form/Interfaces/FormFlashInterface.php index 44bee02..631ace5 100644 --- a/system/src/Grav/Framework/Form/Interfaces/FormFlashInterface.php +++ b/system/src/Grav/Framework/Form/Interfaces/FormFlashInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Form * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -22,6 +22,13 @@ interface FormFlashInterface extends \JsonSerializable */ public function __construct($config); + /** + * Get unique form flash id if set. + * + * @return string + */ + public function getId(): string; + /** * Get session Id associated to this form instance. * diff --git a/system/src/Grav/Framework/Form/Interfaces/FormInterface.php b/system/src/Grav/Framework/Form/Interfaces/FormInterface.php index 0edfc42..c8827dc 100644 --- a/system/src/Grav/Framework/Form/Interfaces/FormInterface.php +++ b/system/src/Grav/Framework/Form/Interfaces/FormInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Form * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Form/Traits/FormTrait.php b/system/src/Grav/Framework/Form/Traits/FormTrait.php index 710d8b0..1dad5c7 100644 --- a/system/src/Grav/Framework/Form/Traits/FormTrait.php +++ b/system/src/Grav/Framework/Form/Traits/FormTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Form * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -453,10 +453,10 @@ trait FormTrait 'session_id' => $this->getSessionId(), 'unique_id' => $this->getUniqueId(), 'form_name' => $this->getName(), - 'folder' => $this->getFlashFolder() + 'folder' => $this->getFlashFolder(), + 'id' => $this->getFlashId() ]; - $this->flash = new FormFlash($config); $this->flash->setUrl($grav['uri']->url)->setUser($grav['user'] ?? null); } @@ -486,7 +486,8 @@ trait FormTrait 'session_id' => $this->getSessionId(), 'unique_id' => $uniqueId, 'form_name' => $name, - 'folder' => $this->getFlashFolder() + 'folder' => $this->getFlashFolder(), + 'id' => $this->getFlashId() ]; $flash = new FormFlash($config); if ($flash->exists() && $flash->getFormName() === $name) { @@ -614,6 +615,28 @@ trait FormTrait return strpos($path, '!!') === false ? rtrim($path, '/') : null; } + /** + * @return string|null + */ + protected function getFlashId(): ?string + { + // Fill template token keys/value pairs. + $dataMap = [ + '[FORM_NAME]' => $this->getName(), + '[SESSIONID]' => 'session', + '[USERNAME]' => '!!', + '[USERNAME_OR_SESSIONID]' => '!!', + '[ACCOUNT]' => 'account' + ]; + + $flashLookupFolder = $this->getFlashLookupFolder(); + + $path = str_replace(array_keys($dataMap), array_values($dataMap), $flashLookupFolder); + + // Make sure we only return valid paths. + return strpos($path, '!!') === false ? rtrim($path, '/') : null; + } + /** * @return string */ diff --git a/system/src/Grav/Framework/Interfaces/RenderInterface.php b/system/src/Grav/Framework/Interfaces/RenderInterface.php index 5bc6e58..d58c7d4 100644 --- a/system/src/Grav/Framework/Interfaces/RenderInterface.php +++ b/system/src/Grav/Framework/Interfaces/RenderInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Interfaces * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Logger/Processors/UserProcessor.php b/system/src/Grav/Framework/Logger/Processors/UserProcessor.php index f0ebef1..714f176 100644 --- a/system/src/Grav/Framework/Logger/Processors/UserProcessor.php +++ b/system/src/Grav/Framework/Logger/Processors/UserProcessor.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Logger * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Media/Interfaces/MediaCollectionInterface.php b/system/src/Grav/Framework/Media/Interfaces/MediaCollectionInterface.php index 2bac98f..0879b81 100644 --- a/system/src/Grav/Framework/Media/Interfaces/MediaCollectionInterface.php +++ b/system/src/Grav/Framework/Media/Interfaces/MediaCollectionInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Media/Interfaces/MediaInterface.php b/system/src/Grav/Framework/Media/Interfaces/MediaInterface.php index 8688ad1..42b27cb 100644 --- a/system/src/Grav/Framework/Media/Interfaces/MediaInterface.php +++ b/system/src/Grav/Framework/Media/Interfaces/MediaInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Media/Interfaces/MediaManipulationInterface.php b/system/src/Grav/Framework/Media/Interfaces/MediaManipulationInterface.php index bca9a22..9973a6d 100644 --- a/system/src/Grav/Framework/Media/Interfaces/MediaManipulationInterface.php +++ b/system/src/Grav/Framework/Media/Interfaces/MediaManipulationInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Media/Interfaces/MediaObjectInterface.php b/system/src/Grav/Framework/Media/Interfaces/MediaObjectInterface.php index f4409c5..6624a1e 100644 --- a/system/src/Grav/Framework/Media/Interfaces/MediaObjectInterface.php +++ b/system/src/Grav/Framework/Media/Interfaces/MediaObjectInterface.php @@ -3,15 +3,45 @@ /** * @package Grav\Framework\Media * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ namespace Grav\Framework\Media\Interfaces; +use Psr\Http\Message\UploadedFileInterface; + /** * Class implements media object interface. + * + * @property UploadedFileInterface|null $uploaded_file */ interface MediaObjectInterface { + /** + * Returns an array containing the file metadata + * + * @return array + */ + public function getMeta(); + + /** + * Return URL to file. + * + * @param bool $reset + * @return string + */ + public function url($reset = true); + + /** + * Get value by using dot notation for nested arrays/objects. + * + * @example $value = $this->get('this.is.my.nested.variable'); + * + * @param string $name Dot separated path to the requested value. + * @param mixed $default Default value (or null). + * @param string|null $separator Separator, defaults to '.' + * @return mixed Value. + */ + public function get($name, $default = null, $separator = null); } diff --git a/system/src/Grav/Framework/Media/MediaIdentifier.php b/system/src/Grav/Framework/Media/MediaIdentifier.php new file mode 100644 index 0000000..986e997 --- /dev/null +++ b/system/src/Grav/Framework/Media/MediaIdentifier.php @@ -0,0 +1,150 @@ + + */ +class MediaIdentifier extends Identifier +{ + /** @var MediaObjectInterface|null */ + private $object = null; + + /** + * @param MediaObjectInterface $object + * @return MediaIdentifier + */ + public static function createFromObject(MediaObjectInterface $object): MediaIdentifier + { + $instance = new static($object->getId()); + $instance->setObject($object); + + return $instance; + } + + /** + * @param string $id + */ + public function __construct(string $id) + { + parent::__construct($id, 'media'); + } + + /** + * @return T + */ + public function getObject(): ?MediaObjectInterface + { + if (!isset($this->object)) { + $type = $this->getType(); + $id = $this->getId(); + + $parts = explode('/', $id); + if ($type === 'media' && str_starts_with($id, 'uploads/')) { + array_shift($parts); + [, $folder, $uniqueId, $field, $filename] = $this->findFlash($parts); + + $flash = $this->getFlash($folder, $uniqueId); + if ($flash->exists()) { + + $uploadedFile = $flash->getFilesByField($field)[$filename] ?? null; + + $this->object = UploadedMediaObject::createFromFlash($flash, $field, $filename, $uploadedFile); + } + } else { + $type = array_shift($parts); + $key = array_shift($parts); + $field = array_shift($parts); + $filename = implode('/', $parts); + + $flexObject = $this->getFlexObject($type, $key); + if ($flexObject && method_exists($flexObject, 'getMediaField') && method_exists($flexObject, 'getMedia')) { + $media = $field !== 'media' ? $flexObject->getMediaField($field) : $flexObject->getMedia(); + $image = null; + if ($media) { + $image = $media[$filename]; + } + + $this->object = new MediaObject($field, $filename, $image, $flexObject); + } + } + + if (!isset($this->object)) { + throw new \RuntimeException(sprintf('Object not found for identifier {type: "%s", id: "%s"}', $type, $id)); + } + } + + return $this->object; + } + + /** + * @param T $object + */ + public function setObject(MediaObjectInterface $object): void + { + $type = $this->getType(); + $objectType = $object->getType(); + + if ($type !== $objectType) { + throw new \RuntimeException(sprintf('Object has to be type %s, %s given', $type, $objectType)); + } + + $this->object = $object; + } + + protected function findFlash(array $parts): ?array + { + $type = array_shift($parts); + if ($type === 'account') { + /** @var UserInterface|null $user */ + $user = Grav::instance()['user'] ?? null; + $folder = $user->getMediaFolder(); + } else { + $folder = 'tmp://'; + } + + if (!$folder) { + return null; + } + + do { + $part = array_shift($parts); + $folder .= "/{$part}"; + } while (!str_starts_with($part, 'flex-')); + + $uniqueId = array_shift($parts); + $field = array_shift($parts); + $filename = implode('/', $parts); + + return [$type, $folder, $uniqueId, $field, $filename]; + } + + protected function getFlash(string $folder, string $uniqueId): FlexFormFlash + { + $config = [ + 'unique_id' => $uniqueId, + 'folder' => $folder + ]; + + return new FlexFormFlash($config); + } + + protected function getFlexObject(string $type, string $key): ?FlexObjectInterface + { + /** @var Flex $flex */ + $flex = Grav::instance()['flex']; + + return $flex->getObject($key, $type); + } +} diff --git a/system/src/Grav/Framework/Media/MediaObject.php b/system/src/Grav/Framework/Media/MediaObject.php new file mode 100644 index 0000000..8a438bf --- /dev/null +++ b/system/src/Grav/Framework/Media/MediaObject.php @@ -0,0 +1,215 @@ +field = $field; + $this->filename = $filename; + $this->media = $media; + $this->object = $object; + } + + /** + * @return string + */ + public function getType(): string + { + return 'media'; + } + + /** + * @return string + */ + public function getId(): string + { + $field = $this->field; + $object = $this->object; + $path = $field ? "/{$field}/" : '/media/'; + + return $object->getType() . '/' . $object->getKey() . $path . basename($this->filename); + } + + /** + * @return bool + */ + public function exists(): bool + { + return $this->media !== null; + } + + /** + * @return array + */ + public function getMeta(): array + { + if (!isset($this->media)) { + return []; + } + + return $this->media->getMeta(); + } + + /** + * @param string $field + * @return mixed|null + */ + public function get(string $field) + { + if (!isset($this->media)) { + return null; + } + + return $this->media->get($field); + } + + /** + * @return string + */ + public function getUrl(): string + { + if (!isset($this->media)) { + return ''; + } + + return $this->media->url(); + } + + /** + * Create media response. + * + * @param array $actions + * @return Response + */ + public function createResponse(array $actions): ResponseInterface + { + if (!isset($this->media)) { + return $this->create404Response($actions); + } + + $media = $this->media; + + if ($actions) { + $media = $this->processMediaActions($media, $actions); + } + + // FIXME: This only works for images + if (!$media instanceof ImageMedium) { + throw new \RuntimeException('Not Implemented', 500); + } + + $filename = $media->path(false); + $time = filemtime($filename); + $size = filesize($filename); + $body = fopen($filename, 'rb'); + $headers = [ + 'Content-Type' => $media->get('mime'), + 'Last-Modified' => gmdate('D, d M Y H:i:s', $time) . ' GMT', + 'ETag' => sprintf('%x-%x', $size, $time) + ]; + + return new Response(200, $headers, $body); + } + + /** + * Process media actions + * + * @param GravMediaObjectInterface $medium + * @param array $actions + * @return GravMediaObjectInterface + */ + protected function processMediaActions(GravMediaObjectInterface $medium, array $actions): GravMediaObjectInterface + { + // loop through actions for the image and call them + foreach ($actions as $method => $params) { + $matches = []; + + if (preg_match('/\[(.*)]/', $params, $matches)) { + $args = [explode(',', $matches[1])]; + } else { + $args = explode(',', $params); + } + + try { + $medium->{$method}(...$args); + } catch (Throwable $e) { + // Ignore all errors for now and just skip the action. + } + } + + return $medium; + } + + /** + * @param array $actions + * @return Response + */ + protected function create404Response(array $actions): Response + { + // Display placeholder image. + $filename = static::$placeholderImage; + + $time = filemtime($filename); + $size = filesize($filename); + $body = fopen($filename, 'rb'); + $headers = [ + 'Content-Type' => 'image/svg', + 'Last-Modified' => gmdate('D, d M Y H:i:s', $time) . ' GMT', + 'ETag' => sprintf('%x-%x', $size, $time) + ]; + + return new Response(404, $headers, $body); + } + + /** + * @return array + */ + public function jsonSerialize(): array + { + return [ + 'type' => $this->getType(), + 'id' => $this->getId() + ]; + } + + /** + * @return string[] + */ + public function __debugInfo(): array + { + return $this->jsonSerialize(); + } +} diff --git a/system/src/Grav/Framework/Media/UploadedMediaObject.php b/system/src/Grav/Framework/Media/UploadedMediaObject.php new file mode 100644 index 0000000..0fe12e1 --- /dev/null +++ b/system/src/Grav/Framework/Media/UploadedMediaObject.php @@ -0,0 +1,172 @@ +getId(); + + return new static($id, $field, $filename, $uploadedFile); + } + + /** + * @param string $id + * @param string|null $field + * @param string $filename + * @param UploadedFileInterface|null $uploadedFile + */ + public function __construct(string $id, ?string $field, string $filename, ?UploadedFileInterface $uploadedFile = null) + { + $this->id = $id; + $this->field = $field; + $this->filename = $filename; + $this->uploadedFile = $uploadedFile; + if ($uploadedFile) { + $this->meta = [ + 'filename' => $uploadedFile->getClientFilename(), + 'mime' => $uploadedFile->getClientMediaType(), + 'size' => $uploadedFile->getSize() + ]; + } else { + $this->meta = []; + } + } + + /** + * @return string + */ + public function getType(): string + { + return 'media'; + } + + /** + * @return string + */ + public function getId(): string + { + $id = $this->id; + $field = $this->field; + $path = $field ? "/{$field}/" : ''; + + return 'uploads/' . $id . $path . basename($this->filename); + } + + /** + * @return bool + */ + public function exists(): bool + { + //return $this->uploadedFile !== null; + return false; + } + + /** + * @return array + */ + public function getMeta(): array + { + return $this->meta; + } + + /** + * @param string $field + * @return mixed|null + */ + public function get(string $field) + { + return $this->meta[$field] ?? null; + } + + /** + * @return string + */ + public function getUrl(): string + { + return ''; + } + + /** + * @return UploadedFileInterface|null + */ + public function getUploadedFile(): ?UploadedFileInterface + { + return $this->uploadedFile; + } + + /** + * @param array $actions + * @return Response + */ + public function createResponse(array $actions): ResponseInterface + { + // Display placeholder image. + $filename = static::$placeholderImage; + + $time = filemtime($filename); + $size = filesize($filename); + $body = fopen($filename, 'rb'); + $headers = [ + 'Content-Type' => 'image/svg', + 'Last-Modified' => gmdate('D, d M Y H:i:s', $time) . ' GMT', + 'ETag' => sprintf('%x-%x', $size, $time) + ]; + + return new Response(404, $headers, $body); + } + + /** + * @return array + */ + public function jsonSerialize(): array + { + return [ + 'type' => $this->getType(), + 'id' => $this->getId() + ]; + } + + /** + * @return string[] + */ + public function __debugInfo(): array + { + return $this->jsonSerialize(); + } +} diff --git a/system/src/Grav/Framework/Mime/MimeTypes.php b/system/src/Grav/Framework/Mime/MimeTypes.php index e3a5ea8..147ea22 100644 --- a/system/src/Grav/Framework/Mime/MimeTypes.php +++ b/system/src/Grav/Framework/Mime/MimeTypes.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Mime * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Access/ArrayAccessTrait.php b/system/src/Grav/Framework/Object/Access/ArrayAccessTrait.php index 4b67599..67d048d 100644 --- a/system/src/Grav/Framework/Object/Access/ArrayAccessTrait.php +++ b/system/src/Grav/Framework/Object/Access/ArrayAccessTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Access/NestedArrayAccessTrait.php b/system/src/Grav/Framework/Object/Access/NestedArrayAccessTrait.php index d9acb10..942e387 100644 --- a/system/src/Grav/Framework/Object/Access/NestedArrayAccessTrait.php +++ b/system/src/Grav/Framework/Object/Access/NestedArrayAccessTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Access/NestedPropertyCollectionTrait.php b/system/src/Grav/Framework/Object/Access/NestedPropertyCollectionTrait.php index 561b6fe..066e25e 100644 --- a/system/src/Grav/Framework/Object/Access/NestedPropertyCollectionTrait.php +++ b/system/src/Grav/Framework/Object/Access/NestedPropertyCollectionTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Access/NestedPropertyTrait.php b/system/src/Grav/Framework/Object/Access/NestedPropertyTrait.php index 64107e0..87737dc 100644 --- a/system/src/Grav/Framework/Object/Access/NestedPropertyTrait.php +++ b/system/src/Grav/Framework/Object/Access/NestedPropertyTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Access/OverloadedPropertyTrait.php b/system/src/Grav/Framework/Object/Access/OverloadedPropertyTrait.php index f417fba..0b82d96 100644 --- a/system/src/Grav/Framework/Object/Access/OverloadedPropertyTrait.php +++ b/system/src/Grav/Framework/Object/Access/OverloadedPropertyTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/ArrayObject.php b/system/src/Grav/Framework/Object/ArrayObject.php index a38864c..964dba1 100644 --- a/system/src/Grav/Framework/Object/ArrayObject.php +++ b/system/src/Grav/Framework/Object/ArrayObject.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Base/ObjectCollectionTrait.php b/system/src/Grav/Framework/Object/Base/ObjectCollectionTrait.php index e29370a..77ae78e 100644 --- a/system/src/Grav/Framework/Object/Base/ObjectCollectionTrait.php +++ b/system/src/Grav/Framework/Object/Base/ObjectCollectionTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Base/ObjectTrait.php b/system/src/Grav/Framework/Object/Base/ObjectTrait.php index 86df8c7..d8289dc 100644 --- a/system/src/Grav/Framework/Object/Base/ObjectTrait.php +++ b/system/src/Grav/Framework/Object/Base/ObjectTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Collection/ObjectExpressionVisitor.php b/system/src/Grav/Framework/Object/Collection/ObjectExpressionVisitor.php index e8b12b7..a939989 100644 --- a/system/src/Grav/Framework/Object/Collection/ObjectExpressionVisitor.php +++ b/system/src/Grav/Framework/Object/Collection/ObjectExpressionVisitor.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Identifiers/Identifier.php b/system/src/Grav/Framework/Object/Identifiers/Identifier.php new file mode 100644 index 0000000..69f41d2 --- /dev/null +++ b/system/src/Grav/Framework/Object/Identifiers/Identifier.php @@ -0,0 +1,66 @@ +id = $id; + $this->type = $type; + } + + /** + * @return string + * @phpstan-pure + */ + public function getId(): string + { + return $this->id; + } + + /** + * @return string + * @phpstan-pure + */ + public function getType(): string + { + return $this->type; + } + + /** + * @return array + */ + public function jsonSerialize(): array + { + return [ + 'type' => $this->type, + 'id' => $this->id + ]; + } + + /** + * @return array + */ + public function __debugInfo(): array + { + return $this->jsonSerialize(); + } +} diff --git a/system/src/Grav/Framework/Object/Interfaces/NestedObjectCollectionInterface.php b/system/src/Grav/Framework/Object/Interfaces/NestedObjectCollectionInterface.php index 9f00bab..35e29d6 100644 --- a/system/src/Grav/Framework/Object/Interfaces/NestedObjectCollectionInterface.php +++ b/system/src/Grav/Framework/Object/Interfaces/NestedObjectCollectionInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Interfaces/NestedObjectInterface.php b/system/src/Grav/Framework/Object/Interfaces/NestedObjectInterface.php index c144d8e..214ff02 100644 --- a/system/src/Grav/Framework/Object/Interfaces/NestedObjectInterface.php +++ b/system/src/Grav/Framework/Object/Interfaces/NestedObjectInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Interfaces/ObjectCollectionInterface.php b/system/src/Grav/Framework/Object/Interfaces/ObjectCollectionInterface.php index bd25f61..579abb8 100644 --- a/system/src/Grav/Framework/Object/Interfaces/ObjectCollectionInterface.php +++ b/system/src/Grav/Framework/Object/Interfaces/ObjectCollectionInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Interfaces/ObjectInterface.php b/system/src/Grav/Framework/Object/Interfaces/ObjectInterface.php index bc4d45d..3cd51d3 100644 --- a/system/src/Grav/Framework/Object/Interfaces/ObjectInterface.php +++ b/system/src/Grav/Framework/Object/Interfaces/ObjectInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/LazyObject.php b/system/src/Grav/Framework/Object/LazyObject.php index 6be2558..a0561ad 100644 --- a/system/src/Grav/Framework/Object/LazyObject.php +++ b/system/src/Grav/Framework/Object/LazyObject.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/ObjectCollection.php b/system/src/Grav/Framework/Object/ObjectCollection.php index 94392af..d38da55 100644 --- a/system/src/Grav/Framework/Object/ObjectCollection.php +++ b/system/src/Grav/Framework/Object/ObjectCollection.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/ObjectIndex.php b/system/src/Grav/Framework/Object/ObjectIndex.php index ab495bd..01f06dc 100644 --- a/system/src/Grav/Framework/Object/ObjectIndex.php +++ b/system/src/Grav/Framework/Object/ObjectIndex.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Property/ArrayPropertyTrait.php b/system/src/Grav/Framework/Object/Property/ArrayPropertyTrait.php index 8ab4c41..ad38f18 100644 --- a/system/src/Grav/Framework/Object/Property/ArrayPropertyTrait.php +++ b/system/src/Grav/Framework/Object/Property/ArrayPropertyTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Property/LazyPropertyTrait.php b/system/src/Grav/Framework/Object/Property/LazyPropertyTrait.php index e689259..ce3b916 100644 --- a/system/src/Grav/Framework/Object/Property/LazyPropertyTrait.php +++ b/system/src/Grav/Framework/Object/Property/LazyPropertyTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Property/MixedPropertyTrait.php b/system/src/Grav/Framework/Object/Property/MixedPropertyTrait.php index 1b57aab..1e1c25a 100644 --- a/system/src/Grav/Framework/Object/Property/MixedPropertyTrait.php +++ b/system/src/Grav/Framework/Object/Property/MixedPropertyTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/Property/ObjectPropertyTrait.php b/system/src/Grav/Framework/Object/Property/ObjectPropertyTrait.php index bb0195d..7de23f9 100644 --- a/system/src/Grav/Framework/Object/Property/ObjectPropertyTrait.php +++ b/system/src/Grav/Framework/Object/Property/ObjectPropertyTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Object/PropertyObject.php b/system/src/Grav/Framework/Object/PropertyObject.php index d9cdde8..10a2bf1 100644 --- a/system/src/Grav/Framework/Object/PropertyObject.php +++ b/system/src/Grav/Framework/Object/PropertyObject.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Object * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Pagination/AbstractPagination.php b/system/src/Grav/Framework/Pagination/AbstractPagination.php index a4d902a..bb3eb96 100644 --- a/system/src/Grav/Framework/Pagination/AbstractPagination.php +++ b/system/src/Grav/Framework/Pagination/AbstractPagination.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Pagination * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Pagination/AbstractPaginationPage.php b/system/src/Grav/Framework/Pagination/AbstractPaginationPage.php index 072fea7..ae6d7d3 100644 --- a/system/src/Grav/Framework/Pagination/AbstractPaginationPage.php +++ b/system/src/Grav/Framework/Pagination/AbstractPaginationPage.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Pagination * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Pagination/Interfaces/PaginationInterface.php b/system/src/Grav/Framework/Pagination/Interfaces/PaginationInterface.php index 1a82147..dfbd9fd 100644 --- a/system/src/Grav/Framework/Pagination/Interfaces/PaginationInterface.php +++ b/system/src/Grav/Framework/Pagination/Interfaces/PaginationInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Pagination * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Pagination/Interfaces/PaginationPageInterface.php b/system/src/Grav/Framework/Pagination/Interfaces/PaginationPageInterface.php index 26c0692..62b2371 100644 --- a/system/src/Grav/Framework/Pagination/Interfaces/PaginationPageInterface.php +++ b/system/src/Grav/Framework/Pagination/Interfaces/PaginationPageInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Pagination * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Pagination/Pagination.php b/system/src/Grav/Framework/Pagination/Pagination.php index 8f2fa20..529dd73 100644 --- a/system/src/Grav/Framework/Pagination/Pagination.php +++ b/system/src/Grav/Framework/Pagination/Pagination.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Pagination * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Pagination/PaginationPage.php b/system/src/Grav/Framework/Pagination/PaginationPage.php index e64abe9..e5d592b 100644 --- a/system/src/Grav/Framework/Pagination/PaginationPage.php +++ b/system/src/Grav/Framework/Pagination/PaginationPage.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Pagination * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/AbstractUri.php b/system/src/Grav/Framework/Psr7/AbstractUri.php index 145437a..1de1870 100644 --- a/system/src/Grav/Framework/Psr7/AbstractUri.php +++ b/system/src/Grav/Framework/Psr7/AbstractUri.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Request.php b/system/src/Grav/Framework/Psr7/Request.php index 795a1a4..41deec8 100644 --- a/system/src/Grav/Framework/Psr7/Request.php +++ b/system/src/Grav/Framework/Psr7/Request.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Response.php b/system/src/Grav/Framework/Psr7/Response.php index 6189c4a..cb66c3b 100644 --- a/system/src/Grav/Framework/Psr7/Response.php +++ b/system/src/Grav/Framework/Psr7/Response.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/ServerRequest.php b/system/src/Grav/Framework/Psr7/ServerRequest.php index cb5bcbb..d8df986 100644 --- a/system/src/Grav/Framework/Psr7/ServerRequest.php +++ b/system/src/Grav/Framework/Psr7/ServerRequest.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Stream.php b/system/src/Grav/Framework/Psr7/Stream.php index 6546bdc..7645d2d 100644 --- a/system/src/Grav/Framework/Psr7/Stream.php +++ b/system/src/Grav/Framework/Psr7/Stream.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Traits/MessageDecoratorTrait.php b/system/src/Grav/Framework/Psr7/Traits/MessageDecoratorTrait.php index c09a03c..f5e3c74 100644 --- a/system/src/Grav/Framework/Psr7/Traits/MessageDecoratorTrait.php +++ b/system/src/Grav/Framework/Psr7/Traits/MessageDecoratorTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Traits/RequestDecoratorTrait.php b/system/src/Grav/Framework/Psr7/Traits/RequestDecoratorTrait.php index 49f2a92..72552cd 100644 --- a/system/src/Grav/Framework/Psr7/Traits/RequestDecoratorTrait.php +++ b/system/src/Grav/Framework/Psr7/Traits/RequestDecoratorTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Traits/ResponseDecoratorTrait.php b/system/src/Grav/Framework/Psr7/Traits/ResponseDecoratorTrait.php index 4bbc736..c92067f 100644 --- a/system/src/Grav/Framework/Psr7/Traits/ResponseDecoratorTrait.php +++ b/system/src/Grav/Framework/Psr7/Traits/ResponseDecoratorTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Traits/ServerRequestDecoratorTrait.php b/system/src/Grav/Framework/Psr7/Traits/ServerRequestDecoratorTrait.php index 9222219..f429694 100644 --- a/system/src/Grav/Framework/Psr7/Traits/ServerRequestDecoratorTrait.php +++ b/system/src/Grav/Framework/Psr7/Traits/ServerRequestDecoratorTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Traits/StreamDecoratorTrait.php b/system/src/Grav/Framework/Psr7/Traits/StreamDecoratorTrait.php index 448323f..de81af1 100644 --- a/system/src/Grav/Framework/Psr7/Traits/StreamDecoratorTrait.php +++ b/system/src/Grav/Framework/Psr7/Traits/StreamDecoratorTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Traits/UploadedFileDecoratorTrait.php b/system/src/Grav/Framework/Psr7/Traits/UploadedFileDecoratorTrait.php index eec3add..c873b83 100644 --- a/system/src/Grav/Framework/Psr7/Traits/UploadedFileDecoratorTrait.php +++ b/system/src/Grav/Framework/Psr7/Traits/UploadedFileDecoratorTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Traits/UriDecorationTrait.php b/system/src/Grav/Framework/Psr7/Traits/UriDecorationTrait.php index 73adb64..e635ab1 100644 --- a/system/src/Grav/Framework/Psr7/Traits/UriDecorationTrait.php +++ b/system/src/Grav/Framework/Psr7/Traits/UriDecorationTrait.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/UploadedFile.php b/system/src/Grav/Framework/Psr7/UploadedFile.php index c3ed62e..30e75cb 100644 --- a/system/src/Grav/Framework/Psr7/UploadedFile.php +++ b/system/src/Grav/Framework/Psr7/UploadedFile.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Psr7/Uri.php b/system/src/Grav/Framework/Psr7/Uri.php index 63fe04e..ec7719c 100644 --- a/system/src/Grav/Framework/Psr7/Uri.php +++ b/system/src/Grav/Framework/Psr7/Uri.php @@ -5,7 +5,7 @@ declare(strict_types=1); /** * @package Grav\Framework\Psr7 * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Relationships/Relationships.php b/system/src/Grav/Framework/Relationships/Relationships.php new file mode 100644 index 0000000..6485682 --- /dev/null +++ b/system/src/Grav/Framework/Relationships/Relationships.php @@ -0,0 +1,217 @@ + + */ +class Relationships implements RelationshipsInterface +{ + /** @var P */ + protected $parent; + /** @var array */ + protected $options; + + /** @var RelationshipInterface[] */ + protected $relationships; + + /** + * Relationships constructor. + * @param P $parent + * @param array $options + */ + public function __construct(IdentifierInterface $parent, array $options) + { + $this->parent = $parent; + $this->options = $options; + $this->relationships = []; + } + + /** + * @return bool + * @phpstan-pure + */ + public function isModified(): bool + { + return !empty($this->getModified()); + } + + /** + * @return RelationshipInterface[] + * @phpstan-pure + */ + public function getModified(): array + { + $list = []; + foreach ($this->relationships as $name => $relationship) { + if ($relationship->isModified()) { + $list[$name] = $relationship; + } + } + + return $list; + } + + /** + * @return int + * @phpstan-pure + */ + public function count(): int + { + return count($this->options); + } + + /** + * @param string $offset + * @return bool + * @phpstan-pure + */ + public function offsetExists($offset): bool + { + return isset($this->options[$offset]); + } + + /** + * @param string $offset + * @return RelationshipInterface|null + */ + public function offsetGet($offset): ?RelationshipInterface + { + if (!isset($this->relationships[$offset])) { + $options = $this->options[$offset] ?? null; + if (null === $options) { + return null; + } + + $this->relationships[$offset] = $this->createRelationship($offset, $options); + } + + return $this->relationships[$offset]; + } + + /** + * @param string $offset + * @param mixed $value + * @return never-return + */ + public function offsetSet($offset, $value) + { + throw new RuntimeException('Setting relationship is not supported', 500); + } + + /** + * @param string $offset + * @return never-return + */ + public function offsetUnset($offset) + { + throw new RuntimeException('Removing relationship is not allowed', 500); + } + + /** + * @return RelationshipInterface|null + */ + public function current(): ?RelationshipInterface + { + $name = key($this->options); + if ($name === null) { + return null; + } + + return $this->offsetGet($name); + } + + /** + * @return string + * @phpstan-pure + */ + public function key(): string + { + return key($this->options); + } + + /** + * @return void + * @phpstan-pure + */ + public function next(): void + { + next($this->options); + } + + /** + * @return void + * @phpstan-pure + */ + public function rewind(): void + { + reset($this->options); + } + + /** + * @return bool + * @phpstan-pure + */ + public function valid(): bool + { + return key($this->options) !== null; + } + + /** + * @return array + */ + public function jsonSerialize(): array + { + $list = []; + foreach ($this as $name => $relationship) { + $list[$name] = $relationship->jsonSerialize(); + } + + return $list; + } + + /** + * @param string $name + * @param array $options + * @return ToOneRelationship|ToManyRelationship + */ + private function createRelationship(string $name, array $options): RelationshipInterface + { + $data = null; + + $parent = $this->parent; + if ($parent instanceof FlexIdentifier) { + $object = $parent->getObject(); + if (!method_exists($object, 'initRelationship')) { + throw new RuntimeException(sprintf('Bad relationship %s', $name), 500); + } + + $data = $object->initRelationship($name); + } + + $cardinality = $options['cardinality'] ?? ''; + switch ($cardinality) { + case 'to-one': + $relationship = new ToOneRelationship($parent, $name, $options, $data); + break; + case 'to-many': + $relationship = new ToManyRelationship($parent, $name, $options, $data ?? []); + break; + default: + throw new RuntimeException(sprintf('Bad relationship cardinality %s', $cardinality), 500); + } + + return $relationship; + } +} diff --git a/system/src/Grav/Framework/Relationships/ToManyRelationship.php b/system/src/Grav/Framework/Relationships/ToManyRelationship.php new file mode 100644 index 0000000..3ea501b --- /dev/null +++ b/system/src/Grav/Framework/Relationships/ToManyRelationship.php @@ -0,0 +1,259 @@ + + */ +class ToManyRelationship implements ToManyRelationshipInterface +{ + /** @template-use RelationshipTrait */ + use RelationshipTrait; + use Serializable; + + /** @var IdentifierInterface[] */ + protected $identifiers = []; + + /** + * ToManyRelationship constructor. + * @param string $name + * @param IdentifierInterface $parent + * @param iterable $identifiers + */ + public function __construct(IdentifierInterface $parent, string $name, array $options, iterable $identifiers = []) + { + $this->parent = $parent; + $this->name = $name; + + $this->parseOptions($options); + $this->addIdentifiers($identifiers); + + $this->modified = false; + } + + /** + * @return string + * @phpstan-pure + */ + public function getCardinality(): string + { + return 'to-many'; + } + + /** + * @return int + * @phpstan-pure + */ + public function count(): int + { + return count($this->identifiers); + } + + /** + * @return array + */ + public function fetch(): array + { + $list = []; + foreach ($this->identifiers as $identifier) { + if (is_callable([$identifier, 'getObject'])) { + $identifier = $identifier->getObject(); + } + $list[] = $identifier; + } + + return $list; + } + + /** + * @param string $id + * @param string|null $type + * @return bool + * @phpstan-pure + */ + public function has(string $id, string $type = null): bool + { + return $this->getIdentifier($id, $type) !== null; + } + + /** + * @param positive-int $pos + * @return IdentifierInterface|null + */ + public function getNthIdentifier(int $pos): ?IdentifierInterface + { + $items = array_keys($this->identifiers); + $key = $items[$pos - 1] ?? null; + if (null === $key) { + return null; + } + + return $this->identifiers[$key] ?? null; + } + + /** + * @param string $id + * @param string|null $type + * @return IdentifierInterface|null + * @phpstan-pure + */ + public function getIdentifier(string $id, string $type = null): ?IdentifierInterface + { + if (null === $type) { + $type = $this->getType(); + } + + if ($type === 'media' && !str_contains($id, '/')) { + $name = $this->name; + $id = $this->parent->getType() . '/' . $this->parent->getId() . '/'. $name . '/' . $id; + } + + $key = "{$type}/{$id}"; + + return $this->identifiers[$key] ?? null; + } + + /** + * @param string $id + * @param string|null $type + * @return T|null + */ + public function getObject(string $id, string $type = null): ?object + { + $identifier = $this->getIdentifier($id, $type); + if ($identifier && is_callable([$identifier, 'getObject'])) { + $identifier = $identifier->getObject(); + } + + return $identifier; + } + + /** + * @param IdentifierInterface $identifier + * @return bool + */ + public function addIdentifier(IdentifierInterface $identifier): bool + { + return $this->addIdentifiers([$identifier]); + } + + /** + * @param IdentifierInterface|null $identifier + * @return bool + */ + public function removeIdentifier(IdentifierInterface $identifier = null): bool + { + return !$identifier || $this->removeIdentifiers([$identifier]); + } + + /** + * @param iterable $identifiers + * @return bool + */ + public function addIdentifiers(iterable $identifiers): bool + { + foreach ($identifiers as $identifier) { + $type = $identifier->getType(); + $id = $identifier->getId(); + $key = "{$type}/{$id}"; + + $this->identifiers[$key] = $this->checkIdentifier($identifier); + $this->modified = true; + } + + return true; + } + + /** + * @param iterable $identifiers + * @return bool + */ + public function replaceIdentifiers(iterable $identifiers): bool + { + $this->identifiers = []; + $this->modified = true; + + return $this->addIdentifiers($identifiers); + } + + /** + * @param iterable $identifiers + * @return bool + */ + public function removeIdentifiers(iterable $identifiers): bool + { + foreach ($identifiers as $identifier) { + $type = $identifier->getType(); + $id = $identifier->getId(); + $key = "{$type}/{$id}"; + + unset($this->identifiers[$key]); + $this->modified = true; + } + + return true; + } + + /** + * @return iterable + * @phpstan-pure + */ + public function getIterator(): iterable + { + return new ArrayIterator($this->identifiers); + } + + /** + * @return array + */ + public function jsonSerialize(): array + { + $list = []; + foreach ($this->getIterator() as $item) { + $list[] = $item->jsonSerialize(); + } + + return $list; + } + + /** + * @return array + */ + public function __serialize(): array + { + return [ + 'parent' => $this->parent, + 'name' => $this->name, + 'type' => $this->type, + 'options' => $this->options, + 'modified' => $this->modified, + 'identifiers' => $this->identifiers, + ]; + } + + /** + * @param array $data + * @return void + */ + public function __unserialize(array $data): void + { + $this->parent = $data['parent']; + $this->name = $data['name']; + $this->type = $data['type']; + $this->options = $data['options']; + $this->modified = $data['modified']; + $this->identifiers = $data['identifiers']; + } +} diff --git a/system/src/Grav/Framework/Relationships/ToOneRelationship.php b/system/src/Grav/Framework/Relationships/ToOneRelationship.php new file mode 100644 index 0000000..9b09651 --- /dev/null +++ b/system/src/Grav/Framework/Relationships/ToOneRelationship.php @@ -0,0 +1,207 @@ + + */ +class ToOneRelationship implements ToOneRelationshipInterface +{ + /** @template-use RelationshipTrait */ + use RelationshipTrait; + use Serializable; + + /** @var IdentifierInterface|null */ + protected $identifier = null; + + public function __construct(IdentifierInterface $parent, string $name, array $options, IdentifierInterface $identifier = null) + { + $this->parent = $parent; + $this->name = $name; + + $this->parseOptions($options); + $this->replaceIdentifier($identifier); + + $this->modified = false; + } + + /** + * @return string + * @phpstan-pure + */ + public function getCardinality(): string + { + return 'to-one'; + } + + /** + * @return int + * @phpstan-pure + */ + public function count(): int + { + return $this->identifier ? 1 : 0; + } + + /** + * @return object|null + */ + public function fetch(): ?object + { + $identifier = $this->identifier; + if (is_callable([$identifier, 'getObject'])) { + $identifier = $identifier->getObject(); + } + + return $identifier; + } + + + /** + * @param string|null $id + * @param string|null $type + * @return bool + * @phpstan-pure + */ + public function has(string $id = null, string $type = null): bool + { + return $this->getIdentifier($id, $type) !== null; + } + + /** + * @param string|null $id + * @param string|null $type + * @return IdentifierInterface|null + * @phpstan-pure + */ + public function getIdentifier(string $id = null, string $type = null): ?IdentifierInterface + { + if ($id && $this->getType() === 'media' && !str_contains($id, '/')) { + $name = $this->name; + $id = $this->parent->getType() . '/' . $this->parent->getId() . '/'. $name . '/' . $id; + } + + $identifier = $this->identifier ?? null; + if (null === $identifier || ($type && $type !== $identifier->getType()) || ($id && $id !== $identifier->getId())) { + return null; + } + + return $identifier; + } + + /** + * @param string|null $id + * @param string|null $type + * @return T|null + */ + public function getObject(string $id = null, string $type = null): ?object + { + $identifier = $this->getIdentifier($id, $type); + if ($identifier && is_callable([$identifier, 'getObject'])) { + $identifier = $identifier->getObject(); + } + + return $identifier; + } + + /** + * @param IdentifierInterface $identifier + * @return bool + */ + public function addIdentifier(IdentifierInterface $identifier): bool + { + $this->identifier = $this->checkIdentifier($identifier); + $this->modified = true; + + return true; + } + + /** + * @param IdentifierInterface|null $identifier + * @return bool + */ + public function replaceIdentifier(IdentifierInterface $identifier = null): bool + { + if ($identifier === null) { + $this->identifier = null; + $this->modified = true; + + return true; + } + + return $this->addIdentifier($identifier); + } + + /** + * @param IdentifierInterface|null $identifier + * @return bool + */ + public function removeIdentifier(IdentifierInterface $identifier = null): bool + { + if (null === $identifier || $this->has($identifier->getId(), $identifier->getType())) { + $this->identifier = null; + $this->modified = true; + + return true; + } + + return false; + } + + /** + * @return iterable + * @phpstan-pure + */ + public function getIterator(): iterable + { + return new ArrayIterator((array)$this->identifier); + } + + /** + * @return array|null + */ + public function jsonSerialize(): ?array + { + return $this->identifier ? $this->identifier->jsonSerialize() : null; + } + + /** + * @return array + */ + public function __serialize(): array + { + return [ + 'parent' => $this->parent, + 'name' => $this->name, + 'type' => $this->type, + 'options' => $this->options, + 'modified' => $this->modified, + 'identifier' => $this->identifier, + ]; + } + + /** + * @param array $data + * @return void + */ + public function __unserialize(array $data): void + { + $this->parent = $data['parent']; + $this->name = $data['name']; + $this->type = $data['type']; + $this->options = $data['options']; + $this->modified = $data['modified']; + $this->identifier = $data['identifier']; + } +} diff --git a/system/src/Grav/Framework/Relationships/Traits/RelationshipTrait.php b/system/src/Grav/Framework/Relationships/Traits/RelationshipTrait.php new file mode 100644 index 0000000..dbe146f --- /dev/null +++ b/system/src/Grav/Framework/Relationships/Traits/RelationshipTrait.php @@ -0,0 +1,128 @@ +name; + } + + /** + * @return string + * @phpstan-pure + */ + public function getType(): string + { + return $this->type; + } + + /** + * @return bool + * @phpstan-pure + */ + public function isModified(): bool + { + return $this->modified; + } + + /** + * @return IdentifierInterface + * @phpstan-pure + */ + public function getParent(): IdentifierInterface + { + return $this->parent; + } + + /** + * @param IdentifierInterface $identifier + * @return bool + * @phpstan-pure + */ + public function hasIdentifier(IdentifierInterface $identifier): bool + { + return $this->getIdentifier($identifier->getId(), $identifier->getType()) !== null; + } + + /** + * @return int + * @phpstan-pure + */ + abstract public function count(): int; + + /** + * @return void + * @phpstan-pure + */ + public function check(): void + { + $min = $this->options['min'] ?? 0; + $max = $this->options['max'] ?? 0; + + if ($min || $max) { + $count = $this->count(); + if ($min && $count < $min) { + throw new RuntimeException(sprintf('%s relationship has too few objects in it', $this->name)); + } + if ($max && $count > $max) { + throw new RuntimeException(sprintf('%s relationship has too many objects in it', $this->name)); + } + } + } + + /** + * @param IdentifierInterface $identifier + * @return IdentifierInterface + */ + private function checkIdentifier(IdentifierInterface $identifier): IdentifierInterface + { + if ($this->type !== $identifier->getType()) { + throw new RuntimeException(sprintf('Bad identifier type %s', $identifier->getType())); + } + + if (get_class($identifier) !== Identifier::class) { + return $identifier; + } + + if ($this->type === 'media') { + return new MediaIdentifier($identifier->getId()); + } + + return new FlexIdentifier($identifier->getId(), $identifier->getType()); + } + + private function parseOptions(array $options): void + { + $this->type = $options['type']; + $this->options = $options; + } +} diff --git a/system/src/Grav/Framework/RequestHandler/Exception/InvalidArgumentException.php b/system/src/Grav/Framework/RequestHandler/Exception/InvalidArgumentException.php index 2456ea1..01ab154 100644 --- a/system/src/Grav/Framework/RequestHandler/Exception/InvalidArgumentException.php +++ b/system/src/Grav/Framework/RequestHandler/Exception/InvalidArgumentException.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\RequestHandler * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/RequestHandler/Exception/NotFoundException.php b/system/src/Grav/Framework/RequestHandler/Exception/NotFoundException.php index ce79ab2..9588f4c 100644 --- a/system/src/Grav/Framework/RequestHandler/Exception/NotFoundException.php +++ b/system/src/Grav/Framework/RequestHandler/Exception/NotFoundException.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\RequestHandler * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/RequestHandler/Exception/NotHandledException.php b/system/src/Grav/Framework/RequestHandler/Exception/NotHandledException.php index 7b4a0e7..6e983cb 100644 --- a/system/src/Grav/Framework/RequestHandler/Exception/NotHandledException.php +++ b/system/src/Grav/Framework/RequestHandler/Exception/NotHandledException.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\RequestHandler * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/RequestHandler/Exception/PageExpiredException.php b/system/src/Grav/Framework/RequestHandler/Exception/PageExpiredException.php index f752167..ec58e46 100644 --- a/system/src/Grav/Framework/RequestHandler/Exception/PageExpiredException.php +++ b/system/src/Grav/Framework/RequestHandler/Exception/PageExpiredException.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\RequestHandler * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/RequestHandler/Exception/RequestException.php b/system/src/Grav/Framework/RequestHandler/Exception/RequestException.php index 678b267..b5521d5 100644 --- a/system/src/Grav/Framework/RequestHandler/Exception/RequestException.php +++ b/system/src/Grav/Framework/RequestHandler/Exception/RequestException.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\RequestHandler * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/RequestHandler/Middlewares/Exceptions.php b/system/src/Grav/Framework/RequestHandler/Middlewares/Exceptions.php index 36ef3a5..cf2d3b2 100644 --- a/system/src/Grav/Framework/RequestHandler/Middlewares/Exceptions.php +++ b/system/src/Grav/Framework/RequestHandler/Middlewares/Exceptions.php @@ -1,14 +1,12 @@ -getHeaderLine('content-type'); + $method = $request->getMethod(); + if (!str_starts_with($contentType, 'multipart/form-data') || !in_array($method, ['PUT', 'PATH'], true)) { + return $handler->handle($request); + } + + $boundary = explode('; boundary=', $contentType, 2)[1] ?? ''; + $parts = explode("--{$boundary}", $request->getBody()->getContents()); + $parts = array_slice($parts, 1, count($parts) - 2); + + $params = []; + $files = []; + foreach ($parts as $part) { + $this->processPart($params, $files, $part); + } + + return $handler->handle($request->withParsedBody($params)->withUploadedFiles($files)); + } + + /** + * @param array $params + * @param array $files + * @param string $part + * @return void + */ + protected function processPart(array &$params, array &$files, string $part): void + { + $part = ltrim($part, "\r\n"); + [$rawHeaders, $body] = explode("\r\n\r\n", $part, 2); + + // Parse headers. + $rawHeaders = explode("\r\n", $rawHeaders); + $headers = array_reduce( + $rawHeaders, + static function (array $headers, $header) { + [$name, $value] = explode(':', $header); + $headers[strtolower($name)] = ltrim($value, ' '); + + return $headers; + }, + [] + ); + + if (!isset($headers['content-disposition'])) { + return; + } + + // Parse content disposition header. + $contentDisposition = $headers['content-disposition']; + preg_match('/^(.+); *name="([^"]+)"(; *filename="([^"]+)")?/', $contentDisposition, $matches); + $name = $matches[2]; + $filename = $matches[4] ?? null; + + if ($filename !== null) { + $stream = Stream::create($body); + $this->addFile($files, $name, new UploadedFile($stream, strlen($body), UPLOAD_ERR_OK, $filename, $headers['content-type'] ?? null)); + } elseif (strpos($contentDisposition, 'filename') !== false) { + // Not uploaded file. + $stream = Stream::create(''); + $this->addFile($files, $name, new UploadedFile($stream, 0, UPLOAD_ERR_NO_FILE)); + } else { + // Regular field. + $params[$name] = substr($body, 0, -2); + } + } + + /** + * @param array $files + * @param string $name + * @param UploadedFileInterface $file + * @return void + */ + protected function addFile(array &$files, string $name, UploadedFileInterface $file): void + { + if (strpos($name, '[]') === strlen($name) - 2) { + $name = substr($name, 0, -2); + + if (isset($files[$name]) && is_array($files[$name])) { + $files[$name][] = $file; + } else { + $files[$name] = [$file]; + } + } else { + $files[$name] = $file; + } + } +} diff --git a/system/src/Grav/Framework/RequestHandler/RequestHandler.php b/system/src/Grav/Framework/RequestHandler/RequestHandler.php index 2ce2427..069808f 100644 --- a/system/src/Grav/Framework/RequestHandler/RequestHandler.php +++ b/system/src/Grav/Framework/RequestHandler/RequestHandler.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\RequestHandler * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php b/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php index ff82889..0bce73e 100644 --- a/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php +++ b/system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\RequestHandler * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -28,10 +28,10 @@ trait RequestHandlerTrait protected $middleware; /** @var callable */ - private $handler; + protected $handler; /** @var ContainerInterface|null */ - private $container; + protected $container; /** * {@inheritdoc} diff --git a/system/src/Grav/Framework/Route/Route.php b/system/src/Grav/Framework/Route/Route.php index d4d9078..6f94988 100644 --- a/system/src/Grav/Framework/Route/Route.php +++ b/system/src/Grav/Framework/Route/Route.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Route * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Route/RouteFactory.php b/system/src/Grav/Framework/Route/RouteFactory.php index fa1a76c..8d14e9a 100644 --- a/system/src/Grav/Framework/Route/RouteFactory.php +++ b/system/src/Grav/Framework/Route/RouteFactory.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Route * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Session/Exceptions/SessionException.php b/system/src/Grav/Framework/Session/Exceptions/SessionException.php index a07e87d..7354660 100644 --- a/system/src/Grav/Framework/Session/Exceptions/SessionException.php +++ b/system/src/Grav/Framework/Session/Exceptions/SessionException.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Session * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Session/Messages.php b/system/src/Grav/Framework/Session/Messages.php index 37c62a9..0b921e1 100644 --- a/system/src/Grav/Framework/Session/Messages.php +++ b/system/src/Grav/Framework/Session/Messages.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Session * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Session/Session.php b/system/src/Grav/Framework/Session/Session.php index 108563e..0dd9aed 100644 --- a/system/src/Grav/Framework/Session/Session.php +++ b/system/src/Grav/Framework/Session/Session.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Session * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ @@ -317,6 +317,8 @@ class Session implements SessionInterface $this->removeCookie(); + $this->onBeforeSessionStart(); + $success = @session_start($this->options); if (!$success) { $last = error_get_last(); @@ -456,6 +458,10 @@ class Session implements SessionInterface return \PHP_SAPI !== 'cli' ? \PHP_SESSION_ACTIVE === session_status() : false; } + protected function onBeforeSessionStart(): void + { + } + protected function onSessionStart(): void { } diff --git a/system/src/Grav/Framework/Session/SessionInterface.php b/system/src/Grav/Framework/Session/SessionInterface.php index fa2873d..85d0bd8 100644 --- a/system/src/Grav/Framework/Session/SessionInterface.php +++ b/system/src/Grav/Framework/Session/SessionInterface.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Session * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Uri/Uri.php b/system/src/Grav/Framework/Uri/Uri.php index 6355a1f..2b9b1a3 100644 --- a/system/src/Grav/Framework/Uri/Uri.php +++ b/system/src/Grav/Framework/Uri/Uri.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Uri * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Uri/UriFactory.php b/system/src/Grav/Framework/Uri/UriFactory.php index ebfec03..f70194e 100644 --- a/system/src/Grav/Framework/Uri/UriFactory.php +++ b/system/src/Grav/Framework/Uri/UriFactory.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Uri * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Framework/Uri/UriPartsFilter.php b/system/src/Grav/Framework/Uri/UriPartsFilter.php index 260711b..ab2ed1b 100644 --- a/system/src/Grav/Framework/Uri/UriPartsFilter.php +++ b/system/src/Grav/Framework/Uri/UriPartsFilter.php @@ -3,7 +3,7 @@ /** * @package Grav\Framework\Uri * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Installer/Install.php b/system/src/Grav/Installer/Install.php index 0f23e89..bba2729 100644 --- a/system/src/Grav/Installer/Install.php +++ b/system/src/Grav/Installer/Install.php @@ -3,7 +3,7 @@ /** * @package Grav\Installer * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Installer/InstallException.php b/system/src/Grav/Installer/InstallException.php index cdd5b7a..67c2dcc 100644 --- a/system/src/Grav/Installer/InstallException.php +++ b/system/src/Grav/Installer/InstallException.php @@ -3,7 +3,7 @@ /** * @package Grav\Installer * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Installer/Versions.php b/system/src/Grav/Installer/Versions.php index 92a64ce..dcba347 100644 --- a/system/src/Grav/Installer/Versions.php +++ b/system/src/Grav/Installer/Versions.php @@ -3,7 +3,7 @@ /** * @package Grav\Installer * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/system/src/Grav/Installer/YamlUpdater.php b/system/src/Grav/Installer/YamlUpdater.php index fe1c7f1..42be7ad 100644 --- a/system/src/Grav/Installer/YamlUpdater.php +++ b/system/src/Grav/Installer/YamlUpdater.php @@ -3,7 +3,7 @@ /** * @package Grav\Installer * - * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved. + * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. * @license MIT License; see LICENSE file for details. */ diff --git a/user/config/versions.yaml b/user/config/versions.yaml index 092f378..21f36c8 100644 --- a/user/config/versions.yaml +++ b/user/config/versions.yaml @@ -1,9 +1,10 @@ core: grav: - version: 1.7.31 + version: 1.7.38 schema: 1.7.0_2020-11-20_1 history: - { version: 1.7.16, date: '2021-06-10 14:03:35' } - { version: 1.7.21, date: '2021-09-16 12:41:14' } - { version: 1.7.25, date: '2021-12-06 12:22:00' } - { version: 1.7.31, date: '2022-03-15 08:48:47' } + - { version: 1.7.38, date: '2023-01-03 15:06:08' }