From d93e51a7d12665a7d3dd6c32f20e03e3ee3e63f2 Mon Sep 17 00:00:00 2001 From: Steve Boyd Date: Thu, 22 Aug 2024 19:12:41 +1200 Subject: [PATCH] API Migrate code and docs from other modules --- _config/asset-admin.yml | 10 + _config/versioned.yml | 21 + _graphql/versioned/config.yml | 25 + _graphql/versioned/enums.yml | 50 ++ _graphql/versioned/types.yml | 27 + .../01_server_requirements.md | 17 + .../02_activating_the_server.md | 62 ++ .../03_configuring_your_schema.md | 309 ++++++++++ .../04_building_the_schema.md | 112 ++++ .../05_using_procedural_code.md | 127 ++++ .../06_deploying_the_schema.md | 88 +++ docs/en/01_getting_started/index.md | 12 + .../01_adding_dataobjects_to_the_schema.md | 485 +++++++++++++++ .../02_query_plugins.md | 560 ++++++++++++++++++ .../03_permissions.md | 64 ++ .../04_inheritance.md | 483 +++++++++++++++ .../05_versioning.md | 190 ++++++ .../06_property_mapping.md | 77 +++ .../07_nested_definitions.md | 52 ++ docs/en/02_working_with_dataobjects/index.md | 14 + .../01_creating_a_generic_type.md | 38 ++ .../02_building_a_custom_query.md | 182 ++++++ .../03_resolver_discovery.md | 191 ++++++ .../04_adding_arguments.md | 84 +++ .../05_adding_pagination.md | 113 ++++ .../06_adding_descriptions.md | 54 ++ .../07_enums_unions_and_interfaces.md | 114 ++++ .../en/03_working_with_generic_types/index.md | 21 + .../01_authentication.md | 107 ++++ .../04_security_and_best_practices/02_cors.md | 139 +++++ .../03_csrf_protection.md | 45 ++ .../04_http_method_checking.md | 28 + .../05_recursive_or_complex_queries.md | 47 ++ .../04_security_and_best_practices/index.md | 12 + docs/en/05_plugins/01_overview.md | 139 +++++ .../05_plugins/02_writing_a_simple_plugin.md | 100 ++++ .../05_plugins/03_writing_a_complex_plugin.md | 328 ++++++++++ docs/en/05_plugins/index.md | 13 + docs/en/06_extending/adding_a_custom_model.md | 80 +++ .../06_extending/adding_a_custom_operation.md | 119 ++++ docs/en/06_extending/adding_middleware.md | 81 +++ docs/en/06_extending/global_schema.md | 32 + docs/en/06_extending/index.md | 13 + docs/en/07_tips_and_tricks.md | 198 +++++++ docs/en/08_architecture_diagrams.md | 123 ++++ docs/en/_images/build_process.png | Bin 0 -> 811506 bytes docs/en/_images/high-level-lifecycle.png | Bin 0 -> 16169 bytes docs/en/_images/models.png | Bin 0 -> 34060 bytes docs/en/_images/plugins.png | Bin 0 -> 65860 bytes docs/en/_images/request_process.png | Bin 0 -> 54606 bytes docs/en/_images/resolver_composition.png | Bin 0 -> 69216 bytes docs/en/_images/resolver_context.png | Bin 0 -> 64652 bytes docs/en/_images/schema_composition.png | Bin 0 -> 46694 bytes docs/en/index.md | 7 + src/Modules/AssetAdmin/FileFilter.php | 114 ++++ src/Modules/AssetAdmin/Notice.php | 98 +++ .../Resolvers/AssetAdminResolver.php | 328 ++++++++++ .../AssetAdmin/Resolvers/FieldResolver.php | 20 + .../AssetAdmin/Resolvers/FileTypeResolver.php | 189 ++++++ .../Resolvers/FolderTypeResolver.php | 184 ++++++ .../Resolvers/PublicationResolver.php | 165 ++++++ src/Modules/AssetAdmin/Schema/Builder.php | 33 ++ src/Modules/CMS/LinkablePlugin.php | 103 ++++ src/Modules/CMS/Resolver.php | 13 + .../AbstractPublishOperationCreator.php | 77 +++ .../Operations/CopyToStageCreator.php | 69 +++ .../Versioned/Operations/PublishCreator.php | 35 ++ .../Versioned/Operations/RollbackCreator.php | 72 +++ .../Versioned/Operations/UnpublishCreator.php | 34 ++ .../Versioned/Plugins/UnpublishOnDelete.php | 83 +++ .../Versioned/Plugins/VersionedDataObject.php | 143 +++++ .../Versioned/Plugins/VersionedRead.php | 53 ++ .../Versioned/Resolvers/VersionFilters.php | 240 ++++++++ .../Versioned/Resolvers/VersionedResolver.php | 269 +++++++++ tests/Middleware/CSRFMiddlewareTest.php | 20 + .../CreateFolderMutationCreatorTest.php | 64 ++ tests/Modules/AssetAdmin/FakeResolveInfo.php | 28 + tests/Modules/AssetAdmin/FileExtension.php | 40 ++ .../FileFilterInputTypeCreatorTest.php | 278 +++++++++ .../AssetAdmin/FileTypeCreatorTest.php | 80 +++ tests/Modules/AssetAdmin/FolderExtension.php | 37 ++ .../AssetAdmin/FolderTypeCreatorTest.php | 134 +++++ .../AssetAdmin/ReadFileQueryCreatorTest.php | 89 +++ .../ReadFileUsageQueryCreatorTest.php | 100 ++++ .../UnpublishFileMutationCreatorTest.php | 67 +++ .../UnpublishFileMutationCreatorTest.yml | 51 ++ .../FileOwner.php | 31 + tests/Modules/AssetAdmin/fixtures.yml | 60 ++ .../AssetAdmin/fixtures/largeimage.png | Bin 0 -> 1780 bytes .../Modules/AssetAdmin/fixtures/testfile.txt | 1 + .../Modules/AssetAdmin/fixtures/testimage.png | Bin 0 -> 981 bytes tests/Modules/CMS/LinkablePluginTest.php | 112 ++++ tests/Modules/Versioned/Fake/Fake.php | 35 ++ .../Versioned/Fake/FakeDataObjectStub.php | 36 ++ .../Versioned/Fake/FakeResolveInfo.php | 28 + .../Plugins/UnversionedWithField.php | 15 + .../Plugins/VersionedDataObjectPluginTest.php | 117 ++++ .../Versioned/Plugins/VersionedReadTest.php | 72 +++ .../Resolvers/VersionedFiltersTest.php | 289 +++++++++ .../Resolvers/VersionedResolverTest.php | 292 +++++++++ tests/Schema/TestSchemaBuilder.php | 5 +- 101 files changed, 9595 insertions(+), 1 deletion(-) create mode 100644 _config/asset-admin.yml create mode 100644 _config/versioned.yml create mode 100644 _graphql/versioned/config.yml create mode 100644 _graphql/versioned/enums.yml create mode 100644 _graphql/versioned/types.yml create mode 100644 docs/en/01_getting_started/01_server_requirements.md create mode 100644 docs/en/01_getting_started/02_activating_the_server.md create mode 100644 docs/en/01_getting_started/03_configuring_your_schema.md create mode 100644 docs/en/01_getting_started/04_building_the_schema.md create mode 100644 docs/en/01_getting_started/05_using_procedural_code.md create mode 100644 docs/en/01_getting_started/06_deploying_the_schema.md create mode 100644 docs/en/01_getting_started/index.md create mode 100644 docs/en/02_working_with_dataobjects/01_adding_dataobjects_to_the_schema.md create mode 100644 docs/en/02_working_with_dataobjects/02_query_plugins.md create mode 100644 docs/en/02_working_with_dataobjects/03_permissions.md create mode 100644 docs/en/02_working_with_dataobjects/04_inheritance.md create mode 100644 docs/en/02_working_with_dataobjects/05_versioning.md create mode 100644 docs/en/02_working_with_dataobjects/06_property_mapping.md create mode 100644 docs/en/02_working_with_dataobjects/07_nested_definitions.md create mode 100644 docs/en/02_working_with_dataobjects/index.md create mode 100644 docs/en/03_working_with_generic_types/01_creating_a_generic_type.md create mode 100644 docs/en/03_working_with_generic_types/02_building_a_custom_query.md create mode 100644 docs/en/03_working_with_generic_types/03_resolver_discovery.md create mode 100644 docs/en/03_working_with_generic_types/04_adding_arguments.md create mode 100644 docs/en/03_working_with_generic_types/05_adding_pagination.md create mode 100644 docs/en/03_working_with_generic_types/06_adding_descriptions.md create mode 100644 docs/en/03_working_with_generic_types/07_enums_unions_and_interfaces.md create mode 100644 docs/en/03_working_with_generic_types/index.md create mode 100644 docs/en/04_security_and_best_practices/01_authentication.md create mode 100644 docs/en/04_security_and_best_practices/02_cors.md create mode 100644 docs/en/04_security_and_best_practices/03_csrf_protection.md create mode 100644 docs/en/04_security_and_best_practices/04_http_method_checking.md create mode 100644 docs/en/04_security_and_best_practices/05_recursive_or_complex_queries.md create mode 100644 docs/en/04_security_and_best_practices/index.md create mode 100644 docs/en/05_plugins/01_overview.md create mode 100644 docs/en/05_plugins/02_writing_a_simple_plugin.md create mode 100644 docs/en/05_plugins/03_writing_a_complex_plugin.md create mode 100644 docs/en/05_plugins/index.md create mode 100644 docs/en/06_extending/adding_a_custom_model.md create mode 100644 docs/en/06_extending/adding_a_custom_operation.md create mode 100644 docs/en/06_extending/adding_middleware.md create mode 100644 docs/en/06_extending/global_schema.md create mode 100644 docs/en/06_extending/index.md create mode 100644 docs/en/07_tips_and_tricks.md create mode 100644 docs/en/08_architecture_diagrams.md create mode 100644 docs/en/_images/build_process.png create mode 100644 docs/en/_images/high-level-lifecycle.png create mode 100644 docs/en/_images/models.png create mode 100644 docs/en/_images/plugins.png create mode 100644 docs/en/_images/request_process.png create mode 100644 docs/en/_images/resolver_composition.png create mode 100644 docs/en/_images/resolver_context.png create mode 100644 docs/en/_images/schema_composition.png create mode 100644 docs/en/index.md create mode 100644 src/Modules/AssetAdmin/FileFilter.php create mode 100644 src/Modules/AssetAdmin/Notice.php create mode 100644 src/Modules/AssetAdmin/Resolvers/AssetAdminResolver.php create mode 100644 src/Modules/AssetAdmin/Resolvers/FieldResolver.php create mode 100644 src/Modules/AssetAdmin/Resolvers/FileTypeResolver.php create mode 100644 src/Modules/AssetAdmin/Resolvers/FolderTypeResolver.php create mode 100644 src/Modules/AssetAdmin/Resolvers/PublicationResolver.php create mode 100644 src/Modules/AssetAdmin/Schema/Builder.php create mode 100644 src/Modules/CMS/LinkablePlugin.php create mode 100644 src/Modules/CMS/Resolver.php create mode 100644 src/Modules/Versioned/Operations/AbstractPublishOperationCreator.php create mode 100644 src/Modules/Versioned/Operations/CopyToStageCreator.php create mode 100644 src/Modules/Versioned/Operations/PublishCreator.php create mode 100644 src/Modules/Versioned/Operations/RollbackCreator.php create mode 100644 src/Modules/Versioned/Operations/UnpublishCreator.php create mode 100644 src/Modules/Versioned/Plugins/UnpublishOnDelete.php create mode 100644 src/Modules/Versioned/Plugins/VersionedDataObject.php create mode 100644 src/Modules/Versioned/Plugins/VersionedRead.php create mode 100644 src/Modules/Versioned/Resolvers/VersionFilters.php create mode 100644 src/Modules/Versioned/Resolvers/VersionedResolver.php create mode 100644 tests/Modules/AssetAdmin/CreateFolderMutationCreatorTest.php create mode 100644 tests/Modules/AssetAdmin/FakeResolveInfo.php create mode 100644 tests/Modules/AssetAdmin/FileExtension.php create mode 100644 tests/Modules/AssetAdmin/FileFilterInputTypeCreatorTest.php create mode 100644 tests/Modules/AssetAdmin/FileTypeCreatorTest.php create mode 100644 tests/Modules/AssetAdmin/FolderExtension.php create mode 100644 tests/Modules/AssetAdmin/FolderTypeCreatorTest.php create mode 100644 tests/Modules/AssetAdmin/ReadFileQueryCreatorTest.php create mode 100644 tests/Modules/AssetAdmin/ReadFileUsageQueryCreatorTest.php create mode 100644 tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest.php create mode 100644 tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest.yml create mode 100644 tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest/FileOwner.php create mode 100644 tests/Modules/AssetAdmin/fixtures.yml create mode 100644 tests/Modules/AssetAdmin/fixtures/largeimage.png create mode 100644 tests/Modules/AssetAdmin/fixtures/testfile.txt create mode 100644 tests/Modules/AssetAdmin/fixtures/testimage.png create mode 100644 tests/Modules/CMS/LinkablePluginTest.php create mode 100644 tests/Modules/Versioned/Fake/Fake.php create mode 100644 tests/Modules/Versioned/Fake/FakeDataObjectStub.php create mode 100644 tests/Modules/Versioned/Fake/FakeResolveInfo.php create mode 100644 tests/Modules/Versioned/Plugins/UnversionedWithField.php create mode 100644 tests/Modules/Versioned/Plugins/VersionedDataObjectPluginTest.php create mode 100644 tests/Modules/Versioned/Plugins/VersionedReadTest.php create mode 100644 tests/Modules/Versioned/Resolvers/VersionedFiltersTest.php create mode 100644 tests/Modules/Versioned/Resolvers/VersionedResolverTest.php diff --git a/_config/asset-admin.yml b/_config/asset-admin.yml new file mode 100644 index 00000000..a908e61c --- /dev/null +++ b/_config/asset-admin.yml @@ -0,0 +1,10 @@ +--- +Name: graphql-asset-admin-schema +Only: + moduleexists: 'silverstripe/asset-admin' +--- +SilverStripe\Core\Injector\Injector: + SilverStripe\AssetAdmin\Model\ThumbnailGenerator.graphql: + class: SilverStripe\AssetAdmin\Model\ThumbnailGenerator + properties: + Generates: false diff --git a/_config/versioned.yml b/_config/versioned.yml new file mode 100644 index 00000000..9fbd27c3 --- /dev/null +++ b/_config/versioned.yml @@ -0,0 +1,21 @@ +--- +Name: graphql-versioned-schema +Only: + moduleexists: 'silverstripe/versioned' +--- +SilverStripe\GraphQL\Schema\Schema: + schemas: + '*': + src: + versionedSrc: 'silverstripe/graphql: _graphql/versioned' +--- +Name: graphql-versioned-plugins +Only: + moduleexists: 'silverstripe/versioned' +--- +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\Schema\Registry\PluginRegistry: + constructor: + - 'SilverStripe\GraphQL\Modules\Versioned\Plugins\VersionedDataObject' + - 'SilverStripe\GraphQL\Modules\Versioned\Plugins\UnpublishOnDelete' + - 'SilverStripe\GraphQL\Modules\Versioned\Plugins\VersionedRead' diff --git a/_graphql/versioned/config.yml b/_graphql/versioned/config.yml new file mode 100644 index 00000000..901da7ba --- /dev/null +++ b/_graphql/versioned/config.yml @@ -0,0 +1,25 @@ +modelConfig: + DataObject: + plugins: + versioning: + before: inheritance + operations: + copyToStage: + class: SilverStripe\GraphQL\Modules\Versioned\Operations\CopyToStageCreator + publish: + class: SilverStripe\GraphQL\Modules\Versioned\Operations\PublishCreator + unpublish: + class: SilverStripe\GraphQL\Modules\Versioned\Operations\UnpublishCreator + rollback: + class: SilverStripe\GraphQL\Modules\Versioned\Operations\RollbackCreator + read: + plugins: + readVersion: + before: paginateList + readOne: + plugins: + readVersion: + before: firstResult + delete: + plugins: + unpublishOnDelete: true diff --git a/_graphql/versioned/enums.yml b/_graphql/versioned/enums.yml new file mode 100644 index 00000000..8ebcb72c --- /dev/null +++ b/_graphql/versioned/enums.yml @@ -0,0 +1,50 @@ +VersionedStage: + description: The stage to read from or write to + values: + DRAFT: + value: Stage + description: The draft stage + LIVE: + value: Live + description: The live stage + +VersionedQueryMode: + description: The versioned mode to use + values: + ARCHIVE: + value: archive + description: Read from a specific date of the archive + LATEST: + value: latest_versions + description: Read the latest version + ALL_VERSIONS: + value: all_versions + description: Reads all versionse + DRAFT: + value: Stage + description: Read from the draft stage + LIVE: + value: Live + description: Read from the live stage + STATUS: + value: status + description: Read only records with a specific status + VERSION: + value: version + description: Read a specific version + +VersionedStatus: + description: The stage to read from or write to + values: + PUBLISHED: + value: published + description: Only published records + DRAFT: + value: draft + description: Only draft records + ARCHIVED: + value: archived + description: Only records that have been archived + MODIFIED: + value: modified + description: Only records that have unpublished changes diff --git a/_graphql/versioned/types.yml b/_graphql/versioned/types.yml new file mode 100644 index 00000000..dff0e8ae --- /dev/null +++ b/_graphql/versioned/types.yml @@ -0,0 +1,27 @@ +CopyToStageInputType: + input: true + fields: + id: + type: ID! + description: The ID of the record to copy + fromVersion: + type: Int + description: The source version number to copy + fromStage: + type: VersionedStage + description: The source stage to copy + toStage: + type: VersionedStage + description: The destination state to copy to + +VersionedInputType: + input: true + fields: + mode: VersionedQueryMode = Stage + archiveDate: + type: String + description: The date to use for archive + status: + type: '[VersionedStatus]' + description: If mode is STATUS, specify which versioned statuses + version: Int diff --git a/docs/en/01_getting_started/01_server_requirements.md b/docs/en/01_getting_started/01_server_requirements.md new file mode 100644 index 00000000..c46d17b6 --- /dev/null +++ b/docs/en/01_getting_started/01_server_requirements.md @@ -0,0 +1,17 @@ +--- +title: Server Requirements +icon: server +summary: What you will need to run GraphQL on a web server +--- + +### Filesystem permissions + +During runtime, Silverstripe CMS needs read access for the webserver user to your webroot. When the GraphQL module is installed it also needs write access for the webserver user to the following locations: + +- `.graphql-generated`: This directory is where your schema is + stored once it [has been built](../getting_started/building_the_schema). Best practice + is to create it ahead of time, but if the directory doesn't exist and your project root is writable, the GraphQL + module will create it for you. +- `public/_graphql`: This directory is used for + [schema introspection](../tips_and_tricks#schema-introspection). You should treat this folder + the same way you treat the `.graphql-generated` folder. diff --git a/docs/en/01_getting_started/02_activating_the_server.md b/docs/en/01_getting_started/02_activating_the_server.md new file mode 100644 index 00000000..f233ecb0 --- /dev/null +++ b/docs/en/01_getting_started/02_activating_the_server.md @@ -0,0 +1,62 @@ +--- +title: Activating the default server +summary: Open up the default server that comes pre-configured with the module +icon: rocket +--- + +# Getting started + +[CHILDREN asList] + +## Activating the default GraphQL server + +GraphQL is used through a single route, typically `/graphql`. You need +to define *types* and *queries* to expose your data via this endpoint. + +These separate endpoints have their own identifiers. `default` refers to the GraphQL server +in the user space (e.g. `/graphql`) - i.e. your custom schema. You can also [set up a new schema server](#setting-up-a-custom-graphql-server) +if you wish. + +> [!NOTE] +> The word "server" here refers to a route with its own isolated GraphQL schema. It does +> not refer to a web server. + +By default, `silverstripe/graphql` does not route any GraphQL servers. To activate the default, +public-facing GraphQL server that ships with the module, just add a rule to [`Director`](api:SilverStripe\Control\Director). + +```yml +SilverStripe\Control\Director: + rules: + 'graphql': '%$SilverStripe\GraphQL\Controller.default' +``` + +## Setting up a custom GraphQL server + +In addition to the default `/graphql` endpoint provided by this module by default, +you may want to set up another GraphQL server running on the same installation of Silverstripe CMS. + +Let's set up a new controller to handle the requests. + +```yml +SilverStripe\Core\Injector\Injector: + # ... + SilverStripe\GraphQL\Controller.myNewSchema: + class: SilverStripe\GraphQL\Controller + constructor: + schemaKey: myNewSchema +``` + +We'll now need to route the controller. + +```yml +SilverStripe\Control\Director: + rules: + 'my-graphql': '%$SilverStripe\GraphQL\Controller.myNewSchema' +``` + +Now, once you have [configured](configuring_your_schema) and [built](building_the_schema) your schema, you +can access it at `/my-graphql`. + +### Further reading + +[CHILDREN] diff --git a/docs/en/01_getting_started/03_configuring_your_schema.md b/docs/en/01_getting_started/03_configuring_your_schema.md new file mode 100644 index 00000000..ad36e389 --- /dev/null +++ b/docs/en/01_getting_started/03_configuring_your_schema.md @@ -0,0 +1,309 @@ +--- +title: Configuring your schema +summary: Add a basic type to the schema configuration +icon: code +--- + +# Getting started + +[CHILDREN asList] + +## Configuring your schema + +GraphQL is a strongly-typed API layer, so having a schema behind it is essential. Simply put: + +- A schema consists of **[types](https://graphql.org/learn/schema/#type-system)** +- **Types** consist of **[fields](https://graphql.org/learn/queries/#fields)** +- **Fields** can have **[arguments](https://graphql.org/learn/queries/#arguments)**. +- **Fields** need to be **[resolved](https://graphql.org/learn/execution/#root-fields-resolvers)** + +**Queries** are just **fields** on a type called "query". They can take arguments, and they +must be resolved. + +There's a bit more to it than that, and if you want to learn more about GraphQL, you can read +the [full documentation](https://graphql.org/learn/), but for now, these three concepts will +serve almost all of your needs to get started. + +> [!TIP] +> It is strongly recommended that you install the [GraphQL devtools](https://github.com/silverstripe/silverstripe-graphql-devtools) module to help with testing your API. +> +> Included in that module is a `GraphQLSchemaInitTask` task to initialise a basic GraphQL schema to get you started. Instructions for using the task are included in the module's README.md. + +### Initial setup + +To start your first schema, open a new configuration file. Let's call it `graphql.yml`. + +```yml +# app/_config/graphql.yml +SilverStripe\GraphQL\Schema\Schema: + schemas: + # your schemas here +``` + +Let's populate a schema that is pre-configured for us out of the box called "default". + +```yml +# app/_config/graphql.yml +SilverStripe\GraphQL\Schema\Schema: + schemas: + default: + config: + # general schema config here + types: + # your generic types here + models: + # your DataObjects here + queries: + # your queries here + mutations: + # your mutations here + enums: + # your enums here +``` + +### Avoid config flushes + +Because the schema definition is only consumed at build time and never used at runtime, it doesn't +make much sense to store it in the configuration layer, because it just means you'll +have to `flush=1` every time you make a schema update, which will slow down your builds. + +It is recommended that you store your schema YAML **outside of the _config directory** to +increase performance and remove the need for flushing when you [build your schema](building_the_schema). + +> [!WARNING] +> This doesn't mean there is never a need to `flush=1` when building your schema. If you were to add a new +> schema, make a change to the value of this `src` attribute, or create new PHP classes, those are still +> standard config changes which won't take effect without a flush. + +We can do this by adding a `src` key to our `app/_config/graphql.yml` schema definition +that maps to a directory relative to the project root. + +```yml +# app/_config/graphql.yml +SilverStripe\GraphQL\Schema\Schema: + schemas: + default: + src: + - app/_graphql +``` + +Your `src` must be an array. This allows further source files to be merged into your schema. +This feature can be use to extend the schema of third party modules. + +> [!NOTE] +> Your directory can also be relative to a module reference, e.g. `somevendor/somemodule: _graphql`: +> +> ```yml +> # app/_config/graphql.yml +> SilverStripe\GraphQL\Schema\Schema: +> schemas: +> default: +> src: +> - app/_graphql +> - module/_graphql +> # The next line would map to `vendor/somevendor/somemodule/_graphql` +> - 'somevendor/somemodule: _graphql' +> ``` + +Now, in the new `app/_graphql` folder, we can create YAML file definitions. + +```yml +# app/_graphql/schema.yml + +# no schema key needed. it's implied! +config: + # your schema config here +types: + # your generic types here +models: + # your DataObjects here +bulkLoad: + # your bulk loader directives here +queries: + # your queries here +mutations: + # your mutations here +enums: + # your enums here +``` + +#### Namespacing your schema files + +Your schema YAML file will get quite bloated if it's just used as a monolithic source of truth +like this. We can tidy this up quite a bit by simply placing the files in directories that map +to the keys they populate -- e.g. `config/`, `types/`, `models/`, `queries/`, `mutations/`, etc. + +There are two approaches to namespacing: + +- By filename +- By directory name + +##### Namespacing by filename + +If the filename is named one of the seven keywords used in the `app/_graphql/schema.yml` example above, it will be implicitly placed +in the corresponding section of the schema - e.g. any configuration +added to `app/_graphql/config.yml` will be implicitly added to +`SilverStripe\GraphQL\Schema\Schema.schemas.default.config`. + +**This only works in the root source directory** (i.e. `app/_graphql/some-directory/config.yml` +will not work). + +```yml +# app/_graphql/config.yml + +# my config here +``` + +```yml +# app/_graphql/types.yml + +# my types here +``` + +```yml +# app/_graphql/models.yml + +# my models here +``` + +```yml +# app/_graphql/enums.yml + +# my enums here +``` + +```yml +# app/_graphql/bulkLoad.yml + +# my bulk loader directives here +``` + +##### Namespacing by directory name + +If you use a parent directory name (at any depth) of one of the seven keywords, it will +be implicitly placed in the corresponding section of the schema - e.g. any configuration +added to a `.yml` file in `app/_graphql/config/` will be implicitly added to +`SilverStripe\GraphQL\Schema\Schema.schemas.default.config`. + +> [!TIP] +> The names of the actual files here do not matter. You could for example have a separate file +> for each of your types, e.g. `app/_graphql/types/my-first-type.yml`. + +```yml +# app/_graphql/config/config.yml + +# my config here +``` + +```yml +# app/_graphql/types/types.yml + +# my types here +``` + +```yml +# app/_graphql/models/models.yml + +# my models here +``` + +```yml +# app/_graphql/enums/enums.yml + +# my enums here +``` + +```yml +# app/_graphql/bulkLoad/bulkLoad.yml + +# my bulk loader directives here +``` + +##### Going even more granular + +These special directories can contain multiple files that will all merge together, so you can even +create one file per type, or some other convention. All that matters is that the parent directory name +*or* the filename matches one of the schema keys. + +The following are perfectly valid: + +- `app/_graphql/config/config.yml` maps to `SilverStripe\GraphQL\Schema\Schema.schemas.default.config` +- `app/_graphql/types/allElementalBlocks.yml` maps to `SilverStripe\GraphQL\Schema\Schema.schemas.default.types` +- `app/_graphql/news-and-blog/models/blog.yml` maps to `SilverStripe\GraphQL\Schema\Schema.schemas.default.models` +- `app/_graphql/mySchema.yml` maps to `SilverStripe\GraphQL\Schema\Schema.schemas.default` + +### Schema config + +Each schema can declare a generic configuration section, `config`. This is mostly used for assigning +or removing plugins and resolvers. + +An important subsection of `config` is `modelConfig`, where you can configure settings for specific +models, e.g. `DataObject`. + +Like the other sections, it can have its own `config.yml`, or just be added as a `config:` +mapping to a generic schema YAML document. + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + plugins: + inheritance: true + operations: + read: + plugins: + readVersion: false + paginateList: false +``` + +You can learn more about plugins and resolvers in the [query plugins](../working_with_dataobjects/query_plugins), +[plugins](../plugins), [building a custom query](../working_with_generic_types/building_a_custom_query#building-a-custom-query), +and [resolver discovery](../working_with_generic_types) sections. + +### Defining a basic type + +Let's define a generic type for our GraphQL schema. + +> [!NOTE] +> Generic types don't map to `DataObject` classes - they're useful for querying more 'generic' data (hence the name). +> You'll learn more about adding DataObjects in [working with DataObjects](../working_with_dataobjects). + +```yml +# app/_graphql/types.yml + +Country: + fields: + name: String + code: String + population: Int + languages: '[String]' +``` + +If you're familiar with [GraphQL type language](https://graphql.org/learn/schema/#type-language), +this should look pretty familiar. + +There are only a handful of [scalar types](https://graphql.org/learn/schema/#scalar-types) +available in GraphQL by default. They are: + +- String +- Int +- Float +- Boolean + +To define a type as a list, you wrap it in brackets: `[String]`, `[Int]` + +To define a type as required (non-null), you add an exclamation mark: `String!` + +Often times, you may want to do both: `[String!]!` + +> [!WARNING] +> Look out for the footgun, here. Make sure your bracketed type is in quotes +> (i.e. `'[String]'`, not `[String]`), otherwise it's valid YAML that will get parsed as an array! + +That's all there is to it! To learn how we can take this further, check out the +[working with generic types](../working_with_generic_types) documentation. Otherwise, +let's get started on [**adding some DataObjects**](../working_with_dataobjects). + +### Further reading + +[CHILDREN] diff --git a/docs/en/01_getting_started/04_building_the_schema.md b/docs/en/01_getting_started/04_building_the_schema.md new file mode 100644 index 00000000..9e818076 --- /dev/null +++ b/docs/en/01_getting_started/04_building_the_schema.md @@ -0,0 +1,112 @@ +--- +title: Building the schema +summary: Turn your schema configuration into executable code +icon: hammer +--- + +# Getting started + +[CHILDREN asList] + +## Building the schema + +The primary API surface of the `silverstripe/graphql` module is the YAML configuration, along +with some [procedural configuration](using_procedural_code). It is important to understand +that **none of this configuration gets interpreted at runtime**. Loading the schema configuration +(which we refer to as the "schema definition") at runtime and converting it to executable code +has dire effects on performance, making API requests slower and slower as the schema grows larger. + +To mitigate this problem, the schema that gets executed at runtime is **generated PHP code**. +This code generation happens during a build step, and it is critical to run this build step +whenever the schema definition changes, or a new schema definition is added. + +### What triggers a GraphQL code build? + +- Any time you run the `dev/graphql/build` command to explicitly build your GraphQL schemas. +- Any time you run the `dev/build` command on your project. +- `silverstripe/graphql` will attempt to generate your schema "on-demand" on the first GraphQL request *only* if it wasn’t already generated. + +> [!WARNING] +> Relying on the "on-demand" schema generation on the first GraphQL request requires some additional consideration. +> See [deploying the schema](06_deploying_the_schema.md#on-demand). + +#### Running `dev/graphql/build` + +The main command for generating the schema code is `dev/graphql/build`. + +`vendor/bin/sake dev/graphql/build` + +This command takes an optional `schema` parameter. If you only want to generate a specific schema +(e.g. generate your custom schema, but not the CMS schema), you should pass in the name of the +schema you want to build. + +> [!NOTE] +> If you do not provide a `schema` parameter, the command will build all schemas. + +`vendor/bin/sake dev/graphql/build schema=default` + +> [!NOTE] +> Most of the time, the name of your custom schema is `default`. + +Keep in mind that some of your changes will be in YAML in the `_config/` directory, which also +requires a flush. + +`vendor/bin/sake dev/graphql/build schema=default flush=1` + +#### Building on dev/build + +By default, all schemas will be built during `dev/build`. To disable this, change the config: + +```yml +SilverStripe\GraphQL\Extensions\DevBuildExtension: + enabled: false +``` + +### Caching + +Generating code is a pretty expensive process. A large schema with 50 `DataObject` classes exposing +all their operations can take up to **20 seconds** to generate. This may be acceptable +for initial builds and deployments, but during incremental development this can really +slow things down. + +To mitigate this, the generated code for each type is cached against a signature. +If the type hasn't changed, it doesn't get re-built. This reduces build times to **under one second** for incremental changes. + +#### Clearing the schema cache + +If you want to completely re-generate your schema from scratch, you can add `clear=1` to the `dev/graphql/build` command. + +`vendor/bin/sake dev/graphql/build schema=default clear=1` + +If your schema is producing unexpected results, try using `clear=1` to eliminate the possibility +of a caching issue. If the issue is resolved, record exactly what you changed and [create an issue](https://github.com/silverstripe/silverstripe-graphql/issues/new). + +### Build gotchas + +Keep in mind that it's not always explicit schema definition changes that require a build. +Anything influencing the output of the schema will require a build. This could include +tangential changes such as: + +- Updating the `$db` array (or relationships) of a `DataObject` class that has `fields: '*'` (i.e. include all fields on that class in the schema). +- Adding a new resolver for a type that uses [resolver discovery](../working_with_generic_types/resolver_discovery) +- Adding an extension to a `DataObject` class +- Adding a new subclass of a `DataObject` class that is already exposed + +### Viewing the generated code + +By default, the generated PHP code is placed in the `.graphql-generated/` directory in the root of your project. +It is not meant to be accessible through your webserver, Which is ensured by keeping it outside of the +`public/` webroot and the inclusion of a `.htaccess` file in each schema folder. + +Additional files are generated for CMS operation in `public/_graphql/`, and +those *are* meant to be accessible through your webserver. +See [Tips and Tricks: Schema Introspection](../tips_and_tricks#schema-introspection) +to find out how to generate these files for your own schema. + +> [!CAUTION] +> While it is safe for you to view these files, you should not manually alter them. If you need to make a change +> to your GraphQL schema, you should [update the schema definition](configuring_your_schema) and rebuild your schema. + +### Further reading + +[CHILDREN] diff --git a/docs/en/01_getting_started/05_using_procedural_code.md b/docs/en/01_getting_started/05_using_procedural_code.md new file mode 100644 index 00000000..1e356f25 --- /dev/null +++ b/docs/en/01_getting_started/05_using_procedural_code.md @@ -0,0 +1,127 @@ +--- +title: Building a schema with procedural code +summary: Use PHP code to build your schema +icon: tools +--- + +# Getting started + +[CHILDREN asList] + +## Building a schema with procedural code + +Sometimes you need access to dynamic information to populate your schema. For instance, you +may have an enum containing a list of all the languages that are configured for the website. It +wouldn't make sense to build this statically. It makes more sense to have a single source +of truth. + +Internally, model-driven types that conform to the shapes of their models must use procedural +code to add fields, create operations, and more, because the entire premise of model-driven +types is that they're dynamic. So the procedural API for schemas has to be pretty robust. + +Lastly, if you just prefer writing PHP to writing YAML, this is a good option, too. + +> [!WARNING] +> One thing you cannot do with the procedural API, though it may be tempting, is define resolvers +> on the fly as closures. Resolvers must be static methods on a class, and are evaluated during +> the schema build. + +### Adding executable code + +We can use the `execute` section of the config to add an implementation of [`SchemaUpdater`](api:SilverStripe\GraphQL\Schema\Interfaces\SchemaUpdater). + +```yml +SilverStripe\GraphQL\Schema\Schema: + schemas: + default: + config: + execute: + - 'App\GraphQL\MySchema' +``` + +Now just implement the [`SchemaUpdater`](api:SilverStripe\GraphQL\Schema\Interfaces\SchemaUpdater) interface. + +```php +// app/src/GraphQL/MySchema.php +namespace App\GraphQL; + +use SilverStripe\GraphQL\Schema\Interfaces\SchemaUpdater; +use SilverStripe\GraphQL\Schema\Schema; + +class MySchema implements SchemaUpdater +{ + public static function updateSchema(Schema $schema): void + { + // update here + } +} +``` + +### Example code + +Most of the API should be self-documenting, and a good IDE should autocomplete everything you +need, but the key methods map directly to their configuration counterparts: + +- types (`$schema->addType(Type $type)`) +- models (`$schema->addModel(ModelType $type)`) +- queries (`$schema->addQuery(Query $query)`) +- mutations (`$schema->addMutation(Mutation $mutation)`) +- enums (`$schema->addEnum(Enum $type)`) +- interfaces (`$schema->addInterface(InterfaceType $type)`) +- unions (`$schema->addUnion(UnionType $type)`) + +```php +namespace App\GraphQL; + +use App\Model\MyDataObject; +use SilverStripe\GraphQL\Schema\Field\Query; +use SilverStripe\GraphQL\Schema\Interfaces\SchemaUpdater; +use SilverStripe\GraphQL\Schema\Schema; +use SilverStripe\GraphQL\Schema\Type\Type; + +class MySchema implements SchemaUpdater +{ + public static function updateSchema(Schema $schema): void + { + $countryType = Type::create('Country') + ->addField('name', 'String') + ->addField('code', 'String'); + $schema->addType($countryType); + + $countriesQuery = Query::create('readCountries', '[Country]!') + ->addArg('limit', 'Int'); + $schema->addQuery($countriesQuery); + + $myModel = $schema->createModel(MyDataObject::class) + ->addAllFields() + ->addAllOperations(); + $schema->addModel($myModel); + } +} +``` + +#### Chainable setters + +To make your code chainable, when adding fields and arguments, you can invoke a callback +to update it on the fly. + +```php +$countryType = Type::create('Country') + ->addField('name', 'String', function (Field $field) { + // Must be a callable. No inline closures allowed! + $field->setResolver([MyResolverClass::class, 'countryResolver']) + ->addArg('myArg', 'String!'); + }) + ->addField('code', 'String'); +$schema->addType($countryType); + +$countriesQuery = Query::create('readCountries', '[Country]!') + ->addArg('limit', 'Int', function (Argument $arg) { + $arg->setDefaultValue(20); + }); +$schema->addQuery($countriesQuery); +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/01_getting_started/06_deploying_the_schema.md b/docs/en/01_getting_started/06_deploying_the_schema.md new file mode 100644 index 00000000..e25b11f4 --- /dev/null +++ b/docs/en/01_getting_started/06_deploying_the_schema.md @@ -0,0 +1,88 @@ +--- +title: Deploying the schema +summary: Deploy your GraphQL schema to a test or production environment +icon: rocket +--- + +# Getting started + +[CHILDREN asList] + +## Deploying the schema + +One way or another, you must get the `.graphql-generated/` and `public/_graphql/` folders into your test and production environments for Silverstripe CMS (and your own custom queries) to work as expected. There are many ways to do so. The options below are listed in order of complexity. + +### Single-server hosting solutions with simple deployments {#simple-single-server} + +If you host your site on a single server and you always run `dev/build` during the deployment, then assuming you have set up permissions to allow the webserver to write to the `.graphql-generated/` and `public/_graphql/` folders, your GraphQL schema will be built for you as a side-effect of running `dev/build`. You don't need to do anything further. Note that if your schema is exceptionally large you may still want to read through the rest of the options below. + +### Options for any hosting solution + +#### Commit the schema to version control {#commit-to-vcs} + +A simplistic approach is to build the schema in your local development environment and add the `.graphql-generated/` and `public/_graphql/` folders to your version control system. With this approach you would most likely want to disable schema generation at `dev/build`. + +This approach has the advantage of being very simple, but it will pollute your commits with massive diffs for the generated code. + +> [!WARNING] +> Make sure you set your site to `live` mode and remove any `DEBUG_SCHEMA=1` from your `.env` file if it is there before generating the schema to be committed. + +#### Explicitly build the schema during each deployment {#build-during-deployment} + +Many projects will automatically run a `dev/build` whenever they deploy a site to their production environment. If that’s your case, then you can just let this process run normally and generate the `.graphql-generated/` and `public/_graphql/` folders for you. This will allow you to add these folders to your `.gitignore` file and avoid tracking the folder in your version control system. + +Be aware that for this approach to work, the process executing the `dev/build` must have write access to create the folders (or you must create those folders yourself, and give write access for those folders specifically), and for multi-server environments a `dev/build` or `dev/graphql/build` must be executed on each server hosting your site after each deployment. + +#### Use a CI/CD pipeline to build your schema {#using-ci-cd} + +Projects with more sophisticated requirements or bigger schemas exposing more than 100 `DataObject` classes may want to consider using a continuous-integration/continuous-deployment (CI/CD) pipeline to build their GraphQL schema. + +In this kind of setup, you would need to update your deployment script to run the `dev/graphql/build` command which builds the `.graphql-generated/` and `public/_graphql/` folders. In multi-server environments this must be executed on each server hosting your site. + +### Multi-server hosting solutions {#multi-server} + +If your site is hosted in an environment with multiple servers or configured to auto-scale with demand, there are some additional considerations. For example if you only generate the schema on one single server (i.e. via `dev/build` or `dev/graphql/build`), then the other servers won’t have a `.graphql-generated/` or `public/_graphql/` folder (or those folders will be empty if you manually created them). + +#### Rely on "on-demand" schema generation on the first GraphQL request {#on-demand} + +When the first GraphQL schema request occurs, `silverstripe/graphql` will attempt to build the `.graphql-generated/` and `public/_graphql/` folders "on-demand" if they're not already present on the server. Similarly, if the folders are present but empty, it will build the schema "on-demand". This will impose a one-time performance hit on the first GraphQL request. If your project defines multiple schemas, only the schema that is being accessed will be generated. + +For most common use cases, this process is relatively fast. For example, the GraphQL schema that is used to power the CMS can be built in about a quarter of a second. + +While benchmarking schema generation performance, we measured that a schema exposing 180 DataObjects with 1600 relations could be built on-demand in less than 6 seconds on a small AWS instance. + +Our expectation is that on-demand schema generation will be performant for most projects with small or medium schemas. + +> [!WARNING] +> Note that with this approach you will need to remove or empty the `.graphql-generated/` and `public/_graphql/` folders on each server for each deployment that includes a change to the schema definition, or you risk having an outdated GraphQL schema. The "on-demand" schema generation does not detect changes to the schema definition. + +#### Build the schema during/before deployment and share it across your servers {#multi-server-shared-dirs} + +If you have a particularly large schema, you may want to ensure it is always built before the first GraphQL request. It might make sense for you to sync your `.graphql-generated/` and `public/_graphql/` folders across all your servers using an EFS or similar mechanism. In that case you only need to run `dev/build` or `dev/graphql/build` on the server with the original folder - but bear in mind that this may have a performance impact. + +### Performance considerations when building the GraphQL schema {#performance-considerations} + +The main driver in the resources it takes to build a GraphQL schema is the number DataObjects and the number of exposed relations in that schema. In most cases, not all DataObjects in your database will be included in your schema - best practice is to only add classes to your schema definition if you will need to query them. DataObjects not included in your schema will not impact the time or memory needed to build it. + +As an indication, benchmarks were run on a t3.micro AWS instance. The results are in the table below. These numbers may not be representative of the performance in your own environment. If you intend to build large GraphQL schemas, you should take the time to run your own benchmarks and adjust your deployment strategy accordingly. + +DataObjects in schema | Build time (ms) | Memory use (MB) +-- | -- | -- +5 | 290 | 26 +10 | 310 | 26 +40 | 1060 | 38 +100 | 2160 | 58 +250 | 5070 | 114 +500 | 11,540 | 208 + +### Gotchas + +#### Permissions of the `.graphql-generated/` and `public/_graphql/` folders {#gotchas-permissions} + +The process that is generating these folders must have write permissions to create the folder and to update existing files. If different users are used to generate the folders, then you must make sure that each user retains write access on them. + +For example, if you manually run a `dev/build` under a foobar user, the folders will be owned by foobar. If your web server is running under the www-data user and you try to call `dev/graphql/build` in your browser, you might get an error if www-data doesn’t have write access. + +### Further reading + +[CHILDREN] diff --git a/docs/en/01_getting_started/index.md b/docs/en/01_getting_started/index.md new file mode 100644 index 00000000..ef0394b2 --- /dev/null +++ b/docs/en/01_getting_started/index.md @@ -0,0 +1,12 @@ +--- +title: Getting started +summary: Open up your first GraphQL server and build your schema +icon: rocket +--- + +# Getting started + +This section of the documentation will give you an overview of how to get a simple GraphQL API +up and running with some `DataObject` content. + +[CHILDREN] diff --git a/docs/en/02_working_with_dataobjects/01_adding_dataobjects_to_the_schema.md b/docs/en/02_working_with_dataobjects/01_adding_dataobjects_to_the_schema.md new file mode 100644 index 00000000..612da145 --- /dev/null +++ b/docs/en/02_working_with_dataobjects/01_adding_dataobjects_to_the_schema.md @@ -0,0 +1,485 @@ +--- +title: Adding DataObject models to the schema +summary: An overview of how the DataObject model can influence the creation of types, queries, and mutations +--- + +# Working with `DataObject` models + +[CHILDREN asList] + +## The `DataObject` model type + +In Silverstripe CMS projects, our data tends to be contained in DataObjects almost exclusively, +and the `silverstripe/graphql` schema API is designed so that adding `DataObject` content to your +GraphQL schema definition is fast and simple. + +### Using model types + +While it is possible to add DataObjects to your schema as generic types under the `types` +section of the configuration, and their associated queries and mutations under `queries` and +`mutations`, this will lead to a lot of boilerplate code and repetition. Unless you have some +really custom needs, a much better approach is to embrace *convention over configuration* +and use the `models` section of the config. + +**Model types** are types that rely on external classes to tell them who they are and what +they can and cannot do. The model can define and resolve fields, auto-generate queries +and mutations, and more. + +Naturally, this module comes bundled with a model type for subclasses of `DataObject`. + +Let's use the `models` config to expose some content. + +```yml +# app/_graphql/models.yml +Page: + fields: '*' + operations: '*' +``` + +The class `Page` is a subclass of `DataObject`, so the bundled model +type will kick in here and provide a lot of assistance in building out this part of our API. + +Case in point, by supplying a value of `*` for `fields` , we're saying that we want *all* of the fields +on the `Page` class. This includes the first level of relationships, as defined on `has_one`, `has_many`, +or `many_many`. + +> [!WARNING] +> Fields on relationships will not inherit the `*` fields selector, and will only expose their ID by default. +> To add additional fields for those relationships you will need to add the corresponding `DataObject` model types. + +The `*` value on `operations` tells the schema to create all available queries and mutations + for the DataObject, including: + +- `read` +- `readOne` +- `create` +- `update` +- `delete` + +Now that we've changed our schema, we need to build it using the `dev/graphql/build` command: + +`vendor/bin/sake dev/graphql/build schema=default` + +Now we can access our schema on the default GraphQL endpoint, `/graphql`. + +Test it out! + +> [!NOTE] +> Note the use of the default arguments on `date`. Fields created from `DBFields` +> generate their own default sets of arguments. For more information, see +> [DBFieldArgs](02_query_plugins.md#dbfieldargs). + +**A query:** + +```graphql +query { + readPages { + nodes { + title + content + ... on BlogPage { + date(format: NICE) + comments { + nodes { + comment + author { + firstName + } + } + } + } + } + } +} +``` + +> [!NOTE] +> The `... on BlogPage` syntax is called an [inline fragment](https://graphql.org/learn/queries/#inline-fragments). +> You can learn more about this syntax in the [Inheritance](inheritance) section. + +**A mutation:** + +```graphql +mutation { + createPage(input: { + title: "my page" + }) { + title + id + } +} +``` + +> [!TIP] +> Did you get a permissions error? Make sure you're authenticated as someone with appropriate access. + +### Configuring operations + +You may not always want to add *all* operations with the `*` wildcard. You can allow those you +want by setting them to `true` (or `false` to remove them). + +```yml +# app/_graphql/models.yml +Page: + fields: '*' + operations: + read: true + create: true + +App\Model\Product: + fields: '*' + operations: + '*': true + delete: false +``` + +Operations are also configurable, and accept a nested map of config. + +```yml +# app/_graphql/models.yml +Page: + fields: '*' + operations: + create: true + read: + name: getAllThePages +``` + +#### Customising the input types + +The input types, specifically in `create` and `update`, can be customised with a +list of fields. The list can include explicitly *disallowed* fields. + +```yml +# app/_graphql/models.yml +Page: + fields: '*' + operations: + create: + fields: + title: true + content: true + update: + fields: + '*': true + immutableField: false +``` + +### Adding more fields + +Let's add some more DataObjects, but this time, we'll only add a subset of fields and operations. + +```yml +# app/_graphql/models.yml +Page: + fields: '*' + operations: '*' + +App\Model\Product: + fields: + onSale: true + title: true + price: true + operations: + delete: true + +App\Model\ProductCategory: + fields: + title: true + featured: true +``` + +> [!WARNING] +> A couple things to note here: +> +> - By assigning a value of `true` to the field, we defer to the model to infer the type for the field. To override that, we can always add a `type` property: +> +> ```yml +> App\Model\Product: +> fields: +> onSale: +> type: Boolean +> ``` +> +> - The mapping of our field names to the `DataObject` property is case-insensitive. It is a +> convention in GraphQL APIs to use lowerCamelCase fields, so this is given by default. + +### Bulk loading models + +It's likely that in your application you have a whole collection of classes you want exposed to the API with roughly +the same fields and operations exposed on them. It can be really tedious to write a new declaration for every single +`DataObject` in your project, and as you add new ones, there's a bit of overhead in remembering to add it to the +GraphQL schema. + +Common use cases might be: + +- Add everything in `App\Model` +- Add every implementation of `BaseElement` +- Add anything with the `Versioned` extension +- Add everything that matches `src/*Model.php` + +You can create logic like this using the `bulkLoad` configuration file, which allows you to specify groups of directives +that load a bundle of classes and apply the same set of configuration to all of them. + +```yml +# app/_graphql/bulkLoad.yml +elemental: # An arbitrary key to define what these directives are doing + # Load all elemental blocks except MySecretElement + load: + inheritanceLoader: + include: + - DNADesign\Elemental\Models\BaseElement + exclude: + - App\Model\Elemental\MySecretElement + # Add all fields and read operations + apply: + fields: + '*': true + operations: + read: true + readOne: true + +app: + # Load everything in our App\Model\ namespace that has the Versioned extension + # unless the filename ends with .secret.php + load: + namespaceLoader: + include: + - App\Model\* + extensionLoader: + include: + - SilverStripe\Versioned\Versioned + filepathLoader: + exclude: + - app/src/Model/*.secret.php + apply: + fields: + '*': true + operations: + '*': true +``` + +By default, four loaders are provided to you to help gather specific classnames: + +#### By namespace + +- **Identifier**: `namespaceLoader` +- **Description**: Include or exclude classes based on their namespace +- **Example**: `include: [App\Model\*]` + +#### By inheritance + +- **Identifier**: `inheritanceLoader` +- **Description**: Include or exclude everything that matches or extends a given base class +- **Example**: `include: [DNADesign\Elemental\Models\BaseElement]` + +#### By applied extension + +- **Identifier**: `extensionLoader` +- **Description**: Include or exclude any class that has a given extension applied +- **Example**: `include: [SilverStripe\Versioned\Versioned]` + +#### By filepath + +- **Identifier**: `filepathLoader` +- **Description**: Include or exclude any classes in files matching a given glob expression, relative to the base path. Module syntax is allowed. +- **Examples**: + - `include: [ 'src/Model/*.model.php' ]` + - `include: [ 'somevendor/somemodule: src/Model/*.php' ]` + +> [!NOTE] +> `exclude` directives will always supersede `include` directives. + +Each block starts with a collection of all classes that gets filtered as each loader runs. The primary job +of a loader is to *remove* classes from the entire collection, not add them in. + +> [!NOTE] +> If you find that this paints with too big a brush, you can always override individual models explicitly in `models.yml`. +> The bulk loaders run *before* the `models.yml` config is loaded. + +#### `DataObject` subclasses are the default starting point + +Because this is Silverstripe CMS, and it's likely that you're using `DataObject` models only, the bulk loaders start with an +initial filter which is defined as follows: + +```yml +inheritanceLoader: + include: + - SilverStripe\ORM\DataObject +``` + +This ensures that at a bare minimum, you're always filtering by `DataObject` classes *only*. If, for some reason, you +have a non-`DataObject` class in `App\Model\*`, it will automatically be filtered out due to this default setting. + +This default is configured in the `defaultBulkLoad` setting in your schema config. Should you ever want to disable +that, just set it to `false`. + +```yml +# app/_graphql/config.yml +defaultBulkLoad: false +``` + +#### Creating your own bulk loader + +Bulk loaders must extend [`AbstractBulkLoader`](api:SilverStripe\GraphQL\Schema\BulkLoader\AbstractBulkLoader). They +need to declare an identifier (e.g. `namespaceLoader`) to be referenced in the config, and they must implement +[`collect()`](api:SilverStripe\GraphQL\Schema\BulkLoader\AbstractBulkLoader::collect()) which returns a new `Collection` +instance once the loader has done its work parsing through the `include` and `exclude` directives. + +Bulk loaders are automatically registered. Just creating the class is all you need to do to have it available for use +in your `bulkLoad.yml` file. + +### Customising model fields + +You don't have to rely on the model to tell you how fields should resolve. Just like +generic types, you can customise them with arguments and resolvers. + +```yml +# app/_graphql/models.yml +App\Model\Product: + fields: + title: + type: String + resolver: ['App\GraphQL\Resolver\ProductResolver', 'resolveSpecialTitle'] + 'price(currency: String = "NZD")': true +``` + +For more information on custom arguments and resolvers, see the +[adding arguments](../working_with_generic_types/adding_arguments) and +[resolver discovery](../working_with_generic_types/resolver_discovery) documentation. + +### Excluding or customising "*" declarations + +You can use `*` as a field or operation, and anything that follows it will override the +all-inclusive collection. This is almost like a spread operator in JavaScript: + +```js +const newObj = { ...oldObj, someProperty: 'custom' }; +``` + +Here's an example: + +```yml +# app/_graphql/models.yml +Page: + fields: + '*': true # Get everything + sensitiveData: false # hide this field + 'content(summaryLength: Int)': true # add an argument to this field + operations: + '*': true + read: + plugins: + paginateList: false # don't paginate the read operation +``` + +### Disallowed fields {#disallowed-fields} + +While selecting all fields via `*` is useful, there are some fields that you +don't want to accidentally expose, especially if you're a module author +and expect models within this code to be used through custom GraphQL endpoints. +For example, a module might add a secret "preview token" to each `SiteTree`. +A custom GraphQL endpoint might have used `fields: '*'` on `SiteTree` to list pages +on the public site, which now includes a sensitive field. + +The `graphql_blacklisted_fields` property on `DataObject` allows you to +disallow fields globally for all GraphQL schemas. +This block list applies for all operations (read, update, etc). + +```yml +# app/_config/graphql.yml +SilverStripe\CMS\Model\SiteTree: + graphql_blacklisted_fields: + myPreviewTokenField: true +``` + +### Model configuration + +There are several settings you can apply to your model class (typically `DataObjectModel`), +but because they can have distinct values *per schema*, the standard `_config` layer is not +an option. Model configuration has to be done within the schema config in the `modelConfig` +subsection. + +### Customising the type name + +Most `DataObject` classes are namespaced, so converting them to a type name ends up +being very verbose. As a default, the `DataObjectModel` class will use the "short name" +of your `DataObject` as its typename (see: [`ClassInfo::shortName()`](api:SilverStripe/Core/ClassInfo::shortName())). +That is, `App\Model\Product` becomes `Product`. + +Given the brevity of these type names, it's not inconceivable that you could run into naming +collisions, particularly if you use feature-based namespacing. Fortunately, there are +hooks you have available to help influence the typename. + +#### Explicit type mapping + +You can explicitly provide type name for a given class using the `typeMapping` setting in your schema config. + +```yml +# app/_graphql/config.yml +typeMapping: + App\PageType\Page: SpecialPage +``` + +It may be necessary to use `typeMapping` in projects that have a lot of similar class names in different namespaces, which will cause a collision +when the type name is derived from the class name. The most case for this +is the `Page` class, which may be both at the root namespace and in your +app namespace, e.g. `App\PageType\Page`. + +#### The type formatter + +The `type_formatter` is a callable that can be set on the `DataObjectModel` config. It takes +the `$className` as a parameter. + +Let's turn the type for `App\Model\Product` from `Product` into the more specific `AppProduct` + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + type_formatter: ['App\GraphQL\Formatter', 'formatType'] +``` + +> [!NOTE] +> In the above example, `DataObject` is the result of [`DataObjectModel::getIdentifier()`](api:SilverStripe\GraphQL\Schema\DataObject::getIdentifier()). +> Each model class must declare one of these. + +The formatting function in your `App\GraphQL\Formatter` class could look something like: + +```php +namespace App\GraphQL; + +class Formatter +{ + public static function formatType(string $className): string + { + $parts = explode('\\', $className); + if (count($parts) === 1) { + return $className; + } + $first = reset($parts); + $last = end($parts); + + return $first . $last; + } +} +``` + +#### The type prefix + +You can also add prefixes to all your `DataObject` types. This can be a scalar value or a callable, +using the same signature as `type_formatter`. + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + type_prefix: 'App' +``` + +This would automatically set the type name for your `App\Model\Product` class to `AppProduct` +without needing to declare a `type_formatter`. + +### Further reading + +[CHILDREN] diff --git a/docs/en/02_working_with_dataobjects/02_query_plugins.md b/docs/en/02_working_with_dataobjects/02_query_plugins.md new file mode 100644 index 00000000..36f76585 --- /dev/null +++ b/docs/en/02_working_with_dataobjects/02_query_plugins.md @@ -0,0 +1,560 @@ +--- +title: DataObject query plugins +summary: Learn about some of the useful goodies that come pre-packaged with DataObject queries +--- + +# Working with `DataObject` models + +[CHILDREN asList] + +## `DataObject` query plugins + +This module has a [plugin system](../plugins) that affords extensibility to queries, mutations, +types, fields, and just about every other thread of the schema. Model types can define default +plugins to include, and for `DataObject` queries, these include: + +- `filter` +- `sort` +- `dbFieldArgs` +- `paginateList` +- `inheritance` +- `canView` (read, readOne) +- `firstResult` (readOne) + +### The pagination plugin + +The pagination plugin augments your queries in two main ways: + +- Adding `limit` and `offset` arguments +- Wrapping the return type in a "connection" type with the following fields: + - `nodes: '[YourType]'` + - `edges: '[{ node: YourType }]'` + - `pageInfo: '{ hasNextPage: Boolean, hasPreviousPage: Boolean: totalCount: Int }'` + +Let's test it out: + +```graphql +query { + readPages(limit: 10, offset: 20) { + nodes { + title + } + edges { + node { + title + } + } + pageInfo { + totalCount + hasNextPage + hasPrevPage + } + } +} +``` + +> [!WARNING] +> If you're not familiar with the jargon of `edges` and `node`, don't worry too much about it +> for now. It's just a pretty well-established convention for pagination in GraphQL, mostly owing +> to its frequent use with [cursor-based pagination](https://graphql.org/learn/pagination/), which +> isn't something we do in Silverstripe CMS. You can ignore `edges.node` and just use `nodes` if +> you want to. + +#### Limiting pagination + +To change the limit for items per page for a given type, you can set the `maximumLimit` property on the `paginateList` plugin in the schema: + +```yml +# app/_graphql/models.yml +MyProject\Models\ProductCategory: + operations: + read: + plugins: + paginateList: + maximumLimit: 10 +``` + +To change the default limit globally, set the max_limit configuration on the `PaginationPlugin` itself: + +```yml +SilverStripe\GraphQL\Schema\Plugin\PaginationPlugin: + max_limit: 10 +``` + +> [!WARNING] +> If you want to *increase* the limit beyond the default value, you will also need to set a new `default_limit` configuration value on the `PaginationPlugin`. + +#### Disabling pagination + +Just set it to `false` in the configuration. + +```yml +# app/_graphql/models.yml +App\Model\ProductCategory: + operations: + read: + plugins: + paginateList: false +``` + +To disable pagination globally, use `modelConfig`: + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + operations: + read: + plugins: + paginateList: false +``` + +### The filter plugin + +The filter plugin ([`QueryFilter`](api:SilverStripe\GraphQL\Schema\DataObject\Plugin\QueryFilter)) adds a +special `filter` argument to the `read` and `readOne` operations. + +```graphql +query { + readPages( + filter: { title: { eq: "Blog" } } + ) { + nodes { + title + created + } + } +} +``` + +In the above example, the `eq` is known as a "comparator". There are several of these +included with the the module, including: + +- `eq` (exact match) +- `ne` (not equal) +- `contains` (fuzzy match) +- `gt` (greater than) +- `lt` (less than) +- `gte` (greater than or equal) +- `lte` (less than or equal) +- `in` (in a given list) +- `startswith` (starts with) +- `endswith` (ends with) + +Example: + +```graphql +query { + readPages ( + filter: { + title: { ne: "Home" }, + created: { gt: "2020-06-01", lte: "2020-09-01" } + } + ) { + nodes { + title + created + } + } +} +``` + +> [!WARNING] +> While it is possible to filter using multiple comparators, segmenting them into +> disjunctive groups (e.g. "OR" and "AND" clauses) is not yet supported. + +Nested fields are supported by default: + +```graphql +query { + readProductCategories( + filter: { + products: { + reviews: { + rating: { gt: 3 }, + comment: { contains: "awesome" }, + author: { ne: "Me" } + } + } + } + ) { + nodes { + title + } + } +} +``` + +Filters are only querying against the database by default - it is not possible to filter by +fields with custom resolvers. + +#### Customising the filter fields + +By default, all fields on the DataObject, including relationships, are included. To customise +this, just add a `fields` config to the plugin definition: + +```yml +# app/_graphql/models.yml +App\Model\ProductCategory: + fields: + title: true + featured: true + operations: + read: + plugins: + filter: + fields: + title: true +``` + +> [!NOTE] +> You can also add all fields with `'*': true`, just like with standard model definitions. + +##### Adding non-native filter fields + +Sometimes you may want to add a filter field that stems from a custom getter, or a complex computation that +isn't easily addressed by simple field comparisons. For cases like this, you can add the custom field as long +as you provide instructions on how to resolve it. + +```yml +# app/_graphql/models.yml +App\Model\Product: + fields: + title: true + price: true + operations: + read: + plugins: + filter: + fields: + title: true + hasReviews: true + resolve: + hasReviews: + type: Boolean + resolver: ['App\GraphQL\Resolver\ProductResolver', 'resolveHasReviewsFilter'] +``` + +We've added the custom field `hasReviews` as a custom field in the `fields` section of the plugin config. A custom field +like this that does not exist on the `Product` dataobject will cause the plugin to throw unless you've provided +a `resolve` directive for it. + +In the `resolve` section, we need to provide two vital pieces of information: + +- What data type will the filter value be? (boolean in this case) +- Where is the code that will apply this filter? (A static function in our `ProductResolver` class) + +The code to resolve the filter will get two relevant pieces of information in its `$context` parameter: + +- `filterComparator`: e.g. "eq", "ne", "gt", etc. +- `filterValue`: What value we're comparing (true or false, in this case, since it's a boolean) + +Here's how we can resolve this custom filter: + +```php +// app/src/GraphQL/Resolver/Resolver.php +namespace App\GraphQL\Resolver; + +use Exception; + +class ProductResolver +{ + public static function resolveHasReviewsFilter(Filterable $list, array $args, array $context) + { + $onlyWithReviews = $context['filterValue']; + $comparator = $context['filterComparator']; + + if (!in_array($comparator, ['eq', 'ne'])) { + throw new Exception('Invalid comparator for hasReviews: ' . $comparator); + } + if ($comparator === 'ne') { + $onlyWithReviews = !$onlyWithReviews; + } + + return $onlyWithReviews + ? $list->filter('Reviews.Count():GreaterThan', 0) + : $list->filter('Reviews.Count()', 0); + } +} +``` + +> [!NOTE] +> Custom filter fields are also a good opportunity to implement something like `filterByCallback` on your list for +> particularly complex computations that cannot be done at the database level. + +#### Disabling the filter plugin + +Just set it to `false` in the configuration. + +```yml +# app/_graphql/models.yml +App\Model\ProductCategory: + operations: + read: + plugins: + filter: false +``` + +To disable filtering globally, use `modelConfig`: + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + operations: + read: + plugins: + filter: false +``` + +### The sort plugins + +The sort plugin ([`QuerySort`](api:SilverStripe\GraphQL\Schema\DataObject\Plugin\QuerySort)) adds a +special `sort` argument to the `read` and `readOne` operations. + +```graphql +query { + readPages ( + sort: { created: DESC } + ) { + nodes { + title + created + } + } +} +``` + +Nested fields are supported by default, but only for linear relationships (e.g. `has_one`): + +```graphql +query { + readProducts( + sort: { + primaryCategory: { + lastEdited: DESC + } + } + ) { + nodes { + title + } + } +} +``` + +In addition, you can use the field sorting plugin ([`SortPlugin`](api:SilverStripe\GraphQL\Schema\Plugin\SortPlugin)) to sort fields that represent `has_many` and `many_many` relationships. To do this, simply add the desired fields to the query, as well as the `sort` argument to these fields. It is also necessary to update the scheme by adding a `sorter` plugin to those fields that need to be sorted. + +Example how to use SortPlugin. + +```graphql +query { + readPages ( + sort: { created: DESC } + ) { + nodes { + title + created + hasManyFilesField (sort: { parentFolderID: DESC, title: ASC }) { + name + } + } + } +} +``` + +```yml +# app/_graphql/models.yml +Page: + operations: + read: + plugins: + sort: + before: paginateList + fields: + created: true + fields: + title: true + created: true + hasManyFilesField: + fields: + name: true + plugins: + sorter: + fields: + title: true + parentFolderID: true +``` + +#### Customising the sort fields + +By default, all fields on the DataObject, including `has_one` relationships, are included. +To customise this, just add a `fields` config to the plugin definition: + +```yml +# app/_graphql/models.yml +App\Model\ProductCategory: + fields: + title: true + featured: true + operations: + read: + plugins: + sort: + fields: + title: true +``` + +#### Disabling the sort plugin + +Just set it to `false` in the configuration. + +```yml +# app/_graphql/models.yml +App\Model\ProductCategory: + operations: + read: + plugins: + sort: false +``` + +To disable sort globally, use `modelConfig`: + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + operations: + read: + plugins: + sort: false +``` + +### The `DBFieldArgs` plugin {#dbfieldargs} + +When fields are introspected from a model and reference a `DBField` instance, +they get populated with a default set of arguments that map to methods on that +`DBField` class, for instance `$field->Nice()` or `$field->LimitSentences(4)`. + +Let's have a look at this query: + +```graphql +query { + readPages { + nodes { + content(format: LIMIT_SENTENCES, limit: 4) + created(format: NICE) + + ... on BlogPage { + introText(format: FIRST_PARAGRAPH) + publishDate(format: CUSTOM, customFormat: "dd/MM/yyyy") + } + } + } +} +``` + +The primary field types that are affected by this include: + +- `DBText` (including `DBHTMLText`) +- `DBDate` (including `DBDatetime`) +- `DBTime` +- `DBDecimal` +- `DBFloat` + +#### All available arguments + +##### `DBText` + +- `format: CONTEXT_SUMMARY` (optional "limit" arg) +- `format: FIRST_PARAGRAPH` +- `format: LIMIT_SENTENCES` (optional "limit" arg) +- `format: SUMMARY` (optional "limit" arg) +- `parseShortcodes: Boolean` (DBHTMLText only) + +##### `DBDate` + +- `format: TIMESTAMP` +- `format: NICE` +- `format: DAY_OF_WEEK` +- `format: MONTH` +- `format: YEAR` +- `format: SHORT_MONTH` +- `format: DAY_OF_MONTH` +- `format: SHORT` +- `format: LONG` +- `format: FULL` +- `format: CUSTOM` (requires `customFormat: String` arg) + +##### `DBTime` + +- `format: TIMESTAMP` +- `format: NICE` +- `format: SHORT` +- `format: CUSTOM` (requires `customFormat: String` arg) + +##### `DBDecimal` + +- `format: INT` + +##### `DBFloat` + +- `format: NICE` +- `format: ROUND` +- `format: NICE_ROUND` + +#### Enum naming strategy and deduplication + +By default, auto-generated Enum types will use as generic a name as possible using the convention `Enum` (e.g. +`OrderStatusEnum`). On occasion, this may collide with other types (e.g. `OptionsEnum` is quite generic and likely to be used already). +In this case, the second enum generated will use `Enum` (e.g. `MyTypeOptionsEnum`). + +If an enum already exists with the same fields and name, it will be reused. For instance, if `OptionsEnum` +is found and has exactly the same defined values (in the same order) as the Enum being generated, +it will be reused rather than proceeding to the deduplication strategy. + +#### Custom enum names + +You can specify custom enum names in the plugin config: + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + plugins: + dbFieldTypes: + enumTypeMapping: + MyType: + myEnumField: SomeCustomTypeName +``` + +You can also specify enums to be ignored. (`ClassName` does this on all DataObjects to prevent inheritance +issues) + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + plugins: + dbFieldTypes: + ignore: + MyType: + myEnumField: true +``` + +### The getByLink plugin + +The [`LinkablePlugin`](api:SilverStripe\GraphQL\CMS\LinkablePlugin) provides a `getByLink` query + +This queries return a single `DataObject` model (e.g. `readOne`) get a new query argument +called `link` (configurable on the `field_name` property of `LinkablePlugin`). + +```graphql +readOneSiteTree(link: "/about-us" ) { + title +} +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/02_working_with_dataobjects/03_permissions.md b/docs/en/02_working_with_dataobjects/03_permissions.md new file mode 100644 index 00000000..b5582a49 --- /dev/null +++ b/docs/en/02_working_with_dataobjects/03_permissions.md @@ -0,0 +1,64 @@ +--- +title: DataObject operation permissions +summary: A look at how permissions work for DataObject queries and mutations +--- + +# Working with `DataObject` models + +[CHILDREN asList] + +## `DataObject` operation permissions + +Any of the operations that come pre-configured for DataObjects are secured by the appropriate permissions +by default. +Please see [Model-Level Permissions](https://docs.silverstripe.org/en/developer_guides/model/permissions/#model-level-permissions) for more information. + +### Mutation permssions + +> [!NOTE] +> When mutations fail due to permission checks, they throw a [`PermissionsException`](api:SilverStripe\GraphQL\Schema\Exception\PermissionsException). + +For `create`, if a singleton instance of the record being created doesn't pass a `canCreate($member)` check, +the mutation will throw. + +For `update`, if the record matching the given ID doesn't pass a `canEdit($member)` check, the mutation will +throw. + +For `delete`, if any of the given IDs don't pass a `canDelete($member)` check, the mutation will throw. + +### Query permissions + +Query permissions are a bit more complicated, because they can either be in list form, (paginated or not), +or a single item. Rather than throw, these permission checks work as filters. + +> [!WARNING] +> It is critical that you have a `canView()` method defined on your DataObjects. Without this, only admins are +> assumed to have permission to view a record. + +For `read` and `readOne` a plugin called `canView` will filter the result set by the `canView($member)` check. + +> [!WARNING] +> When paginated items fail a `canView()` check, the `pageInfo` field is not affected. +> Limits and pages are determined through database queries. It would be too inefficient to perform in-memory checks on large data sets. +> This can result in pages showing a smaller number of items than what the page should contain, but keeps the pagination calls consistent +> for `limit` and `offset` parameters. + +### Disabling query permissions + +Though not recommended, you can disable query permissions by setting their plugins to `false`. + +```yml +# app/_graphql/models.yml +Page: + operations: + read: + plugins: + canView: false + readOne: + plugins: + canView: false +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/02_working_with_dataobjects/04_inheritance.md b/docs/en/02_working_with_dataobjects/04_inheritance.md new file mode 100644 index 00000000..07ac51ba --- /dev/null +++ b/docs/en/02_working_with_dataobjects/04_inheritance.md @@ -0,0 +1,483 @@ +--- +title: DataObject inheritance +summary: Learn how inheritance is handled in DataObject model types +--- + +# Working with `DataObject` models + +[CHILDREN asList] + +## `DataObject` inheritance + +The inheritance pattern used in the ORM is a tricky thing to navigate in a GraphQL API, mostly owing +to the fact that there is no concept of inheritance in GraphQL types. The main tools we have at our +disposal are [interfaces](https://graphql.org/learn/schema/#interfaces) and [unions](https://graphql.org/learn/schema/#union-types) +to deal with this type of architecture, and we leverage both of them when working with DataObjects. + +### Key concept: querying types that have descendants + +When you query a type that has descendant classes, you are by definition getting a polymorphic return. There +is no guarantee that each result will be of one specific type. Take this example: + +```graphql +query { + readPages { + nodes { + title + content + } + } +} +``` + +This is fine when the two fields are common to across the entire inheritance chain, but what happens +when we need the `date` field on `BlogPage`? + +```graphql +query { + readPages { + nodes { + title + content + date # fails! + } + } +} +``` + +To solve this problem, the GraphQL module will automatically change these types of queries to return interfaces. + +```graphql +query { + readPages { + nodes { # <--- [PageInterface] + title + content + } + } +} +``` + +Now, in order to query fields that are specific to `BlogPage`, we need to use an +[inline fragment](https://graphql.org/learn/queries/#inline-fragments) to select them. + +In the below example, we are querying `title` and `content` on all page types, but we only query `heroImage` +on `HomePage` objects, and we query `date` and `author` only for `BlogPage` objects. + +```graphql +query { + readPages { + nodes { + title # Common field + content # Common field + ... on HomePage { + heroImage { + url + } + } + ... on BlogPage { + date + author { + firstName + } + } + } + } +} +``` + +So the fields that are common to every possible type in the result set can be directly selected (with no `...on` +syntax), because they're part of the common interface. They're guaranteed to exist on every type. But for fields +that only appear on some types, we need to be explicit. + +Now let's take this a step further. What if there's another class in between? Imagine this ancestry: + +```text +Page + -> EventPage extends Page + -> ConferencePage extends EventPage + -> WebinarPage extends EventPage +``` + +We can use the intermediary interface `EventPageInterface` to consolidate fields that are unique to +`ConferencePage` and `WebinarPage`. + +```graphql +query { + readPages { + nodes { + title # Common to all types + content # Common to all types + ... on EventPageInterface { + # Common fields for WebinarPage, ConferencePage, EventPage + numberOfTickets + featuredSpeaker { + firstName + email + } + } + ... on WebinarPage { + zoomLink + } + ... on ConferencePage { + venueSize + } + ... on BlogPage { + date + author { + firstName + } + } + } + } +} +``` + +You can think of interfaces in this context as abstractions of *parent classes* - and the best part is +they're generated automatically. We don't need to manually define or implement the interfaces. + +> [!NOTE] +> A good way to determine whether you need an inline fragment is to ask +> "can this field appear on any other types in the query?" If the answer is yes, you want to use an interface, +> which is usually the parent class with the "Interface" suffix. + +### Inheritance: a deep dive + +There are several ways inheritance is handled at build time: + +- Implicit field / type exposure +- Interface generation +- Assignment of generated interfaces to types +- Assignment of generated interfaces to queries + +We'll look at each of these in detail. + +#### Inherited fields / implicit exposures + +Here are the rules for how inheritance affects types and fields: + +- Exposing a type implicitly exposes all of its ancestors. +- Ancestors receive any fields exposed by their descendants, if applicable. +- Exposing a type applies all of its fields to descendants only if they are explicitly exposed also. + +All of this is serviced by: [`InheritanceBuilder`](api:SilverStripe\GraphQL\Schema\DataObject\InheritanceBuilder) + +##### Example {#fields-example} + +```yml +App\PageType\BlogPage: + fields: + title: true + content: true + date: true + +App\PageType\GalleryPage: + fields: + images: true + urlSegment: true +``` + +This results in those two types being exposed with the fields as shown, but also results in a `Page` type: + +```graphql +type Page { + id: ID! # always exposed + title: String + content: String + urlSegment: String +} +``` + +#### Interface generation + +Any type that's part of an inheritance chain will generate interfaces. Each applicable ancestral interface is added +to the type. Like the type inheritance pattern shown above, interfaces duplicate fields from their ancestors as well. + +Additionally, a **base interface** is provided for all types containing common fields across the entire `DataObject` +schema. + +All of this is serviced by: [`InterfaceBuilder`](api:SilverStripe\GraphQL\Schema\DataObject\InterfaceBuilder) + +##### Example {#interface-example} + +```text +Page + -> BlogPage extends Page + -> EventsPage extends Page + -> ConferencePage extends EventsPage + -> WebinarPage extends EventsPage +``` + +This will create the following interfaces (assuming the fields below are exposed): + +```graphql +interface PageInterface { + id: ID! + title: String + content: String +} + +interface BlogPageInterface { + id: ID! + title: String + content: String + date: String +} + +interface EventsPageInterface { + id: ID! + title: String + content: String + numberOfTickets: Int +} + +interface ConferencePageInterface { + id: ID! + title: String + content: String + numberOfTickets: Int + venueSize: Int + venurAddress: String +} + +interface WebinarPageInterface { + id: ID! + title: String + content: String + numberOfTickets: Int + zoomLink: String +} +``` + +#### Interface assignment to types + +The generated interfaces then get applied to the appropriate types, like so: + +```graphql +type Page implements PageInterface {} +type BlogPage implements BlogPageInterface & PageInterface {} +type EventsPage implements EventsPageInterface & PageInterface {} +type ConferencePage implements ConferencePageInterface & EventsPageInterface & PageInterface {} +type WebinarPage implements WebinarPageInterface & EventsPageInterface & PageInterface {} +``` + +Lastly, for good measure, we create a `DataObjectInterface` that applies to everything. + +```graphql +interface DataObjectInterface { + id: ID! + # Any other fields you've explicitly exposed in config.modelConfig.DataObject.base_fields +} +``` + +```graphql +type Page implements PageInterface & DataObjectInterface {} +``` + +#### Interface assignment to queries + +Queries, both at the root and nested as fields on types, will have their types +updated if they refer to a type that has had any generated interfaces added to it. + +```graphql +type Query { + readPages: [Page] +} + +type BlogPage { + download: File +} +``` + +Becomes: + +```graphql +type Query { + readPages: [PageInterface] +} + +type BlogPage { + download: FileInterface +} +``` + +All of this is serviced by: [`InterfaceBuilder`](api:SilverStripe\GraphQL\Schema\DataObject\InterfaceBuilder) + +#### Elemental + +This section refers to types added via `dnadesign/silverstripe-elemental`. + +Almost by definition, content blocks are always abstractions. You're never going to query for a `BaseElement` type +specifically. You're always asking for an assortment of its descendants, which adds a lot of polymorphism to +the query. + +```graphql +query { + readElementalPages { + nodes { + elementalArea { + elements { + nodes { + title + id + ... on ContentBlock { + html + } + ... on CTABlock { + link + linkText + } + } + } + } + } + } +} +``` + +> [!NOTE] +> The above example shows a query for elements on all elemental pages - but for most situations you will +> probably only want to query the elements on one page at a time. + +### Optional: use unions instead of interfaces + +You can opt out of using interfaces as your return types for queries and instead use a union of all the concrete +types. This comes at a cost of potentially breaking your API unexpectedly (described below), so it is not enabled by +default. There is no substantive advantage to using unions over interfaces for your query return types. It would +typically only be done for conceptual purposes. + +To use unions, turn on the `useUnionQueries` setting. + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + plugins: + inheritance: + useUnionQueries: true +``` + +This means that models that have descendants will create unions that include themselves and all of their descendants. +For queries that return those models, a union is put in its place. + +Serviced by: [`InheritanceUnionBuilder`](api:SilverStripe\GraphQL\Schema\DataObject\InheritanceUnionBuilder) + +#### Example {#unions-example} + +```text +type Page implements PageInterface {} +type BlogPage implements BlogPageInterface & PageInterface {} +type EventsPage implements EventsPageInterface & PageInterface {} +type ConferencePage implements ConferencePageInterface & EventsPageInterface & PageInterface {} +type WebinarPage implements WebinarPageInterface & EventsPageInterface & PageInterface {} +``` + +Creates the following unions: + +```text +union PageInheritanceUnion = Page | BlogPage | EventsPage | ConferencePage | WebinarPage +union EventsPageInheritanceUnion = EventsPage | ConferencePage | WebinarPage +``` + +"Leaf" models like `BlogPage`, `ConferencePage`, and `WebinarPage` that have no exposed descendants will not create +unions, as they are functionally useless. + +This means that queries for `readPages` and `readEventsPages` will now return unions. + +```graphql +query { + readPages { + nodes { + ... on PageInterface { + id # in theory, this common field could be done on DataObjectInterface, but that gets a bit verbose + title + content + } + ... on EventsPageInterface { + numberOfTickets + } + ... on BlogPage { + date + } + ... on WebinarPage { + zoomLink + } + } + } +} +``` + +#### Lookout for the footgun + +Because unions are force substituted for your queries when a model has exposed descendants, it is possible that adding +a subclass to a model will break your queries without much warning to you. + +For instance: + +```php +namespace App\Model; + +class Product extends DataObject +{ + private static $db = ['Price' => 'Int']; +} +``` + +We might query this with: + +```graphql +query { + readProducts { + nodes { + price + } + } +} +``` + +But if we create a subclass for product and expose it to GraphQL: + +```php +namespace App\Model; + +class DigitalProduct extends Product +{ + private static $db = ['DownloadURL' => 'Varchar']; +} +``` + +Now our query breaks: + +```graphql +query { + readProducts { + nodes { + price # Error: Field "price" not found on ProductInheritanceUnion + } + } +} +``` + +We need to revise it: + +```graphql +query { + readProducts { + nodes { + ... on ProductInterface { + price + } + ... on DigitalProduct { + downloadUrl + } + } + } +} +``` + +If we use interfaces, this won't break because the `price` field will be on `ProductInterface` +which makes it directly queryable (without requiring the inline fragment). + +### Further reading + +[CHILDREN] diff --git a/docs/en/02_working_with_dataobjects/05_versioning.md b/docs/en/02_working_with_dataobjects/05_versioning.md new file mode 100644 index 00000000..55b0998a --- /dev/null +++ b/docs/en/02_working_with_dataobjects/05_versioning.md @@ -0,0 +1,190 @@ +--- +title: Versioned content +summary: A guide on how DataObject models with the Versioned extension behave in GraphQL schemas +--- + +# Working with `DataObject` models + +[CHILDREN asList] + +## Versioned content + +For the most part, if your `DataObject` has the `Versioned` extension applied, there is nothing you need to do +explicitly - but be aware that it will affect the operations and fields of your type. +You can also [disable](#disable) versioning for your schema if you don't need it. + +See [model versioning](https://docs.silverstripe.org/en/developer_guides/model/versioning/#versioning) for general information about versioning your DataObjects. + +### Versioned plugins + +There are several plugins provided that affect how versioned DataObjects +appear in the schema. These include: + +- The `versioning` plugin, applied to the `DataObject` type +- The `readVersion` plugin, applied to the queries for the DataObject +- The `unpublishOnDelete` plugin, applied to the delete mutation + +Let's walk through each one. + +#### The `versioning` plugin + +Defined in the [`VersionedDataObject`](api:SilverStripe\GraphQL\Modules\Versioned\Plugins\VersionedDataObject) class, this plugin adds +several fields to the `DataObject` type, including: + +##### The `version` field + +The `version` field on your `DataObject` will include the following fields: + +- `author`: Member (Object -- the author of the version) +- `publisher`: Member (Object -- the publisher of the version) +- `published`: Boolean (True if the version is published) +- `liveVersion`: Boolean (True if the version is the one that is currently live) +- `latestDraftVersion`: Boolean (True if the version is the latest draft version) + +> [!NOTE] +> Note that `author` and `publisher` are in relation to the given *version* of the object - these are +> not necessarily the same as the author and publisher of the *original* record (i.e. the author may not +> be the person who created the object, they're the person who saved a specific version of it). + +Let's look at it in context: + +```graphql +query readPages { + nodes { + title + version { + author { + firstname + } + published + } + } +} +``` + +##### The `versions` field + +The `versions` field on your `DataObject` will return a list of the `version` objects described above. +The list is sortable by version number, using the `sort` parameter. + +```graphql +query readPages { + nodes { + title + versions(sort: { version: DESC }) { + author { + firstname + } + published + } + } +} +``` + +#### The `readVersion` plugin + +This plugin updates the `read` operation to include a `versioning` argument that contains the following +fields: + +- `mode`: VersionedQueryMode (An enum of [`ARCHIVE`, `LATEST`, `DRAFT`, `LIVE`, `STATUS`, `VERSION`]) +- `archiveDate`: String (The archive date to read from) +- `status`: VersionedStatus (An enum of [`PUBLISHED`, `DRAFT`, `ARCHIVED`, `MODIFIED`]) +- `version`: Int (The exact version to read) + +The query will automatically apply the settings from the `versioning` input type to the query and affect +the resulting `DataList`. + +#### The `unpublishOnDelete` plugin + +This is mostly for internal use. It's an escape hatch for tidying up after a delete. + +### Versioned operations + +DataObjects with the `Versioned` extension applied will also receive four extra operations +by default. They include: + +- `publish` +- `unpublish` +- `copyToStage` +- `rollback` + +All of these identifiers can be used in the `operations` config for your versioned +`DataObject`. They will all be included if you use `operations: '*'`. + +```yml +# app/_graphql/models.yml +App\Model\MyObject: + fields: '*' + operations: + publish: true + unpublish: true + rollback: true + copyToStage: true +``` + +#### Using the operations + +Let's look at a few examples: + +##### Publishing + +```graphql +mutation publishSiteTree(id: 123) { + id + title +} +``` + +##### Unpublishing + +```graphql +mutation unpublishSiteTree(id: 123) { + id + title +} +``` + +##### Rolling back + +```graphql +mutation rollbackSiteTree(id: 123, toVersion: 5) { + id + title +} +``` + +##### Copying to stage + +```graphql +mutation copySiteTreeToStage(id: 123, fromStage: DRAFT, toStage: LIVE) { + id + title +} +``` + +### Disabling versioning on your schema {#disable} + +Versioning is great for Content APIs (e.g. previews), but often not necessary for public APIs focusing on published data. +You can disable versioning for your schema in the `modelConfig` section: + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + plugins: + versioning: false + operations: + read: + plugins: + readVersion: false + readOne: + plugins: + readVersion: false + delete: + plugins: + unpublishOnDelete: false +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/02_working_with_dataobjects/06_property_mapping.md b/docs/en/02_working_with_dataobjects/06_property_mapping.md new file mode 100644 index 00000000..1f190668 --- /dev/null +++ b/docs/en/02_working_with_dataobjects/06_property_mapping.md @@ -0,0 +1,77 @@ +--- +title: Property mapping and dot syntax +summary: Learn how to customise field names, use dot syntax, and use aggregate functions +--- + +# Working with `DataObject` models + +[CHILDREN asList] + +## Property mapping and dot syntax + +For the most part, field names are inferred through the `DataObject` model, but its API affords developers full +control over naming. + +In this example, we are taking a property `content` (which will be defined as `Content` in PHP) and defining it +as `pageContent` for GraphQL queries and mutations. + +```yml +# app/_graphql/models.yml +Page: + fields: + pageContent: + type: String + property: Content +``` + +> [!WARNING] +> When using explicit property mapping, you must also define an explicit type, as it can +> no longer be inferred. + +### Dot-separated accessors + +Property mapping is particularly useful when using **dot syntax** to access fields. + +```yml +# app/_graphql/models.yml +App\PageType\Blog: + fields: + title: true + authorName: + type: String + property: 'Author.FirstName' +``` + +Fields on `has_many` or `many_many` relationships will automatically convert to a `column` array: + +```yml +# app/_graphql/models.yml +App\PageType\Blog: + fields: + title: true + categoryTitles: + type: '[String]' + property: 'Categories.Title' + authorsFavourites: + type: '[String]' + property: 'Author.FavouritePosts.Title' +``` + +We can even use a small subset of **aggregates**, including `Count()`, `Max()`, `Min()` and `Avg()`. + +```yml +# app/_graphql/models.yml +App\Model\ProductCategory: + fields: + title: true + productCount: + type: Int + property: 'Products.Count()' + averageProductPrice: + type: Float + property: 'Products.Avg(Price)' +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/02_working_with_dataobjects/07_nested_definitions.md b/docs/en/02_working_with_dataobjects/07_nested_definitions.md new file mode 100644 index 00000000..49e29228 --- /dev/null +++ b/docs/en/02_working_with_dataobjects/07_nested_definitions.md @@ -0,0 +1,52 @@ +--- +title: Nested type definitions +summary: Define dependent types inline with a parent type +--- +# Working with `DataObject` models + +[CHILDREN asList] + +## Nested type definitions + +For readability and ergonomics, you can take advantage of nested type definitions. Let's imagine +we have a `Blog` and we want to expose `Author` and `Categories`, but while we're at it, we want +to specify what fields they should have. + +```yml +# app/_graphql/models.yml +App\PageType\Blog: + fields: + title: true + author: + fields: + firstName: true + surname: true + email: true + categories: + fields: '*' +``` + +Alternatively, we could flatten that out: + +```yml +# app/_graphql/models.yml +App\PageType\Blog: + fields: + title: true + author: true + categories: true +SilverStripe\Security\Member: + fields: + firstName: true + surname: true + email: true +App\Model\BlogCategory: + fields: '*' +``` + +> [!NOTE] +> You cannot define operations on nested types. They only accept fields. + +### Further reading + +[CHILDREN] diff --git a/docs/en/02_working_with_dataobjects/index.md b/docs/en/02_working_with_dataobjects/index.md new file mode 100644 index 00000000..df46b1e3 --- /dev/null +++ b/docs/en/02_working_with_dataobjects/index.md @@ -0,0 +1,14 @@ +--- +title: Working with DataObject models +summary: Add DataObject models to your schema, expose their fields, add read/write operations, and more +icon: database +--- + +# Working with `DataObject` models + +In this section of the documentation, we'll cover adding DataObjects to the schema, exposing their fields, +and adding read/write operations. We'll also look at some of the plugins that are available to DataObjects +like [sorting, filtering, and pagination](query_plugins), as well as some more advanced concepts like +[permissions](permissions), [inheritance](inheritance) and [property mapping](property_mapping). + +[CHILDREN] diff --git a/docs/en/03_working_with_generic_types/01_creating_a_generic_type.md b/docs/en/03_working_with_generic_types/01_creating_a_generic_type.md new file mode 100644 index 00000000..c110e607 --- /dev/null +++ b/docs/en/03_working_with_generic_types/01_creating_a_generic_type.md @@ -0,0 +1,38 @@ +--- +title: Creating a generic type +summary: Creating a type that doesn't map to a DataObject +--- + +# Working with generic types + +[CHILDREN asList] + +## Creating a generic type + +Let's create a simple type that will work with the inbuilt features of Silverstripe CMS. +We'll define some languages based on the `i18n` API. + +```yml +# app/_graphql/types.yml +Country: + fields: + code: String! + name: String! +``` + +We've defined a type called `Country` that has two fields: `code` and `name`. An example record +could be something like: + +```php +[ + 'code' => 'bt', + 'name' => 'Bhutan', +] +``` + +That's all we have to do for now! We'll need to tell GraphQL how to get this data, but first +we need to [building a custom query](building_a_custom_query) to see how we can use it. + +### Further reading + +[CHILDREN] diff --git a/docs/en/03_working_with_generic_types/02_building_a_custom_query.md b/docs/en/03_working_with_generic_types/02_building_a_custom_query.md new file mode 100644 index 00000000..2cda2461 --- /dev/null +++ b/docs/en/03_working_with_generic_types/02_building_a_custom_query.md @@ -0,0 +1,182 @@ +--- +title: Building a custom query +summary: Add a custom query for any type of data +--- +# Working with generic types + +[CHILDREN asList] + +## Building a custom query + +We've defined the shape of our data, now we need a way to access it. For this, +we'll need a query. Let's add one to the `queries` section of our config. + +```yml +# app/_graphql/schema.yml +queries: + readCountries: '[Country]' +``` + +### Resolving fields + +Now we have a query that will return all the countries. In order to make this work, we'll +need a **resolver** to tell the query where to get the data from. For this, we're going to +have to break out of the configuration layer and write some PHP code. + +```php +// app/src/GraphQL/Resolver/MyResolver.php +namespace App\GraphQL\Resolver; + +use SilverStripe\Core\Injector\Injector; +use SilverStripe\i18n\Data\Locales; + +class MyResolver +{ + public static function resolveCountries(): array + { + $results = []; + $countries = Injector::inst()->get(Locales::class)->getCountries(); + foreach ($countries as $code => $name) { + $results[] = [ + 'code' => $code, + 'name' => $name, + ]; + } + + return $results; + } +} +``` + +Resolvers are pretty loosely defined, and don't have to adhere to any specific contract +other than that they **must be static methods**. You'll see why when we add it to the configuration: + +```yml +# app/_graphql/schema.yml +queries: + readCountries: + type: '[Country]' + resolver: [ 'App\GraphQL\Resolver\MyResolver', 'resolveCountries' ] +``` + +> [!WARNING] +> Note the difference in syntax here between the `type` and the `resolver` - the type declaration +> *must* have quotes around it, because we are saying "this is a list of `Country` objects". The value +> of this must be a YAML *string*. But the resolver must *not* be surrounded in quotes. It is explicitly +> a YAML array, so that PHP recognises it as a `callable`. + +Now, we just have to build the schema: + +`vendor/bin/sake dev/graphql/build schema=default` + +### Testing the query + +Let's test this out in our GraphQL IDE. If you have the [`silverstripe/graphql-devtools`](https://github.com/silverstripe/silverstripe-graphql-devtools) +module installed, just go to `/dev/graphql/ide` in your browser. + +As you start typing, it should autocomplete for you. + +Here's our query: + +```graphql +query { + readCountries { + name + code + } +} +``` + +And the expected response: + +```json +{ + "data": { + "readCountries": [ + { + "name": "Afghanistan", + "code": "af" + }, + { + "name": "Åland Islands", + "code": "ax" + }, + "... etc" + ] + } +} +``` + +> [!WARNING] +> Keep in mind that [plugins](../working_with_DataObjects/query_plugins) +> don't apply in this context - at least without updating the resolver +> to account for them. Most importantly this means you need to +> implement your own `canView()` checks. It also means you need +> to add your own filter functionality, such as [pagination](adding_pagination). + +## Resolver method arguments + +A resolver is executed in a particular query context, which is passed into the method as arguments. + +- `mixed $value`: An optional value of the parent in your data graph. + Defaults to `null` on the root level, but can be useful to retrieve the object + when writing field-specific resolvers (see [Resolver Discovery](resolver_discovery)). +- `array $args`: An array of optional arguments for this field (which is different from the [Query Variables](https://graphql.org/learn/queries/#variables)) +- `array $context`: An arbitrary array which holds information shared between resolvers. + Use implementors of [`ContextProvider`](api:SilverStripe\GraphQL\Schema\Interfaces\ContextProvider) to get and set + data, rather than relying on the array keys directly. +- [`?ResolveInfo`](api:GraphQL\Type\Definition\ResolveInfo)`$info`: Data structure containing useful information for the resolving process (e.g. the field name). + See [Fetching Data](https://webonyx.github.io/graphql-php/data-fetching/) in the underlying PHP library for details. + +## Using context providers + +The `$context` array can be useful to get access to the HTTP request, +retrieve the current member, or find out details about the schema. +You can use it through implementors of the `ContextProvider` interface. +In the example below, we'll demonstrate how you could limit viewing the country code to +users with ADMIN permissions. + +```php +// app/src/GraphQL/Resolver/MyResolver.php +namespace App\GraphQL\Resolver; + +use GraphQL\Type\Definition\ResolveInfo; +use SilverStripe\Core\Injector\Injector; +use SilverStripe\GraphQL\QueryHandler\UserContextProvider; +use SilverStripe\Security\Permission; +use SilverStripe\i18n\Data\Locales; + +class MyResolver +{ + public static function resolveCountries( + mixed $value = null, + array $args = [], + array $context = [], + ?ResolveInfo $info = null + ): array { + $member = UserContextProvider::get($context); + $canViewCode = ($member && Permission::checkMember($member, 'ADMIN')); + $results = []; + $countries = Injector::inst()->get(Locales::class)->getCountries(); + foreach ($countries as $code => $name) { + $results[] = [ + 'code' => $canViewCode ? $code : '', + 'name' => $name, + ]; + } + + return $results; + } +} +``` + +## Resolver discovery + +This is great, but as we write more and more queries for types with more and more fields, +it's going to get awfully laborious mapping all these resolvers. Let's clean this up a bit by +adding a bit of convention over configuration, and save ourselves a lot of time to boot. We can do +that using the [resolver discovery pattern](resolver_discovery). + +### Further reading + +[CHILDREN] diff --git a/docs/en/03_working_with_generic_types/03_resolver_discovery.md b/docs/en/03_working_with_generic_types/03_resolver_discovery.md new file mode 100644 index 00000000..c938a1dd --- /dev/null +++ b/docs/en/03_working_with_generic_types/03_resolver_discovery.md @@ -0,0 +1,191 @@ +--- +title: The resolver discovery pattern +summary: How you can opt out of mapping fields to resolvers by adhering to naming conventions +--- + +# Working with generic types + +[CHILDREN asList] + +## The resolver discovery pattern + +When you define a query, mutation, or any other field on a type, you can opt out of providing +an explicit resolver and allow the system to discover one for you based on naming convention. + +Let's start by registering a resolver class where we can define a bunch of these methods. + +You can register as many classes as makes sense - and each resolver class can have multiple +resolver methods. + +```yml +# app/_graphql/config.yml +resolvers: + - App\GraphQL\Resolver\MyResolver +``` + +What we're registering here is a generic class that should contain one or more static functions that resolve one +or many fields. How those functions will be discovered relies on the *resolver strategy*. + +### Resolver strategy + +Each schema config accepts a `resolverStrategy` property. This should map to a callable that will return +a method name given a class name, type name, and [`Field`](api:SilverStripe\GraphQL\Schema\Field\Field) instance. + +```php +namespace App\GraphQL\Resolver; + +use SilverStripe\GraphQL\Schema\Field\Field; + +class Strategy +{ + public static function getResolverMethod(string $className, ?string $typeName = null, ?Field $field = null): ?string + { + // strategy logic here + } +} +``` + +#### The default resolver strategy + +By default, all schemas use [`DefaultResolverStrategy::getResolverMethod()`](api:SilverStripe\GraphQL\Schema\Resolver\DefaultResolverStrategy::getResolverMethod()) +to discover resolver functions. The logic works like this: + +- Does `resolve` exist? + - Yes? Return that method name + - No? Continue +- Does `resolve` exist? + - Yes? Return that method name + - No? Continue +- Does `resolve` exist? + - Yes? Return that method name + - No? Continue +- Does `resolve` exist? + - Yes? Return that method name + - No? Return null. This resolver cannot be discovered + +Let's look at our query again: + +```graphql +query { + readCountries { + name + } +} +``` + +Imagine we have two classes registered under `resolvers` - `ClassA` and `ClassB` + +```yml +# app/_graphql/config.yml +resolvers: + - App\GraphQL\Resolver\ClassA + - App\GraphQL\Resolver\ClassB +``` + +The `DefaultResolverStrategy` will check for methods in this order: + +- `ClassA::resolveCountryName()` +- `ClassA::resolveCountry()` +- `ClassA::resolveName()` +- `ClassA::resolve()` +- `ClassB::resolveCountryName()` +- `ClassB::resolveCountry()` +- `ClassB::resolveName()` +- `ClassB::resolve()` +- Return `null`. + +You can implement whatever strategy you like in your schema. Just register it to `resolverStrategy` in the config. + +```yml +# app/_graphql/config.yml +resolverStrategy: [ 'App\GraphQL\Resolver\Strategy', 'getResolverMethod' ] +``` + +Let's add a resolver method to our resolver provider: + +```php +// app/src/GraphQL/Resolver/MyResolver.php +namespace App\GraphQL\Resolver; + +use SilverStripe\Core\Injector\Injector; +use SilverStripe\i18n\Data\Locales; + +class MyResolver +{ + public static function resolveReadCountries() + { + $results = []; + $countries = Injector::inst()->get(Locales::class)->getCountries(); + foreach ($countries as $code => $name) { + $results[] = [ + 'code' => $code, + 'name' => $name, + ]; + } + + return $results; + } +} +``` + +Now that we're using logic to discover our resolver, we can remove our resolver method declarations from the individual +queries and instead just register the resolver class. + +```yml +# app/_graphql/config.yml +resolvers: + - App\GraphQL\Resolver\MyResolver +``` + +```yml +# app/_graphql/schema.yml + queries: + readCountries: '[Country]' +``` + +Re-run the schema build, with a flush (because we created a new PHP class), and let's go! + +`vendor/bin/sake dev/graphql/build schema=default flush=1` + +### Field resolvers + +A less magical approach to resolver discovery is defining a `fieldResolver` property on your +types. This is a generic handler for all fields on a given type and can be a nice middle +ground between the rigor of hard coding everything at a query level, and the opacity of discovery logic. + +```yml +# app/_graphql/schema.yml +types: + Country: + fields: + name: String + code: String + fieldResolver: [ 'App\GraphQL\Resolver\MyResolver', 'resolveCountryFields' ] +``` + +In this case the registered resolver method will be used to resolve any number of fields. +You'll need to do explicit checks for the field name in your resolver to make this work. + +```php +namespace App\GraphQL\Resolver; + +use GraphQL\Type\Definition\ResolveInfo; + +class MyResolver +{ + // ... + + public static function resolveCountryFields($obj, $args, $context, ResolveInfo $info) + { + $fieldName = $info->fieldName; + if ($fieldName === 'image') { + return $obj->getImage()->getURL(); + } + // ... + } +} +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/03_working_with_generic_types/04_adding_arguments.md b/docs/en/03_working_with_generic_types/04_adding_arguments.md new file mode 100644 index 00000000..62b13734 --- /dev/null +++ b/docs/en/03_working_with_generic_types/04_adding_arguments.md @@ -0,0 +1,84 @@ +--- +title: Adding arguments +summary: Add arguments to your fields, queries, and mutations +--- + +# Working with generic types + +[CHILDREN asList] + +## Adding arguments + +Fields can have arguments, and queries are just fields, so let's add a simple +way of influencing our query response: + +```yml +# app/_graphql/schema.yml +queries: + 'readCountries(limit: Int!)': '[Country]' +``` + +> [!TIP] +> In the above example, the `limit` argument is *required* by making it non-nullable. If you want to be able +> to get an un-filtered list, you can instead allow the argument to be nullable by removing the `!`: +> `'readCountries(limit: Int)': '[Country]'` + +We've provided the required argument `limit` to the query, which will allow us to truncate the results. +Let's update the resolver accordingly. + +```php +namespace App\GraphQL\Resolver; + +use SilverStripe\Core\Injector\Injector; +use SilverStripe\i18n\Data\Locales; + +class MyResolver +{ + public static function resolveReadCountries($obj, array $args = []) + { + $limit = $args['limit']; + $results = []; + $countries = Injector::inst()->get(Locales::class)->getCountries(); + $countries = array_slice($countries, 0, $limit); + + foreach ($countries as $code => $name) { + $results[] = [ + 'code' => $code, + 'name' => $name, + ]; + } + + return $results; + } +} +``` + +Now let's try our query again. This time, notice that the IDE is telling us we're missing a required argument. +We need to add the argument to our query: + +```graphql +query { + readCountries(limit: 5) { + name + code + } +} +``` + +This works pretty well, but maybe it's a bit over the top to *require* the `limit` argument. We want to optimise +performance, but we also don't want to burden the developer with tedium like this. Let's give it a default value. + +```yml +# app/_graphql/schema.yml +queries: + 'readCountries(limit: Int = 20)': '[Country]' +``` + +Rebuild the schema and try the query again without adding a limit in the query. Notice that the IDE is no longer +yelling at you for a `limit` argument, but the result list is limited to the first 20 items. + +Let's take this a step further by turning this in to a proper [paginated result](adding_pagination). + +### Further reading + +[CHILDREN] diff --git a/docs/en/03_working_with_generic_types/05_adding_pagination.md b/docs/en/03_working_with_generic_types/05_adding_pagination.md new file mode 100644 index 00000000..d207e783 --- /dev/null +++ b/docs/en/03_working_with_generic_types/05_adding_pagination.md @@ -0,0 +1,113 @@ +--- +title: Adding pagination +summary: Add the pagination plugin to a generic query +--- +# Working with generic types + +[CHILDREN asList] + +## Adding pagination + +So far in this section we've created a simple generic query for a `Country` type called `readCountries` that takes a +`limit` argument. + +```graphql +query { + readCountries(limit: 5) { + name + code + } +} +``` + +Let's take this a step further and paginate it using a plugin. + +### The `paginate` plugin + +Since pagination is a fairly common task, we can take advantage of some reusable code here and just add a generic +plugin for paginating. + +> [!WARNING] +> If you're paginating a `DataList`, you might want to consider using models with read operations (instead of declaring +> them as generic types with generic queries), which paginate by default using the `paginateList` plugin. +> You can use generic typing and follow the below instructions too but it requires code that, for `DataObject` models, +> you get for free. + +Let's add the plugin to our query: + +```yml +# app/_graphql/schema.yml +queries: + readCountries: + type: '[Country]' + plugins: + paginate: {} +``` + +Right now the plugin will add the necessary arguments to the query, and update the return types. But +we still need to provide this generic plugin a way of actually limiting the result set, so we need a resolver. + +```yml +# app/_graphql/schema.yml +queries: + readCountries: + type: '[Country]' + plugins: + paginate: + resolver: ['App\GraphQL\Resolver\MyResolver', 'paginateCountries'] +``` + +Let's write that resolver code now: + +```php +namespace App\GraphQL\Resolver; + +use Closure; +use SilverStripe\GraphQL\Schema\Plugin\PaginationPlugin; + +class MyResolver +{ + public static function paginateCountries(array $context): Closure + { + $maxLimit = $context['maxLimit']; + return function (array $countries, array $args) use ($maxLimit) { + $offset = $args['offset']; + $limit = $args['limit']; + $total = count($countries); + if ($limit > $maxLimit) { + $limit = $maxLimit; + } + + $limitedList = array_slice($countries, $offset, $limit); + + return PaginationPlugin::createPaginationResult($total, $limitedList, $limit, $offset); + }; + } +} +``` + +A couple of things are going on here: + +- Notice the new design pattern of a **context-aware resolver**. Since the plugin is configured with a `maxLimit` +parameter, we need to get this information to the function that is ultimately used in the schema. Therefore, +we create a dynamic function in a static method by wrapping it with context. It's kind of like a decorator. +- As long as we can do the work of counting and limiting the array, the [`PaginationPlugin`](api:SilverStripe\GraphQL\Schema\Plugin\PaginationPlugin) +can handle the rest. It will return an array including `edges`, `nodes`, and `pageInfo`. + +Rebuild the schema and test it out: + +`vendor/bin/sake dev/graphql/build schema=default` + +```graphql +query { + readCountries(limit:3, offset:4) { + nodes { + name + } + } +} +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/03_working_with_generic_types/06_adding_descriptions.md b/docs/en/03_working_with_generic_types/06_adding_descriptions.md new file mode 100644 index 00000000..ebc87012 --- /dev/null +++ b/docs/en/03_working_with_generic_types/06_adding_descriptions.md @@ -0,0 +1,54 @@ +--- +title: Adding descriptions +summary: Add descriptions to just about anything in your schema to improve your developer experience +--- +# Working with generic types + +[CHILDREN asList] + +## Adding descriptions + +One of the great features of a schema-backed API is that it is self-documenting. If you use +the [`silverstripe/graphql-devtools`](https://github.com/silverstripe/silverstripe-graphql-devtools) +module you can see the documentation by navigating to /dev/graphql/ide in your browser anc clicking +on "DOCS" on the right. + +Many API developers choose to maximise the benefit of this by adding descriptions to some or +all of the components of their schema. + +The trade-off for using descriptions is that the YAML configuration becomes a bit more verbose. + +Let's add some descriptions to our types and fields. + +```yml +# app/_graphql/schema.yml +types: + Country: + description: A record that describes one of the world's sovereign nations + fields: + code: + type: String! + description: The unique two-letter country code + name: + type: String! + description: The canonical name of the country, in English +``` + +We can also add descriptions to our query arguments. We'll have to remove the inline argument +definition to do that. + +```yml +# app/_graphql/schema.yml +queries: + readCountries: + type: '[Country]' + description: Get all the countries in the world + args: + limit: + type: Int = 20 + description: The limit that is applied to the result set +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/03_working_with_generic_types/07_enums_unions_and_interfaces.md b/docs/en/03_working_with_generic_types/07_enums_unions_and_interfaces.md new file mode 100644 index 00000000..b6f44ef2 --- /dev/null +++ b/docs/en/03_working_with_generic_types/07_enums_unions_and_interfaces.md @@ -0,0 +1,114 @@ +--- +title: Enums, unions, and interfaces +summary: Add some non-object types to your schema +--- +# Working with generic types + +[CHILDREN asList] + +## Enums, unions, and interfaces + +In more complex schemas, you may want to define types that aren't simply a list of fields, or +"object types." These include enums, unions and interfaces. + +### Enum types + +Enum types are simply a list of string values that are possible for a given field. They are +often used in arguments to queries, such as `{sort: DESC}`. + +It's very easy to add enum types to your schema. Just use the `enums` section of the config. + +```yml +# app/_graphql/schema.yml +enums: + SortDirection: + values: + DESC: Descending order + ASC: Ascending order +``` + +### Interfaces + +An interface is a specification of fields that must be included on a type that implements it. +For example, an interface `Person` could include `firstName: String`, `surname: String`, and +`age: Int`. The types `Actor` and `Chef` would implement the `Person` interface, and therefore +querying for `Person` types can also give you `Actor` and `Chef` types in the result. Actors and +chefs must also have the `firstName`, `surname`, and `age` fields for such a query to work. + +To define an interface, use the `interfaces` section of the config. + +```yml +# app/_graphql/schema.yml +interfaces: + Person: + fields: + firstName: String! + surname: String! + age: Int! + resolveType: [ 'App\GraphQL\Resolver\MyResolver', 'resolvePersonType' ] +``` + +Interfaces must define a `resolve[Typename]Type` resolver method to inform the interface +which type it is applied to given a specific result. This method is non-discoverable and +must be applied explicitly. + +```php +namespace App\GraphQL\Resolver; + +use App\Model\Actor; +use App\Model\Chef; + +class MyResolver +{ + public static function resolvePersonType($object): string + { + if ($object instanceof Actor) { + return 'Actor'; + } + if ($object instanceof Chef) { + return 'Chef'; + } + } +} +``` + +### Union types + +A union type is used when a field can resolve to multiple types. For example, a query +for "Articles" could return a list containing both "Blog" and "NewsStory" types. + +To add a union type, use the `unions` section of the configuration. + +```yml +# app/_graphql/schema.yml +unions: + Article: + types: [ 'Blog', 'NewsStory' ] + typeResolver: [ 'App\GraphQL\Resolver\MyResolver', 'resolveArticleUnion' ] +``` + +Like interfaces, unions need to know how to resolve their types. These methods are also +non-discoverable and must be applied explicitly. + +```php +namespace App\GraphQL\Resolver; + +use App\Model\Article; + +class MyResolver +{ + public static function resolveArticleUnion(Article $object): string + { + if ($object->category === 'blogs') { + return 'Blog'; + } + if ($object->category === 'news') { + return 'NewsStory'; + } + } +} +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/03_working_with_generic_types/index.md b/docs/en/03_working_with_generic_types/index.md new file mode 100644 index 00000000..c6af3d5e --- /dev/null +++ b/docs/en/03_working_with_generic_types/index.md @@ -0,0 +1,21 @@ +--- +title: Working with generic types +summary: Break away from the magic of DataObject models and build types and queries from scratch. +icon: clipboard +--- + +# Working with generic types + +In this section of the documentation, we cover the fundamentals that are behind a lot of the magic that goes +into making `DataObject` types work. We'll create some types that are not based on DataObjects at all, and we'll +write some custom queries from the ground up. + +This is useful for situations where your data doesn't come from a `DataObject`, or where you have very specific +requirements for your GraphQL API that don't easily map to the schema of your `DataObject` classes. + +> [!NOTE] +> Just because we won't be using DataObjects in this example doesn't mean you can't do it - you can absolutely +> declare `DataObject` classes as generic types. You would lose a lot of the benefits of the `DataObject` model +> in doing so, but this lower level API may suit your needs for very specific use cases. + +[CHILDREN] diff --git a/docs/en/04_security_and_best_practices/01_authentication.md b/docs/en/04_security_and_best_practices/01_authentication.md new file mode 100644 index 00000000..888d4832 --- /dev/null +++ b/docs/en/04_security_and_best_practices/01_authentication.md @@ -0,0 +1,107 @@ +--- +title: Authentication +summary: Ensure your GraphQL api is only accessible to provisioned users +icon: user-lock +--- + +# Security & best practices + +[CHILDREN asList] + +## Authentication + +Some Silverstripe CMS resources have permission requirements to perform CRUD operations +on, for example the `Member` object in the previous examples. + +If you are logged into the CMS and performing a request from the same session then +the same `Member` session is used to authenticate GraphQL requests, however if you +are performing requests from an anonymous/external application you may need to +authenticate before you can complete a request. + +> [!WARNING] +> Please note that when implementing GraphQL resources it is the developer's +> responsibility to ensure that permission checks are implemented wherever +> resources are accessed. + +### Default authentication + +The [`MemberAuthenticator`](api:SilverStripe\GraphQL\Auth\MemberAuthenticator) class is +configured as the default option for authentication, +and will attempt to use the current CMS `Member` session for authentication context. + +**If you are using the default session-based authentication, please be sure that you have +not disabled the [CSRF Middleware](csrf_protection). (It is enabled by default).** + +### HTTP basic authentication + +Silverstripe CMS has built-in support for [HTTP basic authentication](https://en.wikipedia.org/wiki/Basic_access_authentication). + +There is a [`BasicAuthAuthenticator`](api:SilverStripe\GraphQL\Auth\BasicAuthAuthenticator) +which can be configured for GraphQL that +will only activate when required. It is kept separate from the Silverstripe CMS +authenticator because GraphQL needs to use the successfully authenticated member +for CMS permission filtering, whereas the global [`BasicAuth`](api:SilverStripe\Security\BasicAuth) does not log the +member in or use it for model security. Note that basic auth will bypass MFA authentication +so if MFA is enabled it is not recommended that you also use basic auth for GraphQL. + +When using HTTP basic authentication, you can feel free to remove the [CSRF Middleware](csrf_protection), +as it just adds unnecessary overhead to the request. + +#### In graphiQL + +If you want to add basic authentication support to your GraphQL requests you can +do so by adding a custom `Authorization` HTTP header to your GraphiQL requests. + +If you are using the [GraphiQL macOS app](https://github.com/skevy/graphiql-app) +this can be done from "Edit HTTP Headers". + +The `/dev/graphql/ide` endpoint in [`silverstripe/graphql-devtools`](https://github.com/silverstripe/silverstripe-graphql-devtools) +does not support custom HTTP headers at this point. + +Your custom header should follow the following format: + +```text +# Key: Value +Authorization: Basic aGVsbG86d29ybGQ= +``` + +`Basic` is followed by a [base64 encoded](https://en.wikipedia.org/wiki/Base64) +combination of your username, colon and password. The above example is `hello:world`. + +**Note:** Authentication credentials are transferred in plain text when using HTTP +basic authentication. We strongly recommend using TLS for non-development use. + +Example: + +```bash +php -r 'echo base64_encode("hello:world");' +# aGVsbG86d29ybGQ= +``` + +### Defining your own authenticators + +You will need to define the class under `SilverStripe\GraphQL\Auth\Handlers.authenticators`. +You can optionally provide a `priority` number if you want to control which +authenticator is used when multiple are defined (higher priority returns first). + +Authenticator classes need to implement the [`AuthenticatorInterface`](api:SilverStripe\GraphQL\Auth\AuthenticatorInterface) +interface, which requires you to define an `authenticate()` method to return a `Member` or `false`, and +and an `isApplicable()` method which tells the [`Handler`](api:SilverStripe\GraphQL\Auth\Handler) whether +or not this authentication method +is applicable in the current request context (provided as an argument). + +Here's an example for implementing HTTP basic authentication: + +> [!WARNING] +> Note that basic authentication for GraphQL will bypass Multi-Factor Authentication (MFA) if that's enabled. Using basic authentication for GraphQL is considered insecure if you are using MFA. + +```yml +SilverStripe\GraphQL\Auth\Handler: + authenticators: + - class: SilverStripe\GraphQL\Auth\BasicAuthAuthenticator + priority: 10 +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/04_security_and_best_practices/02_cors.md b/docs/en/04_security_and_best_practices/02_cors.md new file mode 100644 index 00000000..5ef567f2 --- /dev/null +++ b/docs/en/04_security_and_best_practices/02_cors.md @@ -0,0 +1,139 @@ +--- +title: Cross-Origin Resource Sharing (CORS) +summary: Ensure that requests to your API come from a whitelist of origins +--- + +# Security & best practices + +[CHILDREN asList] + +## Cross-Origin resource sharing (CORS) + +By default [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) is disabled in the GraphQL Server. This can be easily enabled via YAML: + +```yml +SilverStripe\GraphQL\Controller: + cors: + Enabled: true +``` + +Once you have enabled CORS you can then control four new headers in the HTTP Response. + +1. **Access-Control-Allow-Origin.** + + This lets you define which domains are allowed to access your GraphQL API. There are + 4 options: + + - **Blank**: Deny all domains (except localhost) + + ```yml + Allow-Origin: + ``` + + - **'\*'**: Allow requests from all domains. + + ```yml + Allow-Origin: '*' + ``` + + - **Single Domain**: Allow requests from one specific external domain. + + ```yml + Allow-Origin: 'https://my.domain.com' + ``` + + - **Multiple Domains**: Allow requests from multiple specified external domains. + + ```yml + Allow-Origin: + - 'https://my.domain.com' + - 'https://your.domain.org' + ``` + +1. **Access-Control-Allow-Headers.** + + Access-Control-Allow-Headers is part of a CORS 'pre-flight' request to identify + what headers a CORS request may include. By default, the GraphQL server enables the + `Authorization` and `Content-Type` headers. You can add extra allowed headers that + your GraphQL may need by adding them here. For example: + + ```yml + Allow-Headers: 'Authorization, Content-Type, Content-Language' + ``` + + > [!WARNING] + > If you add extra headers to your GraphQL server, you will need to write a + > custom resolver function to handle the response. + +1. **Access-Control-Allow-Methods.** + + This defines the HTTP request methods that the GraphQL server will handle. By + default this is set to `GET, PUT, OPTIONS`. Again, if you need to support extra + methods you will need to write a custom resolver to handle this. For example: + + ```yml + Allow-Methods: 'GET, PUT, DELETE, OPTIONS' + ``` + +1. **Access-Control-Max-Age.** + + Sets the maximum cache age (in seconds) for the CORS pre-flight response. When + the client makes a successful OPTIONS request, it will cache the response + headers for this specified duration. If the time expires or the required + headers are different for a new CORS request, the client will send a new OPTIONS + pre-flight request to ensure it still has authorisation to make the request. + This is set to 86400 seconds (24 hours) by default but can be changed in YAML as + in this example: + + ```yml + Max-Age: 600 + ``` + +1. **Access-Control-Allow-Credentials.** + + When a request's credentials mode (Request.credentials) is "include", browsers + will only expose the response to frontend JavaScript code if the + Access-Control-Allow-Credentials value is true. + + The Access-Control-Allow-Credentials header works in conjunction with the + XMLHttpRequest.withCredentials property or with the credentials option in the + Request() constructor of the Fetch API. For a CORS request with credentials, + in order for browsers to expose the response to frontend JavaScript code, both + the server (using the Access-Control-Allow-Credentials header) and the client + (by setting the credentials mode for the XHR, Fetch, or Ajax request) must + indicate that they’re opting in to including credentials. + + This is set to empty by default but can be changed in YAML as in this example: + + ```yml + Allow-Credentials: 'true' + ``` + +### Apply a CORS config to all GraphQL endpoints + +```yml +## CORS Config +SilverStripe\GraphQL\Controller: + cors: + Enabled: true + Allow-Origin: 'https://silverstripe.org' + Allow-Headers: 'Authorization, Content-Type' + Allow-Methods: 'GET, POST, OPTIONS' + Allow-Credentials: 'true' + Max-Age: 600 # 600 seconds = 10 minutes. +``` + +### Apply a CORS config to a single GraphQL endpoint + +```yml +## CORS Config +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\Controller.default: + properties: + corsConfig: + Enabled: false +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/04_security_and_best_practices/03_csrf_protection.md b/docs/en/04_security_and_best_practices/03_csrf_protection.md new file mode 100644 index 00000000..75382587 --- /dev/null +++ b/docs/en/04_security_and_best_practices/03_csrf_protection.md @@ -0,0 +1,45 @@ +--- +title: CSRF protection +summary: Protect destructive actions from cross-site request forgery +--- +# Security & best practices + +[CHILDREN asList] + +## CSRF tokens (required for mutations) + +Even if your GraphQL endpoints are behind authentication, it is still possible for unauthorised +users to access that endpoint through a [CSRF exploitation](https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)). This involves +forcing an already authenticated user to access an HTTP resource unknowingly (e.g. through a fake image), thereby hijacking the user's +session. + +In the absence of a token-based authentication system, like OAuth, the best countermeasure to this +is the use of a CSRF token for any requests that destroy or mutate data. + +By default, this module comes with a [`CSRFMiddleware`](api:SilverStripe\GraphQL\Middleware\CSRFMiddleware) +implementation that forces all mutations to check +for the presence of a CSRF token in the request. That token must be applied to a header named `X-CSRF-TOKEN`. + +In Silverstripe CMS, CSRF tokens are most commonly stored in the session as `SecurityID`, or accessed through +the [`SecurityToken`](api:SilverStripe\Security\SecurityToken) API, using `SecurityToken::inst()->getValue()`. + +Queries do not require CSRF tokens. + +### Disabling CSRF protection (for token-based authentication only) + +If you are using HTTP basic authentication or a token-based system like OAuth or [JWT](https://github.com/Firesphere/silverstripe-graphql-jwt), +you will want to remove the CSRF protection, as it just adds unnecessary overhead. You can do this by setting +the middleware to `false`. + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\QueryHandler\QueryHandlerInterface.default: + class: SilverStripe\GraphQL\QueryHandler\QueryHandler + properties: + Middlewares: + csrf: false +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/04_security_and_best_practices/04_http_method_checking.md b/docs/en/04_security_and_best_practices/04_http_method_checking.md new file mode 100644 index 00000000..1a8c3cb1 --- /dev/null +++ b/docs/en/04_security_and_best_practices/04_http_method_checking.md @@ -0,0 +1,28 @@ +--- +title: Strict HTTP method checking +summary: Ensure requests are GET or POST +--- + +# Security & best practices + +[CHILDREN asList] + +## Strict HTTP method checking + +According to GraphQL best practices, mutations should be done over `POST`, while queries have the option +to use either `GET` or `POST`. By default, this module enforces the `POST` request method for all mutations. + +To disable that requirement, you can remove the [`HTTPMethodMiddleware`](api:SilverStripe\GraphQL\Middleware\HTTPMethodMiddleware) +from the [`QueryHandler`](api:SilverStripe\GraphQL\QueryHandler\QueryHandler). + +```yml +SilverStripe\GraphQL\QueryHandler\QueryHandlerInterface.default: + class: SilverStripe\GraphQL\QueryHandler\QueryHandler + properties: + Middlewares: + httpMethod: false +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/04_security_and_best_practices/05_recursive_or_complex_queries.md b/docs/en/04_security_and_best_practices/05_recursive_or_complex_queries.md new file mode 100644 index 00000000..d9809e2f --- /dev/null +++ b/docs/en/04_security_and_best_practices/05_recursive_or_complex_queries.md @@ -0,0 +1,47 @@ +--- +title: Recursive or complex queries +summary: Protecting against potentially malicious queries +--- + +# Security & best practices + +[CHILDREN asList] + +## Recursive or complex queries + +GraphQL schemas can contain recursive types and circular dependencies. Recursive or overly complex queries can take up a lot of resources, +and could have a high impact on server performance and even result in a denial of service if not handled carefully. + +Before parsing queries, if a query is found to have more than 500 nodes, it is rejected. While executing queries there is a default query depth limit of 15 for all schemas with no complexity limit. + +You can customise the node limit and query depth and complexity limits by setting the following configuration: + +```yml +# app/_config/graphql.yml +--- +After: 'graphql-schema-global' +--- +SilverStripe\GraphQL\Schema\Schema: + schemas: + '*': + config: + max_query_nodes: 250 # default 500 + max_query_depth: 20 # default 15 + max_query_complexity: 100 # default unlimited +``` + +> [!NOTE] +> For calculating the query complexity, every field in the query gets a default score 1 (including ObjectType nodes). Total complexity of the query is the sum of all field scores. + +You can also configure these settings for individual schemas. This allows you to fine-tune the security of your custom public-facing schema without affecting the security of the schema used in the CMS. To do so, either replace `'*'` with the name of your schema in the YAML configuration above, or set the values under the `config` key for your schema using preferred file structure as defined in [configuring your schema](../getting_started/configuring_your_schema). For example: + +```yml +# app/_graphql/config.yml +max_query_nodes: 250 +max_query_depth: 20 +max_query_complexity: 100 +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/04_security_and_best_practices/index.md b/docs/en/04_security_and_best_practices/index.md new file mode 100644 index 00000000..ea935db9 --- /dev/null +++ b/docs/en/04_security_and_best_practices/index.md @@ -0,0 +1,12 @@ +--- +title: Security & best practices +summary: A guide to keeping your GraphQL API secure and accessible +icon: user-lock +--- + +# Security and best practices + +In this section we'll cover several options you have for keeping your GraphQL API secure and compliant +with best practices. Some of these tools require configuration, while others come pre-installed. + +[CHILDREN] diff --git a/docs/en/05_plugins/01_overview.md b/docs/en/05_plugins/01_overview.md new file mode 100644 index 00000000..d60d7340 --- /dev/null +++ b/docs/en/05_plugins/01_overview.md @@ -0,0 +1,139 @@ +--- +title: What are plugins? +summary: An overview of how plugins work with the GraphQL schema +--- + +# Plugins + +[CHILDREN asList] + +## What are plugins? + +Plugins are used to distribute reusable functionality across your schema. Some examples of commonly used plugins include: + +- Adding versioning arguments to versioned DataObjects +- Adding a custom filter/sort arguments to `DataObject` queries +- Adding a one-off `VerisionedStage` enum to the schema +- Ensuring `Member` is in the schema +- And many more... + +### Default plugins + +By default, all schemas ship with some plugins installed that will benefit most use cases: + +- The `DataObject` model (i.e. any `DataObject` based type) has: + - An `inheritance` plugin that builds the interfaces, unions, and merges ancestral fields. + - An `inheritedPlugins` plugin (a bit meta!) that merges plugins from ancestral types into descendants. + installed). +- The `read` and `readOne` operations have: + - A `canView` plugin for hiding records that do not pass a `canView()` check +- The `read` operation has: + - A `paginateList` plugin for adding pagination arguments and types (e.g. `nodes`) + +In addition to the above, the `default` schema specifically ships with an even richer set of default +plugins, including: + +- A `versioning` plugin that adds `version` fields to the `DataObject` type (if `silverstripe/versioned` is installed) +- A `readVersion` plugin (if `silverstripe/versioned` is installed) that allows versioned operations on +`read` and `readOne` queries. +- A `filter` plugin for filtering queries (adds a `filter` argument) +- A `sort` plugin for sorting queries (adds a `sort` argument) + +All of these are defined in the `modelConfig` section of the schema (see [configuring your schema](../getting_started/configuring_your_schema)). + +#### Overriding default plugins + +You can override default plugins generically in the `modelConfig` section. + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + plugins: + inheritance: false # No `DataObject` models get this plugin unless opted into + operations: + read: + plugins: + paginateList: false # No `DataObject` models have paginated read operations unless opted into +``` + +You can override default plugins on your specific `DataObject` type and these changes will be inherited by descendants. + +```yml +# app/_graphql/models.yml +Page: + plugins: + inheritance: false +App\PageType\MyCustomPage: {} # now has no inheritance plugin +``` + +Likewise, you can do the same for operations: + +```yml +# app/_graphql/models.yml +Page: + operations: + read: + plugins: + readVersion: false +App\PageType\MyCustomPage: + operations: + read: true # has no readVersion plugin +``` + +### What plugins must do + +There isn't a huge API surface to a plugin. They just have to: + +- Implement at least one of several plugin interfaces +- Declare an identifier +- Apply themselves to the schema with the `apply(Schema $schema)` method +- Be registered with the [`PluginRegistry`](api:SilverStripe\GraphQL\Schema\Registry\PluginRegistry) + +### Available plugin interfaces + +Plugin interfaces are all found in the `SilverStripe\GraphQL\Schema\Interfaces` namespace + +- [`SchemaUpdater`](api:SilverStripe\GraphQL\Schema\Interfaces\SchemaUpdater): Make a one-off, context-free update to the schema +- [`QueryPlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\QueryPlugin): Update a generic query +- [`MutationPlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\MutationPlugin): Update a generic mutation +- [`TypePlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\TypePlugin): Update a generic type +- [`FieldPlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\FieldPlugin): Update a field on a generic type +- [`ModelQueryPlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\ModelQueryPlugin): Update queries generated by a model, e.g. `readPages` +- [`ModelMutationPlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\ModelMutationPlugin): Update mutations generated by a model, e.g. `createPage` +- [`ModelTypePlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\ModelTypePlugin): Update types that are generated by a model +- [`ModelFieldPlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\ModelFieldPlugin): Update a field on types generated by a model + +Wow, that's a lot of interfaces, right? This is owing mostly to issues around strict typing between interfaces, +and allows for a more expressive developer experience. Almost all of these interfaces have the same requirements, +just for different types. It's pretty easy to navigate if you know what you want to accomplish. + +### Registering plugins + +Plugins have to be registered to the `PluginRegistry` via the `Injector`. + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\Schema\Registry\PluginRegistry: + constructor: + - 'App\GraphQL\Plugin\MyPlugin' +``` + +### Resolver middleware and afterware + +The real power of plugins is the ability to distribute not just configuration across the schema, but +more importantly, *functionality*. + +Fields have their own resolvers already, so we can't really get into those to change +their functionality without a massive hack. This is where the idea of **resolver middleware** and +**resolver afterware** comes in really useful. + +**Resolver middleware** runs *before* the field's assigned resolver +**Resolver afterware** runs *after* the field's assigned resolver + +Middlewares and afterwares are pretty straightforward. They get the same `$args`, `$context`, and `$info` +parameters as the assigned resolver, but the first argument, `$result` is mutated with each resolver. + +### Further reading + +[CHILDREN] diff --git a/docs/en/05_plugins/02_writing_a_simple_plugin.md b/docs/en/05_plugins/02_writing_a_simple_plugin.md new file mode 100644 index 00000000..47db3aee --- /dev/null +++ b/docs/en/05_plugins/02_writing_a_simple_plugin.md @@ -0,0 +1,100 @@ +--- +title: Writing a simple plugin +summary: In this tutorial, we add a simple plugin for string fields +--- + +# Plugins + +[CHILDREN asList] + +## Writing a simple plugin + +For this example, we want all `String` fields to have a `truncate` argument that will limit the length of the string +in the response. + +Because it applies to fields, we'll want to implement the [`FieldPlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\FieldPlugin) +interface for this. + +```php +namespace App\GraphQL\Plugin; + +use SilverStripe\GraphQL\Schema\Field\Field; +use SilverStripe\GraphQL\Schema\Interfaces\FieldPlugin; +use SilverStripe\GraphQL\Schema\Schema; + +class Truncator implements FieldPlugin +{ + public function getIdentifier(): string + { + return 'truncate'; + } + + public function apply(Field $field, Schema $schema, array $config = []) + { + $field->addArg('truncate', 'Int'); + } +} +``` + +Now we've added an argument to any field that uses the `truncate` plugin. This is good, but it really +doesn't save us a whole lot of time. The real value here is that the field will automatically apply the truncation. + +For that, we'll need to augment our plugin with some *afterware*. + +```php +namespace App\GraphQL\Plugin; + +use SilverStripe\GraphQL\Schema\Field\Field; +use SilverStripe\GraphQL\Schema\Interfaces\FieldPlugin; +use SilverStripe\GraphQL\Schema\Schema; + +class Truncator implements FieldPlugin +{ + public function apply(Field $field, Schema $schema, array $config = []) + { + // Sanity check + Schema::invariant( + $field->getType() === 'String', + 'Field %s is not a string. Cannot truncate.', + $field->getName() + ); + + $field->addArg('truncate', 'Int'); + $field->addResolverAfterware([static::class, 'truncate']); + } + + public static function truncate(string $result, array $args): string + { + $limit = $args['truncate'] ?? null; + if ($limit) { + return substr($result, 0, $limit); + } + + return $result; + } +} +``` + +Let's register the plugin: + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\Schema\Registry\PluginRegistry: + constructor: + - 'App\GraphQL\Plugin\Truncator' +``` + +And now we can apply it to any string field we want: + +```yml +# app/_graphql/types.yml +Country: + name: + type: String + plugins: + truncate: true +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/05_plugins/03_writing_a_complex_plugin.md b/docs/en/05_plugins/03_writing_a_complex_plugin.md new file mode 100644 index 00000000..f81f3899 --- /dev/null +++ b/docs/en/05_plugins/03_writing_a_complex_plugin.md @@ -0,0 +1,328 @@ +--- +title: Writing a complex plugin +summary: In this tutorial, we'll create a plugin that affects models, queries, and input types +--- + +# Plugins + +[CHILDREN asList] + +## Writing a complex plugin + +For this example, we'll imagine that a lot of our DataObjects are geocoded, and this is ostensibly some kind of +`DataExtension` that adds lat/lon information to the `DataObject`, and maybe allows you to ask how close it is to +a given lat/lon pair. + +We want any queries using these DataObjects to be able to search within a radius of a given lat/lon. + +To do this, we'll need a few things: + +- DataObjects that are geocodable should always expose their lat/lon fields for GraphQL queries +- `read` operations for DataObjects that are geocodable should include a `within` parameter +- An input type for this lat/lon parameter should be globally available to the schema +- A resolver should automatically filter the result set by proximity. + +Let's get started. + +### Step 1: ensure `DataObject` models expose lat/lon fields + +Since we're dealing with `DataObject` models, we'll need to implement a [`ModelTypePlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\ModelTypePlugin). + +```php +namespace App\GraphQL\Plugin; + +use App\Geo\GeocodableExtension; +use SilverStripe\GraphQL\Schema\Interfaces\ModelTypePlugin; +use SilverStripe\GraphQL\Schema\Schema; +use SilverStripe\GraphQL\Schema\Type\ModelType; +// ... + +class GeocodableModelPlugin implements ModelTypePlugin +{ + public function getIdentifier(): string + { + return 'geocode'; + } + + public function apply(ModelType $type, Schema $schema, array $config = []): void + { + $class = $type->getModel()->getSourceClass(); + + // sanity check that this is a DataObject + Schema::invariant( + is_subclass_of($class, DataObject::class), + 'The %s plugin can only be applied to types generated by %s models', + __CLASS__, + DataObject::class + ); + + // only apply the plugin to geocodable DataObjects + if (!ViewableData::has_extension($class, GeocodableExtension::class)) { + return; + } + + $type->addField('Lat') + ->addField('Lon'); + } +} +``` + +And register the plugin: + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\Schema\Registry\PluginRegistry: + constructor: + - 'App\GraphQL\Plugin\GeocodableModelPlugin' +``` + +Once we've [applied the plugin](#step-5-apply-the-plugins), all DataObjects that have the `GeocodableExtension` extension will be forced to expose their lat/lon fields. + +### Step 2: add a new parameter to the queries + +We want any `readXXX` query to include a `within` parameter if it's for a geocodable `DataObject`. +For this, we're going to implement [`ModelQueryPlugin`](api:SilverStripe\GraphQL\Schema\Interfaces\ModelQueryPlugin), +because this is for queries generated by a model. + +```php +namespace App\GraphQL\Plugin; + +// ... + +class GeocodableQueryPlugin implements ModelQueryPlugin +{ + public function getIdentifier(): string + { + return 'geocodableQuery'; + } + + public function apply(ModelQuery $query, Schema $schema, array $config = []): void + { + $class = $query->getModel()->getSourceClass(); + // Only apply to geocodable objects + if (!ViewableData::has_extension($class, GeocodableExtension::class)) { + return; + } + + $query->addArg('within', 'SearchRadiusInput'); + } +} +``` + +Register the new plugin + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\Schema\Registry\PluginRegistry: + constructor: + - 'App\GraphQL\Plugin\GeocodableModelPlugin' + - 'App\GraphQL\Plugin\GeocodableQueryPlugin' +``` + +Now after we [apply the plugins](#step-5-apply-the-plugins), our read queries will have a new parameter: + +```graphql +query readEvents(within: ...) +``` + +But we're not done yet! What is `SearchRadiusInput`? We haven't defined that yet. Ideally, we want our query +to look like this: + +```graphql +query { + readEvents(within: { + lat: 123.123456, + lon: 123.123456, + proximity: 500, + unit: METER + }) { + nodes { + title + lat + lon + } + } +} +``` + +### Step 3: adding an input type + +We'll need this `SearchRadiusInput` to be shared across queries. It's not specific to any `DataObject`. +For this, we can implement [`SchemaUpdater`](api:SilverStripe\GraphQL\Schema\Interfaces\SchemaUpdater). +For tidiness, let's just to this in the same `GeocodeableQuery` class, since they share concerns. + +```php +namespace App\GraphQL\Plugin; + +use SilverStripe\GraphQL\Schema\Interfaces\SchemaUpdater; +use SilverStripe\GraphQL\Schema\Type\Enum; +use SilverStripe\GraphQL\Schema\Type\InputType; +// ... + +class GeocodableQueryPlugin implements ModelQueryPlugin, SchemaUpdater +{ + // ... + + public static function updateSchema(Schema $schema): void + { + $unitType = Enum::create('Unit', [ + 'METER' => 'METER', + 'KILOMETER' => 'KILOMETER', + 'FOOT' => 'FOOT', + 'MILE' => 'MILE', + ]); + $radiusType = InputType::create('SearchRadiusInput') + ->setFields([ + 'lat' => 'Float!', + 'lon' => 'Float!', + 'proximity' => 'Int!', + 'unit' => 'Unit!', + ]); + $schema->addType($unitType); + $schema->addType($unitType); + } +} +``` + +So now we can run queries with these parameters, but we need to somehow apply it to the result set. + +### Step 4: add a resolver to apply the filter + +All these DataObjects have their own resolvers already, so we can't really get into those to change +their functionality without a massive hack. This is where the idea of **resolver middleware** and +**resolver afterware** comes in really useful. + +**Resolver middleware** runs *before* the operation's assigned resolver +**Resolver afterware** runs *after* the operation's assigned resolver + +Middlewares and afterwares are pretty straightforward. They get the same `$args`, `$context`, and `$info` +parameters as the assigned resolver, but the first argument, `$result` is mutated with each resolver. + +In this case, we're going to be filtering our `DataList` procedurally and transforming it into an array. +We need to know that things like filters and sort have already been applied, because they expect a `DataList` +instance. So we'll need to do this fairly late in the chain. Afterware makes the most sense. + +```php +namespace App\GraphQL\Plugin; + +use App\Geo\Proximity; +// ... + +class GeocodableQueryPlugin implements ModelQueryPlugin, SchemaUpdater +{ + // ... + + public function apply(ModelQuery $query, Schema $schema, array $config = []): void + { + $class = $query->getModel()->getSourceClass(); + // Only apply to geocodable objects + if (!ViewableData::has_extension($class, GeocodableExtension::class)) { + return; + } + + $query->addArg('within', 'SearchRadiusInput'); + $query->addResolverAfterware([static::class, 'applyRadius']); + } + + public static function applyRadius($result, array $args): array + { + $results = []; + $proximity = new Proximity($args['unit'], $args['lat'], $args['lon']); + foreach ($result as $record) { + if ($proximity->isWithin($args['proximity'], $record->Lat, $record->Lon)) { + $results[] = $record; + } + } + + return $results; + } +} +``` + +Looking good! + +But there's still one little gotcha. This is likely to be run after pagination has been executed, so our +`$result` parameter is probably an array of `edges`, `nodes`, etc. + +```php +// app/src/GraphQL/Resolver/MyResolver.php +namespace App\GraphQL\Resolver; + +use App\Geo\Proximity; + +class MyResolver +{ + public static function applyRadius($result, array $args) + { + $results = []; + // imaginary class + $proximity = new Proximity($args['unit'], $args['lat'], $args['lon']); + foreach ($result['nodes'] as $record) { + if ($proximity->isWithin($args['proximity'], $record->Lat, $record->Lon)) { + $results[] = $record; + } + } + + return [ + 'edges' => $results, + 'nodes' => $results, + 'pageInfo' => $result['pageInfo'], + ]; + } +} +``` + +If we added this plugin in middleware rather than afterware, +we could filter the result set by a list of `IDs` early on, which would allow us to keep +a `DataList` throughout the whole cycle, but this would force us to loop over an +unlimited result set, and that's never a good idea. + +> [!WARNING] +> If you've picked up on the inconsistency that the `pageInfo` property is now inaccurate, this is a long-standing +> issue with doing post-query filters. Ideally, any middleware that filters a `DataList` should do it at the query level, +> but that's not always possible. + +### Step 5: apply the plugins + +We can apply the plugins to queries and DataObjects one of two ways: + +- Add them on a case-by-case basis to our config +- Add them as default plugins so that we never have to worry about it. + +Let's look at each approach: + +#### Case-by-case + +```yml +# app/_graphql/models.yml +App\Model\Event: + plugins: + geocode: true + fields: + title: true + operations: + read: + plugins: + geocodeableQuery: true +``` + +This can get pretty verbose, so you might just want to register them as default plugins for all DataObjects +and their `read` operations. In this case we've already added logic within the plugin itself to skip +DataObjects that don't have the `GeoCodable` extension. + +#### Apply by default + +```yml +# apply the `DataObject` plugin +SilverStripe\GraphQL\Schema\DataObject\DataObjectModel: + default_plugins: + geocode: true +# apply the query plugin +SilverStripe\GraphQL\Schema\DataObject\ReadCreator: + default_plugins: + geocodableQuery: true +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/05_plugins/index.md b/docs/en/05_plugins/index.md new file mode 100644 index 00000000..4d72382c --- /dev/null +++ b/docs/en/05_plugins/index.md @@ -0,0 +1,13 @@ +--- +title: Plugins +summary: Learn what plugins are and how you can use them to extend your schema +icon: file-code +--- + +# Plugins + +Plugins play a critical role in distributing reusable functionality across your schema. They can apply to just about +everything loaded into the schema, including types, fields, queries, mutations, and even specifically to model types +and their fields and operations. + +[CHILDREN] diff --git a/docs/en/06_extending/adding_a_custom_model.md b/docs/en/06_extending/adding_a_custom_model.md new file mode 100644 index 00000000..918d8d12 --- /dev/null +++ b/docs/en/06_extending/adding_a_custom_model.md @@ -0,0 +1,80 @@ +--- +title: Adding a custom model +summary: Add a new class-backed type beyond DataObject +--- +# Extending the schema + +[CHILDREN asList] + +## Adding a custom model + +The only point of contact the `silverstripe/graphql` schema has with +the Silverstripe ORM specifically is through the `DataObjectModel` adapter +and its associated plugins. This is important, because it means you +can plug in any schema-aware class as a model, and it will be afforded +all the same features as DataObjects. + +It is, however, hard to imagine a model-driven type that isn't +related to an ORM, so we'll keep this section simple and just describe +what the requirements are rather than think up an outlandish example +of what a non-`DataObject` model might be. + +### SchemaModelInterface + +Models must implement the [`SchemaModelInterface`](api:SilverStripe\GraphQL\Schema\Interfaces\SchemaModelInterface), +which has a lot of methods to implement. Let's walk through them: + +- `getIdentifier(): string`: A unique identifier for this model type, e.g. `DataObject` +- `hasField(string $fieldName): bool`: Return true if `$fieldName` exists +on the model +- `getTypeForField(string $fieldName): ?string`: Given a field name, +infer the type. If the field doesn't exist, return `null` +- `getTypeName(): string`: Get the name of the type (i.e. based on +the source class) +- `getDefaultResolver(?array $context = []): ResolverReference`: +Get the generic resolver that should be used for types that are built +with this model. +- `getSourceClass(): string`: Get the name of the class that builds +the type, e.g. `MyDataObject` +- `getAllFields(): array`: Get all available fields on the object +- `getModelField(string $fieldName): ?ModelType`: For nested fields. +If a field resolves to another model (e.g. has_one), return that +model type. + +In addition, models may want to implement: + +- [`OperationProvider`](api:SilverStripe\GraphQL\Schema\Interfaces\OperationProvider) (if your model creates operations, like +read, create, etc) +- [`DefaultFieldsProvider`](api:SilverStripe\GraphQL\Schema\Interfaces\DefaultFieldsProvider) (if your model provides a default list +of fields, e.g. `id`) + +This is all a lot to take in out of context. A good exercise would be +to look through how [`DataObjectModel`](api:SilverStripe\GraphQL\Schema\DataObject\DataObjectModel) implements all these methods. + +### SchemaModelCreatorInterface + +Given a class name, create an instance of [`SchemaModelCreatorInterface`](api:SilverStripe\GraphQL\Schema\Interfaces\SchemaModelCreatorInterface). +This layer of abstraction is necessary because we can't assume that +all implementations of `SchemaModelCreatorInterface` will accept a class name in their +constructors. + +Implementors of this interface just need to be able to report +whether they apply to a given class and create a model given a +class name. + +Look at the [`ModelCreator`](api:SilverStripe\GraphQL\Schema\DataObject\ModelCreator) implementation +for a good example of how this works. + +### Registering your model creator + +Just add it to the registry: + +```yml +# app/_graphql/config.yml +modelCreators: + - 'SilverStripe\GraphQL\Schema\DataObject\ModelCreator' +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/06_extending/adding_a_custom_operation.md b/docs/en/06_extending/adding_a_custom_operation.md new file mode 100644 index 00000000..a0657890 --- /dev/null +++ b/docs/en/06_extending/adding_a_custom_operation.md @@ -0,0 +1,119 @@ +--- +title: Adding a custom operation +summary: Add a new operation for model types +--- +# Extending the schema + +[CHILDREN asList] + +## Adding a custom operation + +By default, we get basic operations for our models, like `read`, `create`, +`update`, and `delete`, but we can add to this list by creating +an implementation of [`OperationProvider`](api:SilverStripe\GraphQL\Schema\Interfaces\OperationProvider) and registering it. + +Let's build a new operation that **duplicates** DataObjects. + +```php +namespace App\GraphQL; + +use SilverStripe\GraphQL\Schema\Field\ModelMutation; +use SilverStripe\GraphQL\Schema\Interfaces\ModelOperation; +use SilverStripe\GraphQL\Schema\Interfaces\OperationCreator; +use SilverStripe\GraphQL\Schema\Interfaces\SchemaModelInterface; +use SilverStripe\GraphQL\Schema\SchemaConfig; + +class DuplicateCreator implements OperationCreator +{ + public function createOperation( + SchemaModelInterface $model, + string $typeName, + array $config = [] + ): ?ModelOperation { + $mutationName = 'duplicate' . ucfirst(SchemaConfig::pluralise($typeName)); + + return ModelMutation::create($model, $mutationName) + ->setType($typeName) + ->addArg('id', 'ID!') + ->setDefaultResolver([static::class, 'resolve']) + ->setResolverContext([ + 'dataClass' => $model->getSourceClass(), + ]); + } +} +``` + +We add **resolver context** to the mutation because we need to know +what class to duplicate, but we need to make sure we still have a +static function. + +The signature for resolvers with context is: + +```php +namespace App\GraphQL\Resolvers; + +use Closure; + +class MyResolver +{ + public static function resolve(array $context): Closure + { + // ... + } +} +``` + +We use the context to pass to a function that we'll create dynamically. +Let's add that now. + +```php +namespace App\GraphQL; + +use Closure; +// ... +use SilverStripe\ORM\DataObject; + +class DuplicateCreator implements OperationCreator +{ + // ... + + public static function resolve(array $context = []): Closure + { + $dataClass = $context['dataClass'] ?? null; + return function ($obj, array $args) use ($dataClass) { + if (!$dataClass) { + return null; + } + return DataObject::get_by_id($dataClass, $args['id']) + ->duplicate(); + }; + } +} +``` + +Now, just add the operation to the `DataObjectModel` configuration +to make it available to all `DataObject` types. + +```yml +# app/_graphql/config.yml +modelConfig: + DataObject: + operations: + duplicate: + class: 'App\GraphQL\DuplicateCreator' +``` + +And use it: + +```yml +# app/_graphql/models.yml +App\Model\MyDataObject: + fields: '*' + operations: + read: true + duplicate: true +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/06_extending/adding_middleware.md b/docs/en/06_extending/adding_middleware.md new file mode 100644 index 00000000..b7b1104c --- /dev/null +++ b/docs/en/06_extending/adding_middleware.md @@ -0,0 +1,81 @@ +--- +title: Adding middleware +summary: Add middleware to to extend query execution +--- +# Extending the schema + +[CHILDREN asList] + +## Adding middleware + +Middleware is any piece of functionality that is interpolated into +a larger process. A key feature of middleware is that it can be used +with other middlewares in sequence and not have to worry about the order +of execution. + +In `silverstripe/graphql`, middleware is used for query execution, +but could ostensibly be used elsewhere too if the API ever accomodates +such an expansion. + +> [!WARNING] +> The middleware API in the `silverstripe/graphql` module is separate from other common middleware +> APIs in Silverstripe CMS, such as `HTTPMiddleware`. The two are not interchangable. + +The signature for middleware (defined in [`QueryMiddleware`](api:SilverStripe\GraphQL\Middleware\QueryMiddleware)) looks like this: + +```php +use GraphQL\Type\Schema; + +public abstract function process(Schema $schema, string $query, array $context, array $vars, callable $next); +``` + +The return value should be [`ExecutionResult`](api:GraphQL\Executor\ExecutionResult) or an `array`. + +- `$schema`: The underlying [Schema](https://webonyx.github.io/graphql-php/schema-definition/) object. + Useful to inspect whether types are defined in a schema. +- `$query`: The raw query string. +- `$context`: An arbitrary array which holds information shared between resolvers. + Use implementors of [`ContextProvider`](api:SilverStripe\GraphQL\Schema\Interfaces\ContextProvider) to get and set + data, rather than relying on the array keys directly. +- `$vars`: An array of (optional) [Query Variables](https://graphql.org/learn/queries/#variables). +- `$next`: A callable referring to the next middleware in the chain + +Let's write a simple middleware that logs our queries as they come in. + +```php +namespace App\GraphQL\Middleware; + +use GraphQL\Type\Schema; +use SilverStripe\GraphQL\Middleware\QueryMiddleware; +use SilverStripe\GraphQL\QueryHandler\UserContextProvider; +// ... + +class LoggingMiddleware implements QueryMiddleware +{ + public function process(Schema $schema, string $query, array $context, array $vars, callable $next) + { + $member = UserContextProvider::get($context); + + Injector::inst()->get(LoggerInterface::class) + ->info(sprintf( + 'Query executed: %s by %s', + $query, + $member ? $member->Title : ''; + )); + + // Hand off execution to the next middleware + return $next($schema, $query, $context, $vars); + } +} +``` + +Now we can register the middleware with our query handler: + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\QueryHandler\QueryHandlerInterface.default: + class: SilverStripe\GraphQL\QueryHandler\QueryHandler + properties: + Middlewares: + logging: '%$App\GraphQL\Middleware\LoggingMiddleware' +``` diff --git a/docs/en/06_extending/global_schema.md b/docs/en/06_extending/global_schema.md new file mode 100644 index 00000000..6cd8ce7b --- /dev/null +++ b/docs/en/06_extending/global_schema.md @@ -0,0 +1,32 @@ +--- +title: The global schema +summary: How to push modifications to every schema in the project +--- + +# Extending the schema + +[CHILDREN asList] + +## The global schema + +Developers of thirdparty modules that influence GraphQL schemas may want to take advantage +of the *global schema*. This is a pseudo-schema that will merge itself with all other schemas +that have been defined. A good use case is in the `silverstripe/versioned` module, where it +is critical that all schemas can leverage its schema modifications. + +The global schema is named `*`. + +```yml +# app/_config/graphql.yml +SilverStripe\GraphQL\Schema\Schema: + schemas: + '*': + enums: + VersionedStage: + DRAFT: DRAFT + LIVE: LIVE +``` + +### Further reading + +[CHILDREN] diff --git a/docs/en/06_extending/index.md b/docs/en/06_extending/index.md new file mode 100644 index 00000000..692a36e6 --- /dev/null +++ b/docs/en/06_extending/index.md @@ -0,0 +1,13 @@ +--- +title: Extending the schema +summary: Add new functionality to the schema +icon: code +--- + +# Extending the schema + +In this section of the documentation, we'll look at some advanced +features for developers who want to extend their GraphQL server +using custom models, middleware, and new operations. + +[CHILDREN] diff --git a/docs/en/07_tips_and_tricks.md b/docs/en/07_tips_and_tricks.md new file mode 100644 index 00000000..0b528683 --- /dev/null +++ b/docs/en/07_tips_and_tricks.md @@ -0,0 +1,198 @@ +--- +title: Tips & Tricks +summary: Miscellaneous useful tips for working with your GraphQL schema +--- + +# Tips & tricks + +## Debugging the generated code + +By default, the generated PHP code is put into obfuscated classnames and filenames to prevent poisoning the search +tools within IDEs. Without this, you can search for something like "Page" in your IDE and get both a generated GraphQL +type (probably not what you want) and a `SiteTree` subclass (more likely what you want) in the results and have no easy way +of differentiating between the two. + +When debugging, however, it's much easier if these classnames are human-readable. To turn on debug mode, add `DEBUG_SCHEMA=1` +to your environment file. The classnames and filenames in the generated code directory will then match their type names. + +> [!WARNING] +> Take care not to use `DEBUG_SCHEMA=1` as an inline environment variable to your build command, e.g. +> `DEBUG_SCHEMA=1 vendor/bin/sake dev/graphql/build` because any activity that happens at run time, e.g. querying the schema +> will fail, since the environment variable is no longer set. + +In live mode, full obfuscation kicks in and the filenames become unreadable. You can only determine the type they map +to by looking at the generated classes and finding the `// @type:` inline comment, e.g. `// @type:Page`. + +This obfuscation is handled by the [`NameObfuscator`](api:SilverStripe\GraphQL\Schema\Storage\NameObfuscator) interface. + +There are various implementations: + +- [`NaiveNameObfuscator`](api:SilverStripe\GraphQL\Schema\Storage\NaiveNameObfuscator): Filename/Classname === Type name (debug only) +- [`HybridNameObfuscator`](api:SilverStripe\GraphQL\Schema\Storage\HybridNameObfuscator): Filename/Classname is a mix of the typename and a md5 hash (default). +- [`HashNameObfuscator`](api:SilverStripe\GraphQL\Schema\Storage\HashNameObfuscator): Filename/Classname is a md5 hash of the type name (non-dev only). + +## Getting the type name for a model class + +Often times, you'll need to know the name of the type given a class name. There's a bit of context to this. + +### Getting the type name from within your app + +If you need the type name during normal execution of your app, e.g. to display in your UI, you can rely +on the cached typenames, which are persisted alongside your generated schema code. + +```php +use SilverStripe\GraphQL\Schema\SchemaBuilder; + +SchemaBuilder::singleton()->read('default')->getTypeNameForClass($className); +``` + +## Persisting queries + +A common pattern in GraphQL APIs is to store queries on the server by an identifier. This helps save +on bandwidth, as the client doesn't need to put a fully expressed query in the request body - they can use a +simple identifier. Also, it allows you to whitelist only specific query IDs, and block all other ad-hoc, +potentially malicious queries, which adds an extra layer of security to your API, particularly if it's public. + +To implement persisted queries, you need an implementation of the +[`PersistedQueryMappingProvider`](api:SilverStripe\GraphQL\PersistedQuery\PersistedQueryMappingProvider) interface. +By default three are provided, which cover most use cases: + +- [`FileProvider`](api:SilverStripe\GraphQL\PersistedQuery\FileProvider): Store your queries in a flat JSON file on the local filesystem. +- [`HTTPProvider`](api:SilverStripe\GraphQL\PersistedQuery\HTTPProvider): Store your queries on a remote server and reference a JSON file by URL. +- [`JSONStringProvider`](api:SilverStripe\GraphQL\PersistedQuery\JSONStringProvider): Store your queries as hardcoded JSON + +### Configuring query mapping providers + +All of these implementations can be configured through `Injector`. + +> [!WARNING] +> Note that each schema gets its own set of persisted queries. In these examples, we're using the `default` schema. + +#### FileProvider + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\PersistedQuery\PersistedQueryMappingProvider: + class: SilverStripe\GraphQL\PersistedQuery\FileProvider + properties: + schemaMapping: + default: '/var/www/project/query-mapping.json' +``` + +A flat file in the path `/var/www/project/query-mapping.json` should contain something like: + +```json +{"someUniqueID":"query{validateToken{Valid Message Code}}"} +``` + +> [!WARNING] +> The file path must be absolute. + +#### HTTPProvider + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\PersistedQuery\PersistedQueryMappingProvider: + class: SilverStripe\GraphQL\PersistedQuery\HTTPProvider + properties: + schemaMapping: + default: 'https://www.example.com/myqueries.json' +``` + +A flat file at the URL `https://www.example.com/myqueries.json` should contain something like: + +```json +{"someUniqueID":"query{readMembers{Name+Email}}"} +``` + +#### JSONStringProvider + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\PersistedQuery\PersistedQueryMappingProvider: + class: SilverStripe\GraphQL\PersistedQuery\HTTPProvider + properties: + schemaMapping: + default: '{"myMutation":"mutation{createComment($comment:String!){Comment}}"}' +``` + +The queries are hardcoded into the configuration. + +### Requesting queries by identifier + +To access a persisted query, simply pass an `id` parameter in the request in lieu of `query`. + +`GET https://www.example.com/graphql?id=someID` + +> [!WARNING] +> Note that if you pass `query` along with `id`, an exception will be thrown. + +## Query caching (caution: EXPERIMENTAL) + +The [`QueryCachingMiddleware`](api:SilverStripe\GraphQL\Middleware\QueryCachingMiddleware) class is +an experimental cache layer that persists the results of a GraphQL +query to limit unnecessary calls to the database. The query cache is automatically expired when any +`DataObject` that it relies on is modified. The entire cache will be discarded on `?flush` requests. + +To implement query caching, add the middleware to your `QueryHandler` + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\QueryHandler\QueryHandlerInterface.default: + class: SilverStripe\GraphQL\QueryHandler\QueryHandler + properties: + Middlewares: + cache: '%$SilverStripe\GraphQL\Middleware\QueryCachingMiddleware' +``` + +And you will also need to apply the [QueryRecorderExtension](api:SilverStripe\GraphQL\Extensions\QueryRecorderExtension) extension to all DataObjects: + +```yml +SilverStripe\ORM\DataObject: + extensions: + - SilverStripe\GraphQL\Extensions\QueryRecorderExtension +``` + +> [!WARNING] +> This feature is experimental, and has not been thoroughly evaluated for security. Use at your own risk. + +## Schema introspection {#schema-introspection} + +Some GraphQL clients such as [Apollo Client](https://www.apollographql.com/apollo-client) require some level of introspection +into the schema. The [`SchemaTranscriber`](api:SilverStripe\GraphQL\Schema\Services\SchemaTranscriber) +class will persist this data to a static file in an event +that is fired on completion of the schema build. This file can then be consumed by a client side library +like Apollo. + +```json +{ + "data":{ + "__schema":{ + "types":[ + { + "kind":"OBJECT", + "name":"Query", + "possibleTypes":null + } + // etc ... + ] + } + } +} +``` + +By default, the file will be stored in `public/_graphql/`. + +If you need these types for your own uses, add a new handler: + +```yml +SilverStripe\Core\Injector\Injector: + SilverStripe\EventDispatcher\Dispatch\Dispatcher: + properties: + handlers: + graphqlTranscribe: + on: [ graphqlSchemaBuild.mySchema ] + handler: '%$SilverStripe\GraphQL\Schema\Services\SchemaTranscribeHandler' +``` + +This handler will only apply to events fired in the `mySchema` context. diff --git a/docs/en/08_architecture_diagrams.md b/docs/en/08_architecture_diagrams.md new file mode 100644 index 00000000..e4138273 --- /dev/null +++ b/docs/en/08_architecture_diagrams.md @@ -0,0 +1,123 @@ +--- +title: Architecture Diagrams +summary: A visual overview of the architecture and design of silverstripe/graphql +icon: sitemap +--- + +# Architecture diagrams + +## A very high-level overview + +![A high-level overview of the lifecycle](_images/high-level-lifecycle.png) + +The schema is generated during a build step, which generates code generation artefacts. These artefacts are executed at request time, meaning the schema itself imposes no penalty on the response time. + +## The build process + +![A high-level view of the GraphQL build process](_images/build_process.png) + +- **`/dev/graphql/build`**: This is the command that builds the schema. It also runs as a side effect of `dev/build` as a fallback. It accepts a `schema` parameter if you only want to build one schema. + +- **Schema Factory**: This class is responsible for rebuilding a schema or fetching an existing one (i.e. as cached generated code) + +- **Schema**: The most central class that governs the composition of your GraphQL schema and all of the connected services. It is largely a value object hydrated by config files and executable PHP code. + +- **Plugins**: Plugins are the primary input for mutating the schema through thirdparty code. They can also be used in app code to augment core features, e.g. default resolvers for DataObjects. + +- **Storable Schema**: A value object that is agnostic of domain-specific entities like plugins and models, and just contains the finalised set of types, queries, mutations, interfaces, unions, and scalars. It cannot be mutated once created. + +- **Schema Storage**: By default, there is only one implementation of the schema storage service -- the code generator. It produces two artefacts that are accessed at request time: the schema config (a giant multi-dimensional array), and the schema code (a massive bank of classes that implement the `webonyx/graphql-php` library) + +## The request process + +![A high-level view of what happens during a GraphQL request](_images/request_process.png) + +There are two key processes that happen at request time. Although they're run in serial, they rely on state, so they're depicted above as separate paths. + +The controller receives the query as a request parameter and persists it as state. It then fetches the schema from the schema storage service (generated code). Then, the query is passed to a query handler service that runs the query through the generated schema code, into a stack of resolvers that execute in serial, much like a stack of middlewares, until finally the response is generated and sent down the wire. + +> [!NOTE] +> The concept of the "resolver stack" is illustrated later in this document. + +## Schema composition + +![A diagram of what makes up a GraphQL schema](_images/schema_composition.png) + +The `Schema` class is largely a value object that serves as the air traffic controller for the creation of a storable schema (i.e. generated code). Most of what it contains will be familiar to anyone with a basic understanding of GraphQL - types, mutations, queries, etc. The magic, however, is in its nonstandard components: models and config. + +Models are the layers of abstraction that create plain types and queries based on DataObjects. Imagine these few lines of config: + +```yml +App\Model\MyModel: + fields: + '*': true + operations: + read: true +``` + +It is the model's job to interpret what `*` or "all fields" means in that context (e.g. looking at `$db`, `$has_one`, etc). It also can create a read query for that `DataObject` with the simple `read: true` directive, and adding something `query readMyDataObjects` to the schema for you. Models are described in more detail below. There is also a lot more to learn about the model layer in the [Working with DataObjects](../working_with_DataObjects) section. + +The nonstandard "config" component here contains arbitrary directives, most of which influence the behaviour of models - for instance adding plugins and influencing how resolvers operate. + +The primary role of the `Schema` class is to create a "storable schema" - a readonly object that contains only standard GraphQL components. That is, all models have been transformed into plain types, queries, mutations, interfaces, etc., and the schema is ready to encode. + +## Models and model types + +![A diagram showing how GraphQL type schema for DataObjects is generated](_images/models.png) + +Model types are created by providing a class name to the schema. From there, it asks the `Model Creator` service to create a model for that class name. This may seem like an unnessary layer of abstraction, but in theory, models could be based on classes that are not DataObjects, and in such a case a new model creator would be required. + +The model type composes itself by interrogating the model, an implementation of `SchemaModelInterface`. This will almost always be `DataObjectModel`. The model is responsible for solving domain-specific problems pertaining to a Silverstripe project, including: + +- What type should be used for this field? +- Create an operation for this class, e.g. "read", "update" +- Add all the fields for this class +- How do I resolve this field? + +All model types eventually become plain GraphQL types when the `Schema` class creates a `StorableSchema` instance. + +## Plugins + +![A diagram showing a few of the plugin interfaces and what they are used for](_images/plugins.png) + +As explained in [available plugin interfaces](../plugins/overview#available-plugin-interfaces), there are a lot of interfaces available for implementing a plugin. This is because you will need different types passed into the `apply()` method depending on what the plugin is for. This is illustrated in the diagram above. + +## Resolver composition + +![A diagram showing how multiple resolvers can be used to get data for a single query](_images/resolver_composition.png) + +Injecting behaviour into resolvers is one of the main ways the schema can be customised. For instance, if you add a new argument to a query, the standard `DataObject` resolver will not know about it, so you'll want to write your own code to handle that argument. You could overwrite the entire resolver, but then you would lose key functionality from other plugins, like pagination, sort, and filtering. + +To this end, resolvers are a product of composition. Each bit of functionality is just another resolver in the "stack." The stack passes the result of the previous resolver to the next resolver, while the other three parameters, `$args, $context, $info` are immutable. + +This pattern allows, for instance, filter plugin to run `$obj = $obj->filter(...)` and pass this result to the next resolver. If that next resolver is responsible for pagination, it is not working with a filtered set of results and can get an accurate total count on the result set. + +### Resolver context + +![A diagram showing how some resolvers will be passed contextual information about the query, while others will not](_images/resolver_context.png) + +Sometimes, a resolver needs to be used in multiple contexts, for instance, a generic "read" resolver for a `DataObject` that simply runs `DataList::create($className)`. That `$className` parameter needs to come from somewhere. Normally we would use some kind of state on an instance, but because resolver methods must be static, we don't have that option. This gets really tricky. + +To solve this problem, we can use "resolver context". + +> [!NOTE] +> The word "context" is a bit overloaded here. This section has nothing to do with the `$context` parameter that is passed to all resolvers. + +When resolvers have context, they must be factories, or functions that return functions, using the following pattern: + +```php +namespace App\GraphQL\Resolvers; + +class MyResolver +{ + public static function resolve(array $resolverContext) + { + $someInfo = $resolverContext['foo']; + return function ($obj, $args, $context, $info) use ($someInfo) { + // ... + }; + } +} +``` + +As illustrated above, some resolvers in the stack can be provided context, while others may not. diff --git a/docs/en/_images/build_process.png b/docs/en/_images/build_process.png new file mode 100644 index 0000000000000000000000000000000000000000..8e459921bea8e425ff738da859b2e13d5a20faa3 GIT binary patch literal 811506 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

A`P^mOoGxKt$1+&UCC?WsAi4Pv^H#MHglz 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/en/_images/high-level-lifecycle.png b/docs/en/_images/high-level-lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..6697287d6beaff9e3612f8fbad30436c3747294b GIT binary patch literal 16169 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 literal 0 HcmV?d00001 diff --git a/docs/en/_images/models.png b/docs/en/_images/models.png new file mode 100644 index 0000000000000000000000000000000000000000..e6962287db9d5d7eaa9979cbb07d4a13491567e9 GIT binary patch literal 34060 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 literal 0 HcmV?d00001 diff --git a/docs/en/_images/plugins.png b/docs/en/_images/plugins.png new file mode 100644 index 0000000000000000000000000000000000000000..4df955e68c21b1e92a96b06e01b64a15b91ec781 GIT binary patch literal 65860 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 literal 0 HcmV?d00001 diff --git a/docs/en/_images/request_process.png b/docs/en/_images/request_process.png new file mode 100644 index 0000000000000000000000000000000000000000..862f614d78a8c98e579f02907795ceb0618b6fc0 GIT binary patch literal 54606 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

LWxL{aqrK-z}ta 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 a{nML0*IiBK0z*!LKRFp?X_Vw6um1ujXQ&1M literal 0 HcmV?d00001 diff --git a/docs/en/_images/resolver_context.png b/docs/en/_images/resolver_context.png new file mode 100644 index 0000000000000000000000000000000000000000..cba31c2c2225a626b97fa535d94a6f7026cc4b08 GIT binary patch literal 64652 zcmeFZWmuG5_cx45C?X&rjiMke4MPe@58W|HH%P<4fGC2}2-4jQ$k0d(sC0J@A<{V# z!$`k_%5~ot&wCv2xA%FD=lJ6X&)IvQd&T~(wQH^Oy^4|yJ{|=g78Vx1oUD`@7S^>w zEUc>yI5#mRQsM8&G5=k+d)7}P<~Nkw1)Y6T0+ z?I{-4+6yc!Ks*)}*~{cwRbfnpin)%Q1rUhEjCsbvx_X5O>l)_i3g#bHkTurz-_KZB zn4U0y*V3>2r#AiSMeVi1^lKN-R~yb7dOmi?#&n`m`8vwPaV zJa2#{>H7V)8uVa3RJhXCkeF@;;@bK_p_uyuCbhhN+6ciNXc*@1W#l?nc z!RF%S;A-s2=HNpAr<03*q|9ARovmNGT01(>o%d^O;^^io^6=p~p@07V@abx8@gGVK zE`P!@hh|1W0#Ncy`J zBdRE#FvmY?6U8G3&0&-*jwL7cOvCfaMhbQ^aSK@+EqrD`5R806EmiU=9cPer{L5=R z=9Xd|6}xnuQu^Z?8shgz2%qQN!V7-&PGc25mNj-(kDH|6ELXg^F)*#Sf!n0SN`1`>-x8F zEEC?1+JKwSF7l2Gzo=!L zP`oJ6Fs`5Ovc|-VcBubbf#-erm(ah`!LMV_cy^h`S2~MA7pne8PGcFYQVMrNi8q&d z#3gWl%V7QzH!3kF>DH6aS~E12Qn5vomSb#&aAgOi0dUd~ zq*Z3=vg$GI@mLR1! zG@T#E?0gOL_vL!8vaV>6^_ptODR&)F^2R}S^ykvR7+(7wONh~-p-DvY2f{b(aYef2 zzgRxZjTw$v22+W+>j4Z@L0gSETFt4JfyjKbRB?G2?iqJuG;j(1qi<)ihyD4j#n@ao z(`@$<3DEOBkHW^;=6I0g9{<+(MEUYUkZ#fj@(8);y}5Q+8QlJM1P_6<4&U&HQ6CYc zMAG&&fW!3aOgxviny539(iw)T@UJg<}ZJJ z%$FeXCtHR!{Cob1&&ZmTinhjGG!kcp2f}vy=c2dzkOp+URU6mQ5(Uoukpdlz#+LJJS1exf%B}PQZ`E^w+!S=R!nMhxz0KARlgc<89)r#6Z-B&iU* zv3oDdMD?*5!XN0oU}o1}W_KIkU(ej7D;*)<)jG|XGn@a(c}iGEj-V@!rBEZZ<8fgX zb)0(M8?l~_G=!!*s*3o5qhr^ttc98+`OfxL@5SNbi#M?smP=e)_Q3!p~QW!{*zhe-%4Vzy5N|%K;{5|lB5ssjh2y%~V z;=|f#&G~Mzs)-YaO_k>$zs!OdE@f1-Y1i0B+!Z8yq)_oE1~=P#rJCJO-3nDkl1j+a zD&yviKE)KZK6gTyn`gVgn7BNDnbe$(>ZvuvR0laPu&_N+-m4C&E%$9!R2~Bau!TI_P2Do1|{x4fUoeaGKyNcW3?9$-^P%~Ka?8Gr`&+mvMf!8m| zVB$pPVEKqL*>L0Nz6)f>AJT|w-gQ2o`5*|yi8R5^_>}a zDW&qG=dlMGpLYZ0*quF+nK`u!{-LTUdgf4RxZz|9)Rz{?3Wps3$WfzX&MUul7_WSi8{)X5%m-)GtJf$%bPR>*`9YcUTs}+ zl%3+`-*0|Kel!+TX11QTRmNekTY9etNlopl)Y~x-9c12pj9#RTDBDWu_4CZ@@;qAo zx^3vgZ{E2$#qeRZJcvcMLqc%lfb4xIyE>?ddEO7ffjs%lLKEEvXp_wg!Rs6#w#@0- zEk;&aW*Eae6@c_U5TN<;d-Y|rUmSIdg|ldHdv-0lI+8$5g+)@5!thm2P+Ez4?ukpg zuK6si@pJl~jkbYCzkvJH@X28SHP@mevaEN%xxp4O3(qTB=v}pui6{(~M{7M_SRFu^ z&2)a2B?`-@@bR{;DUqOo@i|U-%cmaN721uveOr%g$t>@p^!QjRAzVCSLVHITU=p$+ z{Ib)~x3z2JkxUiq;4IbdnE4EWtwT*w$)1gVckl|~(0+TeHna|XYj5sNM_tc>SyY`q z8NNnyaU;4ZOs!|{YgTSVM4B)QH3+nhx+_k5N6`~nX6|w(leCa^)OF*NGXGj>TaVN8 zsmD6MeEjv<*;vs@F0Pq|djdfbX&>3&j7@s5@nt&RD9~e$bM>}`n~$Rte>l%Serpyq zH*Q{n7Rih~TRedB0X909Plui#Sc_{8?BbekyDsivwTW?P&=JKu&FL|rvrCFQtJm2@)Zeze`Y4pqpy6|7qdWdT$| z>3S$*A~)+II-w}+AMZ!l?OEhRiC?cjy&6nF?DmXh9H( zg8o%RwPV~JYJhBCs>miwj10jD?=yr(p0qKg@pnW6ySDa+9t1&G@(rPG$%vjGELyyZ z0{xC%)y3)z!&-hJHfgtOyMvYLUYr)H7Nl$NU9FmPo1F|Y1jC(tu_@juHvlK>RUjuR0-AslH*^;5eK8`Ndh3VQ&sMO<3CVy~4bXRp6P&bs4NsyCKqv~`idBAVoh`MR zN+-tyv#s?iIc5!`RUY}B#n2D)c@Z6D_O}-D2`hL_*Ys5<%MYTt%$B&zEUH7YTs|39 zTfR*e^lqIRUyjM2x{)p0aDUaSL%nKa&9H0m(3N{(JGHJRn*_?z9p;sBJYm+CF{G9w z#lAXNAL+wq3!@SyLce&fT%tK`<(=vkmS3N(<$GZ7mHcW5U$<}ej6=so;|{gkW?`n9 zNcG#WyIY8c&s5xgMvNzJ{iEu+vPuV2?-ncoYq zYW(ncWgVTCJvmY|{*`Pc}DL6KLXxn^g-F!f)R_=TcDI3Dn@vbA%U?gz$qJPkzqr4mDlXwx+4g6s&dH1JvRC}WU}4k~+l0KWPnK=dhocF}=G2aL zeF1bgxl#KzIAx}e5r<=;W@TGm$E zb(>~CVpdSPVF=s;FHT8CJ=%9kUw>(WR$g~Tb@K3{V{{jc=tcdEgr2j*oWnxn(YYFI zzWy=nDl^l``V^=#3AZkP)XwB^TM?EUAM^{n^cjIydW*u&RD{Ulmx0fb-Dp3^Go|G4 zIws`HxlasJzoe~oKV{KrQNR8=yB^bL>NEI|;Lfa_i21sEa^$QwRV+g9UQ{fZluOs*3 zBF)pdJ*{MI*}O)Oo3duF#Q`e#CTNCeQ0Mv;&ZU*_Fyo@;0C9n9Cuw>@-$6ZtlENQ7($uR9IbQYsgNWvP@~`Z)}gr{*^!+ey~Q$R1tM>sS!W894V)XZ_N;j{{_dNT9fls$ z<^Pv8-z`OD0!M_pIdZJYF|vebim3RE?$%`;Qf^F`mpRRi1_HJ zaK6*VSfhdRoLh2!^h(df(m}Ctx6(;C_Lz%zNnbCoDvWlm1I4?X=!OJV`tU#Y66|*q z=pe}%xPu*0Q=Fn&1E&{FO&m7_9T!B@kpNi?jL+Qje`zQeqG~4k7=SDl zJ5%?NyMge+&D!J%A`f*+*lWelKk~P4ucbWm_nDZo6a$ZnQvN6e@hPwSiiT>my@Zlg z1QWglfVfMS0(PO;+Q1fLa_&*}CP*6fe65z}Xr);b=la_z>+2uD4@Y)VXlq?IvgJ1f zD38`f*H_guVhx1s1E1!<>adlt5CJ~dJ&GIE$$+k}Yw}#3joIA;02b4ZT?zKtU?-RJ_C4xP%eHVihy+5mm^6(Ha zIPhiEbmmo)izO!Jra~%TFE`TnmJX|bdeDfQAS$i`D-gXdTkyCVsRo`Jo)ObP7f(^< zx+~{6oOE~?<*L;s2goy#kLAyQ8|Jai%`=?L4=|X`%>?FVKa>MD`JEkG#_=?i#2YCG zE}x!?3Qb5t9A$aefBu9Sn9A3=7nyi$+O*Eu{P+Ot78tEg6HVNBy3C=-XUdCj=qjrD}2Y>RSS{8U35 z>wuzXKv?wYMpJ1QP(ykO2(=`~ck=!sB`@&6*1xzZ^(bIy`J>QT>5p=gsI|eSfStqg z_!X|DS>>0B*7KjZr=H)Bi_7AQNg*e-j3j&Q`(nnO~xeF06y1@?V?^C=k`D=cSl31 zK%YjI7bm@e!mSDd-xPLhKRv7J~?kef}w0jDMybt6sLR6$5 zo3!Si)~}=kH5OJ^clC82YB_M3$Vj@l+2saX&srWcCyvY)n9`@HsP@^6?0U}II+-%0 z{6q+f&JFg8f@jX|tNQA09`Ey>9(#f|LmsqpAMN2kURZRsvK*WW~%E8k()h{tgL_8L&y@$@gz>>X5y|A6e8l$ zIOX+RmGTbc4eo={#RWa*Blem$g{~6`CuAqwSZ`lvC4xlDL=#Tg$mVLk;VO*XA-MRs z&>%xQ$JD^jAQ`ZS+cVCu-;q=q*B)dVH&Ggv_@H7nY<5BgKz){z$;+hmWD=!e&;$_y zMxW#dDNCLvH?yn(hn+0JS@|@#@!Npm_(Ewqa&0id+%(OiHGGr;0WT50`aZ9vO;XNs zOFeRbfpvYDw1X3#VCCjyeKeS4mZB%MTtDI>^g>wF=#F(tvJH?cQDUFL_v_$vN9xX# zjBAC<{p8+1V0IETM=y?SAWw#;N#qAKrFsfuhKMA0ylX zRa(t)pY5sKh`i$GW;Iy*BDZ6{EJeEzgXpjO%6;~Sb>7IaM(IZ7Lt(9#WhC}U?Zdm0&db~Qm0cUF4#9R*tqEp>Z&cV+C@GiW^F+{h=!?T z=w^7buZwWgA7sPHVfm&UMu*OItRPyn{>pgvD}3{m@~MwMm&+55ige($&#p9@piHB! zIs|?ct;Wlf$k_l=cS0tLgJyedm#WuY>x=SMw{MXv!x(HUEM{Dj^MWPubJ*;^ISEl_ zK#jj0f;T4bPeA%Z@z1=f6?skg9_OYuMG?NE~zsSbgEyrvHUYaOM zT8{8-0LV*ziBX2@Wk6{ZWr}Q!@h!JZuEzz^q3ap~>US#FLF_M{zaLMZ+FP^*JEVxT zPOP~D@1e@&6tf|DoB(JxpZLzcaZUh2D_GUP7I@Um^;H-+gx zs${flhB8o)bJ-M7V@#49)ygTDOBN(XT9=v}%S_XF2US%dyD^qkJhjvAI&eTaaw~6M zDQW8IGrsP6UeN2D7n}V_D!jA%(3cu@t&ijen}Ok#ye>6sVVS|5ZO8&*o~gcxwp~N` zmq{&NlCMhBnxSn{raP!WZIS9!{*2yJj8zGf9^%+qdV}lNfwfiW@?CP-O8nE@U0FNC zR$WdmbtB@WLzm%}ZS*Ue%;r&}cq9>NcSeh5 zPdVNnrueLWl}^?4g1GzYr?RY%F*B=6SCr3HaWC1IH+lnSvR$fe?iZil$qTo$l>7m7 znOX`Esnh;-@Nyx3eTlpApoek9wO9+Twc;kboXX}QdQ`J}x0}59J8Wi*rt!%Oz84Uj z`Kb~{SL%Ij4}qeg(kueV^z&k<7u*%(y4McQZ57+4D+mp1)f5e9peb!>FqzHXFuaH85~lg$blMXd4-V;5<-bj1?U`s zp_GkVw}G7>=j)${82Kxa&r^anaB$dmatkCSqhP$c{v3rQj~7E3H4qs`1tmxQmInEj zbwr0n-=y2Zp*X&cd0ql0iMbsats)?~VlSskxrP-Yg&JWlLhQn!gOi&{nXMB`%7G#l zt*O388jr0JCE~&L0ZNp-#<5}3PztB$gJlS}D{uj&w>-;XCwtS90KU6&kZ|m~I-_1YSnk%AX&u z-wsMu^rbwWO?cecV1_J6l|})qOd^~dtCieE!aawQO2yT=trpiNSgh(ZH}zxU_*3m{ zxEG;un#6Zk@pVn?Pe{k2^_7)N0&fEzyamW)HF{BKE}RM@LMM1km7-00dDtv z`}U}g-;ZEM4Y1bZod36ea{$DAzs8L@nPJiYwzye(>;19vvgL?u zC|ZW2oFJHoGx?OJQVBTfsyhASitU=iw?GjDMg9vDSd;(0G7_awee#%^V}s$EpRai8 z=QVsL{rnI3^M++8j@3z>jb(9rR_)Ja(-o*MH(?JOaASwPj|>n5*}6HS?=(5oa5=2F z5+Om#hz0q?f$9`O83OlrrTm9C!s65=O-E){=kRb*MXGsH+a!e$v6%&>l0DZrqQOzm z7l`s&J?&2hJSX$FmP?$U6J5Y6q(x%?*I2~#5q zsCPtyNp6xHo?BLjNitFCT7_g=S1RA@;|Wg0h6X2djO*lm)aQba!n2}z^~-g^!acEt zGa&o~2R)HALF};u&sY~x+kNxOMnx@SqajgpQS*o?4>wM)X&hKgK&8zzg>;I_>&I+) zayh9yGX}gU=$hm!kDhC{{f54cOBDQ^og$IRUe;_`*ndE2=9#urg%2p^&uEsLjEQS= ztOmV=^uIJ0Ig643Y<)%`)~{6w=Rn9xemot&8|*z+@tObjH4Q>Uz^^w~23Ivu401Pe z!Ov5q7(1+k=~YIWRs_Y;M{^#u0^GWLMcV42qnsa=GP7G)ew6WpN$^UZ+HYyqwQ$qt z&0rN;k0b3oHr_bTtx+=!LN@;K8;w(?i@d6N0wPudhfT1 zgbhcosKoD92!Bf9epPD0#AAa`crb7nwq1)cdfYvypWxWmNCg3a1ihwifOCid~y-Hw6{|16F z!@e)kX>|Z!T90!DR&+XWymFwhk&Dc8EJ0HISX6{(C&1rK_)9XjbWE-bTH2LBe5zOX z3~d06rHO&}3Q;@UpfLx`A=uaACb=T!o?w2M>&M$x=nM^J3bcyJQASVM{_#B?k`S%9 zCJP!(R5EDQ`7z9m-G=4o55%Q;o5#P4;Q7*X%8s=TF} z_DBhIgKOY51{76Ci5(8>81~H|>%Wa~ti2s9k?)H;#fKVSe^w&M zf*m&dpcba&vHKO`L=b(Zvq)q~0^B#C9$FjcZ}l!r)qr>@v1QIb=Ve6^(;El_CB-y9 z7jtIHpZOjpEn_y`>3z)Y(xNI~Eoj|4sW^?hj8e(+*9?aXY+R>`1DVz}I2&@m9ku8y zbo^puo&c7|*3vXo7tb3#wSGWSZBu^g1`IPL6F#Lh{UEb?{E3-PC{eM~+89Y`3`LUz z9PO3ojm1oeL{}@G62un-sSUYKCUekydP0`SIugE`T&d6-lx?KKUR@4YsRN_Z&P`pLeoJ8l zZ&V-1mK=#1xD_|Kxdzch%A53b92bD5U^CX#Fpx-Wph_YB(cs9y;dEjE3U+`1b+nKI_7TiB6t} zd7BXa@?`nz49cmj^wOavm4&h+1$M(nMWE3IJq$>3sg0Vpc?S~p$hbYqqWhULPOjR+ z>}l#(o46oPv*v=nc5_ce&yS4ML_&zGyhgV>+x!rRsAmzo-sq{+_&)p|9WcZyR}ybe zr&mLV-)MdZk0Cewh52j4pf{UwsfeA$PRBMVNOKnevxotR+4odkque|^p!DS(h-FC7 z=pqA-XP{?q;je$v%}iZIb7wBT*7cuy8~WW%)H%mPxz` z9r{SlQn@gVbl&s*ndxdg`05DHJWOwWHi z=>8?39ZCl;wtfJcc4IA=)S|yXvcwuv>4ywLg%i)Xzd2Bbx7(~GXd;ZiS!i0>RGCwI ztl2VWX99I912qcCcq2s|zWJl3+Q2SDNGQ_k2>Bc9_thUH8?q z*llZIn9Dq)Z3|qp?y*7Dwp|RHCiL8ZsgHW4S<(cq7?d2scTOAx&0oWVpvc$M^zf>; zKW099H|?##`>FU(v#R=slZy0Af|p7&oU;_IrW%)SGV2KFrC+o1gar%YTkDsvrptXM zMw`LZ3wQV?-iP-LzT|7$YuzE{R)*?H;KuGPsf(10^-Zu6;3wOnYjU3p4s2W7tij!` z=NF?b$;LvQs#PO|ei{>N$Ko8#dJ%3+xX(^+ZK*XW;qG>fu`E_HvJ>?*tdFnlX1oFP z3yUbWRTSipz3g1rvp1PM-i$$2jZ>!-KF$>|myi-));^gFqLlzNLiyP4jRgcKsph>u zFzYv0n_q+3J|Dy(ET+&yd^Mv!GwWXjk-y_T7@LQkSa*5$xwEV)_c9xZZGSlJRQ5Y&Mf)&khU1t40y^#q zHi8JKWWTU-*uWr^*h;I`{uHvQv1-*?0Mdb$O0DnlN{0wLx3H*v!I38kT{G7_GWi-r zWZGJy#Rk&9>2cbvs9E0Mo2OTx11wPa48f_aa`iy9m?`KF*ENH)L!&));zgN+M~_D z{RzzEcAU@feVZS&?ZVyDQ&=6xXUd%QiIL~7I{y0+r(BQw9Gj9Bchpe5(73YYpd_=s zCX(zT!Y5(``ONDcsU;onG?Fp*`qm;Qi8-SkYDJ*lRE7nQR~|fjB6X+Z74O_Y|rZk3HrIYY?cc4S!LQsuX! zNW$+Px1CN>-1fI2vt{UPAN#|s5W*0qQkFF--Dg{{@b?zbhnw?B-8{VVD$6r&srWXn zCcu*Hxv9kC{P`~1Da7%}Vv&Lk?aFaJIx*4`*q}M?`2m%fF>{v5F!xbZSe3(8O_A92 zu$J{R6qf)nkOeB$aQ3Wemu($RW{!m$)gkMn!Q6U)2`P@MH#!1hW`0=4J$}eN5 z=!hackN&BRmdzZ~*7KW9FcCW+`71XtIqG|OLdE1vQ9)a2969%@?c*dr2S+@Vh3eZ+ zd8_vk12CgG&|<*IG(-}Apw#$O5uS*iF&I)B$u#ch+qb#v>ho!|)MEZY(%t7`*t@Ej|Ne=wFG&k_`^x2I6WlAWG4SsfwfR?kSAH_{=R4S5@!KI_!);T z*YkPLH=MUycpvDT)PBO;W$tGTa66uv2jNXkHUv|PAvf}9+T$(KghG60kv#L_*h$-4 z%)c6FC#3;1=#Uh=+~LPr_E)Qz7xBiit=0~-hh~kn>F@xS9P56H>n$~K9i(_gyL`X{WRg0%uNQksA<_9=?9*Pj+3TTIlmregG4cD zORmMaiLeeh!RXICyQ-mzbyI$OS_l0BOHev>b;sPmnp4L$nxwFO5_+i-*Wmkp`$xe| z&QtG{reVc$@(b@Mm#1B5KdHCn+XxggNP;_YaKn-ZIp1@5u$fDW6_UeJ8iskc`-}Wc z&HKj?o0f*?8p3*j#dc{gCqsyn($OG_S;aDbRqJLl!O5^2AZ>k>+lj{1FfMX>_w**Q zg~3-PNT#`F3{=Gr@;afa<(+OD*r#Mb@spY!l)SG(NoYR4cXz^Xj}OKK(ukS0zP|n{ zNkPs{eP)|={h$EHZ_sRdgta3z_s95{Ymqg}ys8%Grej@sZ(p&Nj}4>~WOQm5EyubS zUobnR)R9l_J&)U@4dnZgJF=r+yhcc~5S1d(Um87$y(WmXT!M~R+uFoBK?ryzK8nV8 z8XHVq!&(kV_95=wPC@k^FnMnZwasr9dBk~WUH4R0n!Ses-*$57Pqqg%IAOwWniGhJ zxfQh>@1`V4vB6AL3u7ay_(S*;N(5zMpg%QXC3@9Lnj7BfXAYeFO#oQ_XrT+GO`wvI zOIh9OAqOL@GRduY94{x!C!{uxH>m*6yoXPCxZ8M*Nz0E{cz7})wE6yZEKG`vo{VnWDz>FD_*9xv>LIpU$a<0yqW!r(`T)U%Jn~(6IrWAW_@lyX5Pz^w@nhBi zDYFW76f}x9QBm=20oV<)xtYfitH%W^ zL_;z%8D6@Sj7rSiZ9L@etA)VcHY|$db>m^qGNu`mW8)n3=?Fp_pRq$_>)R^{{YJOOFDhC9wJ`+gqt(EPHF#6q zAD)~{(r92U0C0!Xr{v5QNG z4nn~t_4St5Gs81bygg7v+oLEo_3gY=WBXkvZsONsL*SGh^WcSwv1cSzr$y#xUsBJM za_#*UX{ihjW6ox~^H;r}8{tk+&Tih;k!ob=Y)!iXaCbg@kt$d3_SQHZG?k~QgR*!0 z#6PRxsMVnBpTgODI+;sjJZtSS*>D$~f~t;KuFc*{S@xYfPVgRkxs_63tv~)=Geu7t znDzp5LoKZ&k{WH{5JO^1;Q99Ix(~3t&9x$<9xMsvhhd`O-U}3zrkIjGHPwzzl+$`{ zYl0pqwejyZIqfjZ|hc+4~{ELw03wnGJNzY)tuG&Jbdpbf{dE@ zdS;vMz9|{Z8NlJ3K3kyuOzak*a(H3R{*$)xe3j0G-_HP&w_tl*3kv_2vuu?c3d9O_ z+%5%6To2xWH=Suh54Ma-6*bBx3*>tCNV;PbobO++yMrwR60jRukWE6vc3Ctah&-AJ zafy*?JCoST22G*3N4ZwHY*{}PZnV`>GfqkHioD1lA7U+f&&gK!pwhocTc5jcN$gbQ zoBzJksO{$hCI3uQ8e%R~{TfSY?gMy2i`pRetx>9|vrw54?fhKEI@y)FKbM-Rv&}KI zh@9K%Amw(OmktZA_14b7HU)gI+Jxzo9>UYJm318flKftlnzqg-NBDemeKv1s>z-us z2zG3`){6o(?~n>!mv92gDpOG8WDMK|6i*ArHCM^xy&sU0rO2g{&1a}8#>Ae)ufNo* zW-4tP+RlBGC!9F`BSr!HDgb-U!(z%LdmK({AEPZSp&1PZ!2=!eSTbUU_k$!4V)p!% zlwJFdzKWpcUWSu@!v7Oal!XEx?+2#nxGjxS{Ti5cJ|gBeA30n&;T*g!3aAWWpcwR0 zK1pCuCEp3H#vU}P32oTIgss{Q<}iAXMt3gOmlIj+xwuT8B`2_F4`8BhTDmB_gJc2b zo_+DxCES4R@s??&`Y9NWTSX=H2>ko+$~tI$@25)9i@}221f3xw9k_ar1D!Gg1d|j{NRLHX6MCji*M^?2h*f-EVEB%%<;oCODPKWOFMoR zk*D)M=y@fIPmki^Ui5mqlNiZ#C3ja2bHb^#yyWEhJNh0+^6DRfZwv8}13OKKo_fS!*c*$qHy%q+I>27pB++COav2%|VIu-!GouU-`1si2b zN2qjt4O{6Iky1}K+wbIuy9w8S7D-!R?&|*JLj04?#KnW57`P=$LGVw}?_>u$E?hb- z`f?*dmWz~#zc~=(iI_wNNe|kvpns=VU?|)zjGBNYlUxc^zYW9$s%O+iv|bKWSHuLW zw{K|o;$4z8kO3oW|Fq2fC0V5yFsz#Gvsm7^#Hu7F=fYxTD{K3bY!9O`ta2TFEWecN z6`6sNjoTGH@CR`JNuG+5!{k9FoOJ45N+oOW$H+!rdt@biNw#)OOnq3l?_$wk)?bA>KvI{X+0&`pCuPQcqjmD}TnQ{n2$3Q`5%)fL>;1=0bml zWWqv`An*^Q#D5WgDW^DvNZqEv_fJMlR@<3q=GzN$f0Jpr&Xf9b z*PWH_UsCrk3^D@!Xa^)NfjHqjXK=_(kn#2`TIbp!rF6S4*T8{LtsINx=9Tn&41 zFQFL655wzEB)uNarJjZ``Fa+$?8^a{gbNVE@cREw0Ru|IIG1mig!`6;;r00F9jU~> z6Fu5pF`!H+?h-V|ItTG#|6z#E?GX- z)dD4q#jd>*{I?1)PV9g48+2WQrUkzD?)*D{w61Ivk{;R3h+luOveRN~|SEAri zO8KSKx4WYlVU4FncR|FY=yT`szeYF>ZV z<&JV7|Q?; zE{|UT^deR6dmNU@2nVUwZv(*OF{!Znb%c)FOg*XQ9`|4GL?`U&x~LUvx<^U^KdzW)FF|cu`l^2vwDpVup^p2&3n3loAG>K zvE5m7E1rNPSff0Ia{qL>Cb92=pX^91+*mc7$m!q0(}jzJAL(>{6sf+wbzHO19@{j1 zw}*P%Z&1Yf`#7ks*y{AYSIJ_Rnt&sx2l+_}i+fT%=chC(L2}!%M#zakhxOWSWzBkS zM||T9+R#1@8*?VsfIixCZ$zlOJjT$8W_SBND&k;by4wP9?^pAGeg@;X+E2CNjf~}q zJjm-yC4z`~Zxv0coH^(_rc!w=PE;WkG>Tty&84aC{0eZ`*-?g=_a>(0=xE4!l{P(P zim!fGhhNHgr?aj+H5wCP32Hq>W!TL$DkW;#umL-(U&hT{yBL`QKi#N{xjqFb{|yE;&x zW?)zt5~}}n*g?qcFuQ27rWt7uDOQ=P_9ct3A?`TDd^-r1Lw2Q>V~>P3PKbQqIH-CQgiGj7#Jb8y zT@HQFba=Se_n^$V&18TTb12eqRDJ<(@wL0+MY(shZQhRHup;s!wn(c zt=xQFj_+5v+^6^7Bt7=)wdzPkW#I3(0D{^pvbVf6rQG&!3s)oH_hv=+mIAaE!POT^f2fnk~d zFb6`B#_=Svn-4dkjB?w{Ys5Vhq)Sr1%irsqCO%_ukYk$S;I0cVC5y3nR8zhjWsV@5 zaKnIHc6(*e*?w9mJ2IhKbJ@c!e6cuy;2(327blIrF@VY!Xwg)?@*DGJ?!VpE5>A*nI8%g4fJv2d1~&M3TgqMihoCzo~261b%<4e-@+aSHH==JBpfr zq`g12Wqy)A|Kbc$sUe!U`=JNVKqNODRYcl7pO~Z>u|2pTnrUh}G%5OdwXQ<+QQMn8 zb8I#_#`Ps;EQz1<_ApHx{7y3ns>HqfgSTnn)2ec3Afzy5WP9corQ^zki{;{%Quub& zWAo=xKAh4&X%xopzG${l1BaIVmMn4r=kCqq0dVO4Z-0q#w*X)dtk5rpt+kM%TNwW7 zYvo zSl87;Fq2eeyBfzuR~PDil!Wn?AHu?^F9!Y}3#`PfrGRW@!+&-x7ws`{=)kP}fqVe> zON%co|KW$2ivQ0y{AKCxQc|+$mYGGZtgOfiQ1|{t^<7TP{6{$SF&XFIO!~J!z^vbs z8x|BVT+m-0rEX)!quKQ_;Kl9cr(V#q!qQDAO4s4=Z_DA#A97rA1=EJTqbe%-F3{wN&nvo?|-=_l*SM@ zrtVz5O#C{Axa`XF3pHG!bN!8GB;UED zKUoZH!U8}GRDULjf$OfVRlp>^jxYY#%;&zn1s$abx=1herm(!ZiT{CG$lcT4^dCo4 z@i=0EzsAeIadN$XU9`5^pO)x({Uqh5)gfZ^R>l?Q| z)Uh1>-cE|�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 literal 0 HcmV?d00001 diff --git a/docs/en/_images/schema_composition.png b/docs/en/_images/schema_composition.png new file mode 100644 index 0000000000000000000000000000000000000000..cba4e945cc25084b2dc23c8e6f7cd753750df064 GIT binary patch literal 46694 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 WEWn;mhR3%^9$Tw(r 0) { + $list = $list->filter('ID', $filter['id']); + + if ($list->count() === 0) { + throw new HTTPResponse_Exception(_t( + 'SilverStripe\\AssetAdmin\\GraphQL\\FileFilter.FileNotFound', + 'File or Folder could not be found' + )); + } + } elseif (isset($filter['id']) && (int)$filter['id'] === 0) { + // Special case for root folder + $list = new ArrayList([new Folder([ + 'ID' => 0, + ])]); + } + + // track if search is being applied + $search = false; + + // Optionally limit search to a folder, supporting recursion + if (isset($filter['parentId'])) { + $recursive = !empty($filter['recursive']); + + if (!$recursive) { + $list = $list->filter('ParentID', $filter['parentId']); + } elseif ($filter['parentId']) { + // Note: Simplify parentID = 0 && recursive to no filter at all + $parents = AssetAdminFile::nestedFolderIDs($filter['parentId']); + $list = $list->filter('ParentID', $parents); + } + $search = true; + } + + if (!empty($filter['name'])) { + $list = $list->filterAny(array( + 'Name:PartialMatch' => $filter['name'], + 'Title:PartialMatch' => $filter['name'] + )); + $search = true; + } + + // Date filtering last edited + if (!empty($filter['lastEditedFrom'])) { + $fromDate = new DateField(null, null, $filter['lastEditedFrom']); + $list = $list->filter("LastEdited:GreaterThanOrEqual", $fromDate->dataValue().' 00:00:00'); + $search = true; + } + if (!empty($filter['lastEditedTo'])) { + $toDate = new DateField(null, null, $filter['lastEditedTo']); + $list = $list->filter("LastEdited:LessThanOrEqual", $toDate->dataValue().' 23:59:59'); + $search = true; + } + + // Date filtering created + if (!empty($filter['createdFrom'])) { + $fromDate = new DateField(null, null, $filter['createdFrom']); + $list = $list->filter("Created:GreaterThanOrEqual", $fromDate->dataValue().' 00:00:00'); + $search = true; + } + if (!empty($filter['createdTo'])) { + $toDate = new DateField(null, null, $filter['createdTo']); + $list = $list->filter("Created:LessThanOrEqual", $toDate->dataValue().' 23:59:59'); + $search = true; + } + + // Categories (mapped to extensions through the enum type automatically) + if (!empty($filter['appCategory'])) { + $list = $list->filter('Name:EndsWith', $filter['appCategory']); + $search = true; + } + + // Filter unknown id by known child if search is not applied + if (!$search && isset($filter['anyChildId'])) { + $child = File::get()->byID($filter['anyChildId']); + $id = $child ? ($child->ParentID ?: 0) : 0; + if ($id) { + $list = $list->filter('ID', $id); + } else { + // Special case for root folder, since filter by ID = 0 will return an empty list + $list = new ArrayList([new Folder([ + 'ID' => 0, + ])]); + } + } + + return $list; + } +} diff --git a/src/Modules/AssetAdmin/Notice.php b/src/Modules/AssetAdmin/Notice.php new file mode 100644 index 00000000..170746df --- /dev/null +++ b/src/Modules/AssetAdmin/Notice.php @@ -0,0 +1,98 @@ +message = $message; + $this->noticeType = $noticeType; + $this->ids = $ids; + } + + /** + * @return string + */ + public function getNoticeType() + { + return $this->noticeType; + } + + /** + * @param string $noticeType + * @return $this + */ + public function setNoticeType($noticeType) + { + $this->noticeType = $noticeType; + + return $this; + } + + /** + * @return array + */ + public function getIDs() + { + return $this->ids; + } + + /** + * @param array $ids + * @return $this + */ + public function setIDs($ids) + { + $this->ids = $ids; + + return $this; + } + + /** + * @return string + */ + public function getMessage() + { + return $this->message; + } + + /** + * @param string $message + * @return $this + */ + public function setMessage($message) + { + $this->message = $message; + + return $this; + } +} diff --git a/src/Modules/AssetAdmin/Resolvers/AssetAdminResolver.php b/src/Modules/AssetAdmin/Resolvers/AssetAdminResolver.php new file mode 100644 index 00000000..17303f6b --- /dev/null +++ b/src/Modules/AssetAdmin/Resolvers/AssetAdminResolver.php @@ -0,0 +1,328 @@ +byID($parentID); + if (!$parent) { + throw new InvalidArgumentException(sprintf( + '%s#%s not found', + Folder::class, + $parentID + )); + } + } + + $canCreateContext = []; + foreach ($args['file'] as $name => $val) { + $canCreateContext[$accessor->normaliseField(File::singleton(), $name)] = $val; + } + $member = UserContextProvider::get($context); + if (!File::singleton()->canCreate($member, $canCreateContext)) { + throw new InvalidArgumentException(sprintf( + '%s# create not allowed', + File::class + )); + } + + $file = File::create(); + foreach ($args['file'] as $name => $val) { + $field = $accessor->normaliseField($file, $name); + $file->$field = $val; + } + + $file->writeToStage(Versioned::DRAFT); + + return $file; + } + + public static function resolveCreateFolder($object, array $args, $context, ResolveInfo $info) + { + $accessor = FieldAccessor::singleton(); + $parentID = isset($args['folder']['parentId']) ? intval($args['folder']['parentId']) : 0; + if ($parentID) { + $parent = Versioned::get_by_stage(Folder::class, Versioned::DRAFT)->byID($parentID); + if (!$parent) { + throw new InvalidArgumentException(sprintf( + '%s#%s not found', + Folder::class, + $parentID + )); + } + } + + // Check permission + $canCreateContext = []; + foreach ($args['folder'] as $name => $val) { + $canCreateContext[$accessor->normaliseField(Folder::singleton(), $name)] = $val; + } + if (!Folder::singleton()->canCreate($context['currentUser'] ?? null, $canCreateContext)) { + throw new InvalidArgumentException(sprintf( + '%s create not allowed', + Folder::class + )); + } + + $folder = Folder::create(); + foreach ($args['folder'] as $name => $val) { + $field = $accessor->normaliseField($folder, $name); + $folder->$field = $val; + } + + $folder->writeToStage(Versioned::DRAFT); + + return $folder; + } + + public static function resolveDeleteFiles($object, array $args, $context, ResolveInfo $info) + { + if (!isset($args['ids']) || !is_array($args['ids'])) { + throw new InvalidArgumentException('ids must be an array'); + } + $idList = $args['ids']; + + $files = Versioned::get_by_stage(File::class, Versioned::DRAFT)->byIDs($idList); + if ($files->count() < count($idList ?? [])) { + // Find out which files count not be found + $missingIds = array_diff($idList ?? [], $files->column('ID')); + throw new InvalidArgumentException(sprintf( + '%s items %s are not found', + File::class, + implode(', ', $missingIds) + )); + } + + $deletedIDs = []; + $member = UserContextProvider::get($context); + foreach ($files as $file) { + if ($file->canDelete($member)) { + $file->doArchive(); + $deletedIDs[] = $file->ID; + } + } + + return $deletedIDs; + } + + public static function resolveMoveFiles($object, array $args, $context) + { + $folderId = (isset($args['folderId'])) ? $args['folderId'] : 0; + $member = UserContextProvider::get($context); + + if ($folderId) { + $folder = Versioned::get_by_stage(Folder::class, Versioned::DRAFT) + ->byID($folderId); + if (!$folder) { + throw new InvalidArgumentException(sprintf( + '%s#%s not found', + Folder::class, + $folderId + )); + } + + // Check permission + if (!$folder->canEdit($member)) { + throw new InvalidArgumentException(sprintf( + '%s edit not allowed', + Folder::class + )); + } + } + $files = Versioned::get_by_stage(File::class, Versioned::DRAFT) + ->byIDs($args['fileIds']); + $errorFiles = []; + foreach ($files as $file) { + if ($file->canEdit($member)) { + $file->ParentID = $folderId; + $file->writeToStage(Versioned::DRAFT); + } else { + $errorFiles[] = $file->ID; + } + } + + if ($errorFiles) { + throw new InvalidArgumentException(sprintf( + '%s (%s) edit not allowed', + File::class, + implode(', ', $errorFiles) + )); + } + + if (!isset($folder)) { + return Folder::singleton(); + } + return $folder; + } + + + public static function resolvePublicationNotice($value, array $args, array $context, ResolveInfo $info) + { + $fieldName = $info->fieldName; + $method = 'get'.$fieldName; + if (method_exists($value, $method ?? '')) { + return $value->$method(); + } + + throw new \Exception(sprintf( + 'Invalid field %s on %s', + $fieldName, + get_class($value) + )); + } + + /** + * @param $value + * @return string + */ + public static function resolvePublicationResultUnion($value): string + { + if ($value instanceof File) { + return 'File'; + } + if ($value instanceof Notice) { + return 'PublicationNotice'; + } + } + + public static function resolveReadDescendantFileCounts($object, array $args, $context, ResolveInfo $info): array + { + if (!isset($args['ids']) || !is_array($args['ids'])) { + throw new \InvalidArgumentException('ids must be an array'); + } + $ids = $args['ids']; + + $files = Versioned::get_by_stage(File::class, Versioned::DRAFT)->byIDs($ids); + if ($files->count() < count($ids ?? [])) { + $class = File::class; + $missingIds = implode(', ', array_diff($ids ?? [], $files->column('ID'))); + throw new \InvalidArgumentException("{$class} items {$missingIds} are not found"); + } + + $data = []; + foreach ($files as $file) { + if (!$file->canView($context['currentUser'])) { + continue; + } + $data[] = [ + 'id' => $file->ID, + 'count' => $file->getDescendantFileCount() + ]; + } + return $data; + } + + public static function resolveReadFileUsage($object, array $args, $context, ResolveInfo $info): array + { + if (!isset($args['ids']) || !is_array($args['ids'])) { + throw new InvalidArgumentException('ids must be an array'); + } + $idList = $args['ids']; + + $files = Versioned::get_by_stage(File::class, Versioned::DRAFT)->byIDs($idList); + if ($files->count() < count($idList ?? [])) { + // Find out which files count not be found + $missingIds = array_diff($idList ?? [], $files->column('ID')); + throw new InvalidArgumentException(sprintf( + '%s items %s are not found', + File::class, + implode(', ', $missingIds) + )); + } + + $usage = []; + $member = UserContextProvider::get($context); + foreach ($files as $file) { + if ($file->canView($member)) { + $useEntry = ['id' => $file->ID]; + $useEntry['inUseCount'] = $file instanceof Folder ? + $file->getFilesInUse()->count(): + $file->BackLinkTrackingCount(); + $usage[] = $useEntry; + } + } + + return $usage; + } + + /** + * @param $object + * @param array $args + * @param $context + * @param $info + * @return DataList + * @throws HTTPResponse_Exception + */ + public static function resolveReadFiles($object, array $args = [], $context = [], $info = null) + { + $filter = (!empty($args['filter'])) ? $args['filter'] : []; + $member = UserContextProvider::get($context); + + // Permission checks + $parent = Folder::singleton(); + if (isset($filter['parentId']) && $filter['parentId'] !== 0) { + $parent = Folder::get()->byID($filter['parentId']); + if (!$parent) { + throw new InvalidArgumentException(sprintf( + '%s#%s not found', + Folder::class, + $filter['parentId'] + )); + } + } + if (!$parent->canView($member)) { + throw new InvalidArgumentException(sprintf( + '%s#%s view access not permitted', + Folder::class, + $parent->ID + )); + } + + if (isset($filter['recursive']) && $filter['recursive']) { + throw new InvalidArgumentException(( + 'The "recursive" flag can only be used for the "children" field' + )); + } + + // Filter list + $list = Versioned::get_by_stage(File::class, Versioned::DRAFT); + $list = FileFilter::filterList($list, $filter); + + // Permission checks + $list = $list->filterByCallback(function (File $file) use ($context, $member) { + return $file->canView($member); + }); + + return $list; + } +} diff --git a/src/Modules/AssetAdmin/Resolvers/FieldResolver.php b/src/Modules/AssetAdmin/Resolvers/FieldResolver.php new file mode 100644 index 00000000..0f1dca1b --- /dev/null +++ b/src/Modules/AssetAdmin/Resolvers/FieldResolver.php @@ -0,0 +1,20 @@ +fieldName; + if ($obj->hasMethod($field)) { + return $obj->$field(); + } + $fieldName = FieldAccessor::singleton()->normaliseField($obj, $field); + return $obj->$fieldName; + } +} diff --git a/src/Modules/AssetAdmin/Resolvers/FileTypeResolver.php b/src/Modules/AssetAdmin/Resolvers/FileTypeResolver.php new file mode 100644 index 00000000..6f65e664 --- /dev/null +++ b/src/Modules/AssetAdmin/Resolvers/FileTypeResolver.php @@ -0,0 +1,189 @@ + '%$SilverStripe\AssetAdmin\Model\ThumbnailGenerator.graphql' + ]; + + /** + * @var ThumbnailGenerator + */ + private $thumbnailGenerator; + + /** + * @param $object + * @return mixed + */ + public static function resolveFileType($object) + { + return $object->FileType; + } + + /** + * @return string + */ + public static function resolveFolderType(): string + { + return 'folder'; + } + + /** + * @param File $object + * @return string + */ + public static function resolveFileCategory($object) + { + return $object->appCategory(); + } + + /** + * @return string + */ + public static function resolveFolderCategory(): string + { + return 'folder'; + } + + public static function resolveFileUrl($object) + { + return $object->AbsoluteURL; + } + + public static function resolveFileSize($object) + { + return $object->AbsoluteSize; + } + + /** + * @param File $object + * @return string|null + */ + public static function resolveFileSmallThumbnail($object) + { + // Make small thumbnail + $width = UploadField::config()->uninherited('thumbnail_width'); + $height = UploadField::config()->uninherited('thumbnail_height'); + return static::singleton() + ->getThumbnailGenerator() + ->generateThumbnailLink($object, $width, $height); + } + + /** + * @param File $object + * @return string|null + */ + public static function resolveFileThumbnail($object) + { + // Make large thumbnail + $width = AssetAdmin::config()->uninherited('thumbnail_width'); + $height = AssetAdmin::config()->uninherited('thumbnail_height'); + return static::singleton() + ->getThumbnailGenerator() + ->generateThumbnailLink($object, $width, $height); + } + + /** + * @param File $object + * @return string|null + */ + public static function resolveFileDraft($object) + { + return $object->isOnDraftOnly(); + } + + /** + * @param File $object + * @return string|null + */ + public static function resolveFilePublished($object) + { + return $object->isPublished(); + } + + /** + * @param File $object + * @return string|null` + */ + public static function resolveFileModified($object) + { + return $object->isModifiedOnDraft(); + } + + /** + * @param File|AssetAdminFile $object + * @return int + */ + public static function resolveFileDescendantFileCount($object) + { + return 0; + } + + /** + * @param File $object + * @return int + */ + public static function resolveFileInUseCount($object) + { + return $object->BackLinkTrackingCount(); + } + + /** + * @param AssetContainer $object + * @return string|null + */ + public static function resolveFileThumbnailFieldGraceful(AssetContainer $object): ?string + { + $width = AssetAdmin::config()->uninherited('thumbnail_width'); + $height = AssetAdmin::config()->uninherited('thumbnail_height'); + return static::singleton() + ->getThumbnailGenerator() + ->generateThumbnailLink($object, $width, $height, true); + } + + /** + * @param AssetContainer $object + * @return string|null + */ + public static function resolveFileSmallThumbnailFieldGraceful(AssetContainer $object): ?string + { + $width = UploadField::config()->uninherited('thumbnail_width'); + $height = UploadField::config()->uninherited('thumbnail_height'); + return static::singleton() + ->getThumbnailGenerator() + ->generateThumbnailLink($object, $width, $height, true); + } + + /** + * @return ThumbnailGenerator + */ + public function getThumbnailGenerator() + { + return $this->thumbnailGenerator; + } + + /** + * @param ThumbnailGenerator $generator + * @return $this + */ + public function setThumbnailGenerator(ThumbnailGenerator $generator) + { + $this->thumbnailGenerator = $generator; + return $this; + } +} diff --git a/src/Modules/AssetAdmin/Resolvers/FolderTypeResolver.php b/src/Modules/AssetAdmin/Resolvers/FolderTypeResolver.php new file mode 100644 index 00000000..31d5ce88 --- /dev/null +++ b/src/Modules/AssetAdmin/Resolvers/FolderTypeResolver.php @@ -0,0 +1,184 @@ +ID) { + throw new InvalidArgumentException(sprintf( + 'The "parentId" value (#%d) needs to match the current object id (#%d)', + (int)$filter['parentId'], + (int)$object->ID + )); + } + + $list = Versioned::get_by_stage(File::class, 'Stage'); + $filter['parentId'] = $object->ID; + $list = FileFilter::filterList($list, $filter); + + // Filter by permission + // DataQuery::column ignores surrogate sorting fields + // see https://github.com/silverstripe/silverstripe-framework/issues/8926 + // the following line is a workaround for `$ids = $list->column('ID');` + $ids = $list->dataQuery()->execute()->column('ID'); + + $permissionChecker = File::singleton()->getPermissionChecker(); + $member = UserContextProvider::get($context); + $canViewIDs = array_keys(array_filter($permissionChecker->canViewMultiple( + $ids, + $member + ) ?? [])); + // Filter by visible IDs (or force empty set if none are visible) + // Remove the limit as it no longer applies. We've already filtered down to the exact + // IDs we need. + $canViewList = $list->filter('ID', $canViewIDs ?: 0) + ->limit(null); + + return $canViewList; + } + + /** + * @param Folder|AssetAdminFile $object + * @param array $args + * @param array $context + * @param ResolveInfo $info + * @return int + */ + public static function resolveFolderDescendantFileCount($object, array $args, $context, ResolveInfo $info) + { + return $object->getDescendantFileCount(); + } + + /** + * @param Folder|AssetAdminFile $object + * @param array $args + * @param array $context + * @param ResolveInfo $info + * @return int + */ + public static function resolveFolderFilesInUseCount($object, array $args, $context, ResolveInfo $info) + { + return $object->getFilesInUse()->count(); + } + + /** + * @param File $object + * @param array $args + * @param array $context + * @param ResolveInfo $info + * @return File[] + */ + public static function resolveFolderParents($object, array $args, $context, ResolveInfo $info) + { + $parents = []; + $next = $object->Parent(); + while ($next && $next->isInDB()) { + array_unshift($parents, $next); + if ($next->ParentID) { + $next = $next->Parent(); + } else { + break; + } + } + + return $parents; + } + + /** + * @param array $context + * @return Closure + */ + public static function sortChildren(array $context): Closure + { + $fieldName = $context['fieldName']; + return function (?DataList $list, array $args) use ($fieldName) { + if ($list === null) { + return null; + } + + $sortArgs = $args[$fieldName] ?? []; + + $list = $list->alterDataQuery(static function (DataQuery $dataQuery) use ($sortArgs) { + $query = $dataQuery->query(); + $existingOrderBys = []; + foreach ($query->getOrderBy() as $field => $direction) { + if (strpos($field, '.') === false) { + // some fields may be surrogates added by extending augmentSQL + // we have to preserve those expressions rather than auto-generated names + // that SQLSelect::addOrderBy leaves for them (e.g. _SortColumn0) + $field = $query->expressionForField(trim($field, '"')) ?: $field; + } + $existingOrderBys[$field] = $direction; + } + + // Folders always go first + $dataQuery->sort( + sprintf( + '(CASE WHEN "ClassName"=%s THEN 1 ELSE 0 END)', + DB::get_conn()->quoteString(Folder::class) + ), + 'DESC', + true + ); + + foreach ($sortArgs as $field => $dir) { + $normalised = FieldAccessor::singleton()->normaliseField(File::singleton(), $field); + Schema::invariant( + $normalised, + 'Could not find field %s on %s', + $field, + File::class + ); + $dataQuery->sort($normalised, $dir, false); + } + + // respect default_sort + foreach ($existingOrderBys as $field => $dir) { + $dataQuery->sort($field, $dir, false); + } + + return $dataQuery; + }); + return $list; + }; + } +} diff --git a/src/Modules/AssetAdmin/Resolvers/PublicationResolver.php b/src/Modules/AssetAdmin/Resolvers/PublicationResolver.php new file mode 100644 index 00000000..f3ecbcf1 --- /dev/null +++ b/src/Modules/AssetAdmin/Resolvers/PublicationResolver.php @@ -0,0 +1,165 @@ +byIds($idList); + + // If warning suppression is not on, bundle up all the warnings into a single exception + if (!$quiet && $files->count() < count($idList ?? [])) { + $missingIds = array_diff($idList ?? [], $files->column('ID')); + foreach ($missingIds as $id) { + $warningMessages[] = sprintf( + 'File #%s either does not exist or is not on stage %s.', + $id, + $sourceStage + ); + } + } + $allowedFiles = []; + // Check permissions + foreach ($files as $file) { + $permissionMethod = $isPublish ? 'canPublish' : 'canUnpublish'; + $member = UserContextProvider::get($context); + if ($file->$permissionMethod($member)) { + $allowedFiles[] = $file; + } elseif (!$quiet) { + $warningMessages[] = sprintf( + 'User does not have permission to perform this operation on file "%s"', + $file->Title + ); + } + } + + if (!empty($warningMessages)) { + throw new InvalidArgumentException(implode('\n', $warningMessages)); + } + + foreach ($allowedFiles as $file) { + $result[] = $isPublish + ? PublicationResolver::publishFile($file, $force) + : PublicationResolver::unpublishFile($file, $force); + } + + return $result; + } + + /** + * @param File $file + * @param boolean $force + * @return File|Notice + */ + private static function publishFile(File $file, $force = false) + { + $file->publishRecursive(); + + return $file; + } + + + /** + * @param File|RecursivePublishable $file + * @param boolean $force + * @return Notice|File + */ + private static function unpublishFile(File $file, $force = false) + { + // If not forcing, make sure we aren't interfering with any owners + if (!$force) { + $ownersCount = PublicationResolver::countLiveOwners($file); + if ($ownersCount) { + return new Notice( + _t( + 'SilverStripe\\AssetAdmin\\GraphQL\\Resolvers\\PublicationResolver.OWNER_WARNING', + 'File "{file}" is used in {count} place|File "{file}" is used in {count} places.', + [ + 'file' => $file->Title, + 'count' => $ownersCount + ] + ), + 'HAS_OWNERS', + [$file->ID] + ); + } + } + + $file->doUnpublish(); + return $file; + } + + /** + * Count number of live owners this file uses + * + * @param File $file + * @return int Number of live owners + */ + private static function countLiveOwners(File $file): int + { + // In case no versioning + if (!$file->hasExtension(RecursivePublishable::class)) { + return 0; + } + + // Query live record + /** @var Versioned|RecursivePublishable $liveRecord */ + $liveRecord = Versioned::get_by_stage(File::class, Versioned::LIVE)->byID($file->ID); + if ($liveRecord) { + return $liveRecord + ->findOwners(false) + ->count(); + } + + // No live record, no live owners + return 0; + } +} diff --git a/src/Modules/AssetAdmin/Schema/Builder.php b/src/Modules/AssetAdmin/Schema/Builder.php new file mode 100644 index 00000000..534fcce8 --- /dev/null +++ b/src/Modules/AssetAdmin/Schema/Builder.php @@ -0,0 +1,33 @@ + $category]; + }, File::config()->get('app_categories') ?? []); + + // Sanitise GraphQL Enum aliases (some contain slashes) + foreach ($categoryValues as $key => $v) { + unset($categoryValues[$key]); + $newKey = strtoupper(preg_replace('/[^[[:alnum:]]]*/', '', $key ?? '') ?? ''); + $categoryValues[$newKey] = $v; + } + + $schema->addEnum(Enum::create('AppCategory', $categoryValues)); + } +} diff --git a/src/Modules/CMS/LinkablePlugin.php b/src/Modules/CMS/LinkablePlugin.php new file mode 100644 index 00000000..f441970f --- /dev/null +++ b/src/Modules/CMS/LinkablePlugin.php @@ -0,0 +1,103 @@ +getModel()->getSourceClass(); + // Only site trees have the get_by_link capability + if ($class !== SiteTree::class && !is_subclass_of($class, SiteTree::class)) { + return; + } + $singleFieldName = $this->config()->get('single_field_name'); + $listFieldName = $this->config()->get('list_field_name'); + $fieldName = $query->isList() ? $listFieldName : $singleFieldName; + $type = $query->isList() ? '[String]' : 'String'; + $query->addArg($fieldName, $type); + $query->addResolverAfterware( + $config['resolver'] ?? static::config()->get('resolver') + ); + } + + /** + * @param array $context + * @return callable + */ + public static function applyLinkFilter($obj, array $args, array $context, ResolveInfo $info) + { + $singleFieldName = static::config()->get('single_field_name'); + $listFieldName = static::config()->get('list_field_name'); + $filterLink = $args['filter'][$singleFieldName] ?? ($args['filter'][$listFieldName] ?? null); + $argLink = $args[$singleFieldName] ?? ($args[$listFieldName] ?? null); + $linkData = $filterLink ?: $argLink; + if (!$linkData) { + return $obj; + } + // Normalise to an array for both cases. The readOne operation will get + // ->first() run on it by the firstResult plugin. + $links = is_array($linkData) ? $linkData : [$linkData]; + + $result = ArrayList::create(); + + foreach ($links as $link) { + $page = SiteTree::get_by_link($link); + if ($page) { + $result->push($page); + } + } + return $result; + } +} diff --git a/src/Modules/CMS/Resolver.php b/src/Modules/CMS/Resolver.php new file mode 100644 index 00000000..3b511d4c --- /dev/null +++ b/src/Modules/CMS/Resolver.php @@ -0,0 +1,13 @@ +getSourceClass(), Versioned::class)) { + return null; + } + + $plugins = $config['plugins'] ?? []; + $name = $config['name'] ?? null; + if (!$name) { + $name = $this->createOperationName($typeName); + } + return ModelMutation::create($model, $name) + ->setPlugins($plugins) + ->setType($typeName) + ->setResolver([VersionedResolver::class, 'resolvePublishOperation']) + ->addResolverContext('action', $this->getAction()) + ->addResolverContext('dataClass', $model->getSourceClass()) + ->addArg('id', 'ID!'); + } + + abstract protected function createOperationName(string $typeName): string; + + abstract protected function getAction(): string; +} diff --git a/src/Modules/Versioned/Operations/CopyToStageCreator.php b/src/Modules/Versioned/Operations/CopyToStageCreator.php new file mode 100644 index 00000000..cfae46be --- /dev/null +++ b/src/Modules/Versioned/Operations/CopyToStageCreator.php @@ -0,0 +1,69 @@ +getSourceClass(), Versioned::class)) { + return null; + } + + $plugins = $config['plugins'] ?? []; + $mutationName = $config['name'] ?? null; + if (!$mutationName) { + $mutationName = 'copy' . ucfirst($typeName ?? '') . 'ToStage'; + } + + return ModelMutation::create($model, $mutationName) + ->setType($typeName) + ->setPlugins($plugins) + ->setResolver([VersionedResolver::class, 'resolveCopyToStage']) + ->addResolverContext('dataClass', $model->getSourceClass()) + ->addArg('input', 'CopyToStageInputType!'); + } +} diff --git a/src/Modules/Versioned/Operations/PublishCreator.php b/src/Modules/Versioned/Operations/PublishCreator.php new file mode 100644 index 00000000..84bec300 --- /dev/null +++ b/src/Modules/Versioned/Operations/PublishCreator.php @@ -0,0 +1,35 @@ +getSourceClass(), Versioned::class)) { + return null; + } + + $defaultPlugins = $this->config()->get('default_plugins'); + $configPlugins = $config['plugins'] ?? []; + $plugins = array_merge($defaultPlugins, $configPlugins); + $mutationName = 'rollback' . ucfirst($typeName ?? ''); + return ModelMutation::create($model, $mutationName) + ->setPlugins($plugins) + ->setType($typeName) + ->setResolver([VersionedResolver::class, 'resolveRollback']) + ->addResolverContext('dataClass', $model->getSourceClass()) + ->addArg('id', [ + 'type' => 'ID!', + 'description' => 'The object ID that needs to be rolled back' + ]) + ->addArg('toVersion', [ + 'type' => 'Int!', + 'description' => 'The version of the object that should be rolled back to', + ]); + } +} diff --git a/src/Modules/Versioned/Operations/UnpublishCreator.php b/src/Modules/Versioned/Operations/UnpublishCreator.php new file mode 100644 index 00000000..61fa9c34 --- /dev/null +++ b/src/Modules/Versioned/Operations/UnpublishCreator.php @@ -0,0 +1,34 @@ +addResolverMiddleware( + [static::class, 'unpublishOnDelete'], + ['dataClass' => $mutation->getModel()->getSourceClass()] + ); + } + + /** + * @param array $context + * @return Closure + */ + public static function unpublishOnDelete(array $context) + { + $dataClass = $context['dataClass'] ?? null; + return function ($objects, array $args, array $context) use ($dataClass) { + if (!$dataClass) { + return; + } + if (!ViewableData::has_extension($dataClass, Versioned::class)) { + return; + } + DB::get_conn()->withTransaction(function () use ($args, $context, $dataClass) { + // Build list to filter + $objects = DataList::create($dataClass) + ->byIDs($args['ids']); + + foreach ($objects as $object) { + /** @var DataObject&Versioned $object */ + if (!$object->hasExtension(Versioned::class) || !$object->isPublished()) { + continue; + } + $member = UserContextProvider::get($context); + if (!$object->canUnpublish($member)) { + throw new Exception(sprintf( + 'Cannot unpublish %s with ID %s', + get_class($object), + $object->ID + )); + } + + $object->doUnpublish(); + } + }); + }; + } +} diff --git a/src/Modules/Versioned/Plugins/VersionedDataObject.php b/src/Modules/Versioned/Plugins/VersionedDataObject.php new file mode 100644 index 00000000..b43ab5ba --- /dev/null +++ b/src/Modules/Versioned/Plugins/VersionedDataObject.php @@ -0,0 +1,143 @@ +addModelbyClassName(Member::class); + // Hack.. we can't add a plugin within a plugin, so we have to add sort + // and pagination manually. This requires ensuring the sort types are added + // to the schema (most of the time this is redundant) + if (!$schema->getType('SortDirection')) { + AbstractQuerySortPlugin::updateSchema($schema); + } + if (!$schema->getType('PageInfo')) { + PaginationPlugin::updateSchema($schema); + } + } + + /** + * @param ModelType $type + * @param Schema $schema + * @param array $config + * @throws SchemaBuilderException + */ + public function apply(ModelType $type, Schema $schema, array $config = []): void + { + $class = $type->getModel()->getSourceClass(); + Schema::invariant( + is_subclass_of($class, DataObject::class), + 'The %s plugin can only be applied to types generated by %s models', + __CLASS__, + DataObject::class + ); + if (!ViewableData::has_extension($class, Versioned::class)) { + return; + } + + $versionName = $type->getModel()->getTypeName() . 'Version'; + $memberType = $schema->getModelByClassName(Member::class); + Schema::invariant( + $memberType, + 'The %s class was not added as a model. Should have been done in %s::%s?', + Member::class, + __CLASS__, + 'updateSchema' + ); + $memberTypeName = $memberType->getModel()->getTypeName(); + $resolver = ['resolver' => [VersionedResolver::class, 'resolveVersionFields']]; + + $type->addField('version', 'Int', function (ModelField $field) { + $field->addResolverAfterware([ScalarDBField::class, 'resolve']); + }); + + $versionType = Type::create($versionName) + ->addField('author', ['type' => $memberTypeName] + $resolver) + ->addField('publisher', ['type' => $memberTypeName] + $resolver) + ->addField('published', ['type' => 'Boolean'] + $resolver) + ->addField('liveVersion', ['type' => 'Boolean'] + $resolver) + ->addField('deleted', ['type' => 'Boolean'] + $resolver) + ->addField('draft', ['type' => 'Boolean'] + $resolver) + ->addField('latestDraftVersion', ['type' => 'Boolean'] + $resolver); + + foreach ($type->getFields() as $field) { + $clone = clone $field; + $versionType->addField($clone->getName(), $clone); + } + foreach ($type->getInterfaces() as $interface) { + $versionType->addInterface($interface); + } + + $schema->addType($versionType); + $type->addField('versions', '[' . $versionName . ']', function (Field $field) use ($type, $schema, $config) { + $field->setResolver([VersionedResolver::class, 'resolveVersionList']) + ->addResolverContext('sourceClass', $type->getModel()->getSourceClass()); + SortPlugin::singleton()->apply($field, $schema, [ + 'resolver' => [static::class, 'sortVersions'], + 'fields' => [ 'version' => true ], + ]); + Paginator::singleton()->apply($field, $schema); + }); + } + + /** + * @param array $config + * @return Closure + */ + public static function sortVersions(array $config): Closure + { + $fieldName = $config['fieldName']; + return function (Sortable $list, array $args) use ($fieldName) { + $versionSort = $args[$fieldName]['version'] ?? null; + if ($versionSort) { + $list = $list->sort('Version', $versionSort); + } + + return $list; + }; + } +} diff --git a/src/Modules/Versioned/Plugins/VersionedRead.php b/src/Modules/Versioned/Plugins/VersionedRead.php new file mode 100644 index 00000000..18fcdb7a --- /dev/null +++ b/src/Modules/Versioned/Plugins/VersionedRead.php @@ -0,0 +1,53 @@ +getModel()->getSourceClass(); + if (!ViewableData::has_extension($class, Versioned::class)) { + return; + } + + // The versioned argument only affects global reading state. Should not + // apply to nested queries. + $rootQuery = $schema->getQueryType()->getFieldByName($query->getName()); + if (!$rootQuery) { + return; + } + + $query->addResolverAfterware([VersionedResolver::class, 'resolveVersionedRead']); + $query->addArg('versioning', 'VersionedInputType'); + } +} diff --git a/src/Modules/Versioned/Resolvers/VersionFilters.php b/src/Modules/Versioned/Resolvers/VersionFilters.php new file mode 100644 index 00000000..24a3b094 --- /dev/null +++ b/src/Modules/Versioned/Resolvers/VersionFilters.php @@ -0,0 +1,240 @@ +validateArgs($versioningArgs); + + $mode = $versioningArgs['mode']; + switch ($mode) { + case Versioned::LIVE: + case Versioned::DRAFT: + Versioned::set_stage($mode); + break; + case 'archive': + $date = $versioningArgs['archiveDate']; + Versioned::set_reading_mode($mode); + Versioned::reading_archived_date($date); + break; + } + } + + /** + * @template T of DataObject + * @param DataList $list + * @param array $versioningArgs + * @throws InvalidArgumentException + * @return DataList + */ + public function applyToList(DataList $list, array $versioningArgs): DataList + { + if ($list instanceof RelationList) { + throw new InvalidArgumentException(sprintf( + 'Version filtering cannot be applied to instances of %s. Are you using the plugin on a nested query?', + get_class($list) + )); + } + if (!isset($versioningArgs['mode'])) { + return $list; + } + + $this->validateArgs($versioningArgs); + + $mode = $versioningArgs['mode']; + switch ($mode) { + case Versioned::LIVE: + case Versioned::DRAFT: + $list = $list + ->setDataQueryParam('Versioned.mode', 'stage') + ->setDataQueryParam('Versioned.stage', $mode); + break; + case 'archive': + $date = $versioningArgs['archiveDate']; + $list = $list + ->setDataQueryParam('Versioned.mode', 'archive') + ->setDataQueryParam('Versioned.date', $date); + break; + case 'all_versions': + $list = $list->setDataQueryParam('Versioned.mode', 'all_versions'); + break; + case 'latest_versions': + $list = $list->setDataQueryParam('Versioned.mode', 'latest_versions'); + break; + case 'status': + // When querying by Status we need to ensure both stage / live tables are present + /* @var DataObject&Versioned $sng */ + $sng = singleton($list->dataClass()); + $baseTable = $sng->baseTable(); + $liveTable = $sng->stageTable($baseTable, Versioned::LIVE); + $statuses = $versioningArgs['status']; + + // If we need to search archived records, we need to manually join draft table + if (in_array('archived', $statuses ?? [])) { + $list = $list + ->setDataQueryParam('Versioned.mode', 'latest_versions'); + // Join a temporary alias BaseTable_Draft, renaming this on execution to BaseTable + // See Versioned::augmentSQL() For reference on this alias + $draftTable = $sng->stageTable($baseTable, Versioned::DRAFT) . '_Draft'; + $list = $list + ->leftJoin( + $draftTable, + "\"{$baseTable}\".\"ID\" = \"{$draftTable}\".\"ID\"" + ); + } else { + // Use draft as base query mode (base join live) + $draftTable = $baseTable; + $list = $list + ->setDataQueryParam('Versioned.mode', 'stage') + ->setDataQueryParam('Versioned.stage', Versioned::DRAFT); + } + + // Always include live table + $list = $list->leftJoin( + $liveTable, + "\"{$baseTable}\".\"ID\" = \"{$liveTable}\".\"ID\"" + ); + + // Add all conditions + $conditions = []; + + // Modified exist on both stages, but differ + if (in_array('modified', $statuses ?? [])) { + $conditions[] = "\"{$liveTable}\".\"ID\" IS NOT NULL AND \"{$draftTable}\".\"ID\" IS NOT NULL" + . " AND \"{$draftTable}\".\"Version\" <> \"{$liveTable}\".\"Version\""; + } + + // Is deleted and sent to archive + if (in_array('archived', $statuses ?? [])) { + // Note: Include items staged for deletion for the time being, as these are effectively archived + // we could split this out into "staged for deletion" in the future + $conditions[] = "\"{$draftTable}\".\"ID\" IS NULL"; + } + + // Is on draft only + if (in_array('draft', $statuses ?? [])) { + $conditions[] = "\"{$liveTable}\".\"ID\" IS NULL AND \"{$draftTable}\".\"ID\" IS NOT NULL"; + } + + if (in_array('published', $statuses ?? [])) { + $conditions[] = "\"{$liveTable}\".\"ID\" IS NOT NULL"; + } + + // Validate that all statuses have been handled + if (empty($conditions) || count($statuses ?? []) !== count($conditions ?? [])) { + throw new InvalidArgumentException("Invalid statuses provided"); + } + $list = $list->whereAny(array_filter($conditions ?? [])); + break; + case 'version': + // Note: Only valid for ReadOne + $list = $list->setDataQueryParam([ + "Versioned.mode" => 'version', + "Versioned.version" => $versioningArgs['version'], + ]); + break; + default: + throw new InvalidArgumentException("Unsupported read mode {$mode}"); + } + + return $list; + } + + /** + * @throws InvalidArgumentException + * @param $versioningArgs + */ + public function validateArgs(array $versioningArgs) + { + $mode = $versioningArgs['mode']; + + switch ($mode) { + case Versioned::LIVE: + case Versioned::DRAFT: + break; + case 'archive': + if (empty($versioningArgs['archiveDate'])) { + throw new InvalidArgumentException(sprintf( + 'You must provide an ArchiveDate parameter when using the "%s" mode', + $mode + )); + } + $date = $versioningArgs['archiveDate']; + if (!$this->isValidDate($date)) { + throw new InvalidArgumentException(sprintf( + 'Invalid date: "%s". Must be YYYY-MM-DD format', + $date + )); + } + break; + case 'all_versions': + break; + case 'latest_versions': + break; + case 'status': + if (empty($versioningArgs['status'])) { + throw new InvalidArgumentException(sprintf( + 'You must provide a Status parameter when using the "%s" mode', + $mode + )); + } + break; + case 'version': + // Note: Only valid for ReadOne + if (!isset($versioningArgs['version'])) { + throw new InvalidArgumentException( + 'When using the "version" mode, you must specify a Version parameter' + ); + } + break; + default: + throw new InvalidArgumentException("Unsupported read mode {$mode}"); + } + } + + /** + * Returns true if date is in proper YYYY-MM-DD format + * @param string $date + * @return bool + */ + protected function isValidDate($date) + { + $dt = DateTime::createFromFormat('Y-m-d', $date); + if ($dt === false) { + return false; + } + // DateTime::getLastErrors() has an undocumented difference pre PHP 8.2 for what's returned + // if there are no errors + // https://www.php.net/manual/en/datetime.getlasterrors.php + $errors = $dt->getLastErrors(); + // PHP 8.2 - will return false if no errors + if ($errors === false) { + return true; + } + // PHP 8.2+ will only return an array containing a count of errors only if there are errors + // PHP < 8.2 will always return an array containing a count of errors even if there are no errors + return array_sum($errors) === 0; + } +} diff --git a/src/Modules/Versioned/Resolvers/VersionedResolver.php b/src/Modules/Versioned/Resolvers/VersionedResolver.php new file mode 100644 index 00000000..6245d876 --- /dev/null +++ b/src/Modules/Versioned/Resolvers/VersionedResolver.php @@ -0,0 +1,269 @@ +fieldName) { + case 'author': + return $obj->Author(); + case 'publisher': + return $obj->Publisher(); + case 'published': + return $obj->WasPublished; + case 'draft': + return $obj->WasDraft; + case 'deleted': + return $obj->WasDeleted; + case 'liveVersion': + return $obj->isLiveVersion(); + case 'latestDraftVersion': + return $obj->isLatestDraftVersion(); + } + + return null; + } + + /** + * @param array $resolverContext + * @return Closure + * @see VersionedDataObject + */ + public static function resolveVersionList(array $resolverContext): Closure + { + $sourceClass = $resolverContext['sourceClass']; + return function ($object, array $args, array $context, ResolveInfo $info) use ($sourceClass) { + /** @var DataObject|Versioned $object */ + if (!$object->hasExtension(Versioned::class)) { + throw new Exception(sprintf( + 'Types using the %s plugin must have the Versioned extension applied. (See %s)', + VersionedDataObject::class, + $sourceClass + )); + } + $member = UserContextProvider::get($context); + if (!$object->canViewStage(Versioned::DRAFT, $member)) { + throw new Exception(sprintf( + 'Cannot view versions on %s', + $sourceClass + )); + } + + // Get all versions + return VersionedResolver::getVersionsList($object); + }; + } + + private static function getVersionsList(DataObject $object) + { + $id = $object->ID ?: $object->OldID; + $class = DataObject::getSchema()->baseDataClass($object); + return Versioned::get_all_versions($class, $id); + } + + /** + * @template T of DataObject + * @param DataList $list + * @param array $args + * @param array $context + * @param ResolveInfo $info + * @return DataList + * @see VersionedRead + */ + public static function resolveVersionedRead(DataList $list, array $args, array $context, ResolveInfo $info) + { + if (!isset($args['versioning'])) { + return $list; + } + + // Set the reading state globally, we don't support mixing versioned states in the same query + Injector::inst()->get(VersionFilters::class) + ->applyToReadingState($args['versioning']); + + // Also set on the specific list + $list = Injector::inst()->get(VersionFilters::class) + ->applyToList($list, $args['versioning']); + + return $list; + } + + /** + * @param array $context + * @return Closure + * @see CopyToStageCreator + */ + public static function resolveCopyToStage(array $context): Closure + { + $dataClass = $context['dataClass'] ?? null; + return function ($object, array $args, $context, ResolveInfo $info) use ($dataClass) { + if (!$dataClass) { + return; + } + + $input = $args['input']; + $id = $input['id']; + $to = $input['toStage']; + /** @var Versioned|DataObject $record */ + $record = null; + if (isset($input['fromVersion'])) { + $from = $input['fromVersion']; + $record = Versioned::get_version($dataClass, $id, $from); + } elseif (isset($input['fromStage'])) { + $from = $input['fromStage']; + $record = Versioned::get_by_stage($dataClass, $from)->byID($id); + } else { + throw new InvalidArgumentException('You must provide either a FromStage or FromVersion argument'); + } + if (!$record) { + throw new InvalidArgumentException("Record {$id} not found"); + } + + $member = UserContextProvider::get($context); + // Permission check object + $can = $to === Versioned::LIVE + ? $record->canPublish($member) + : $record->canEdit($member); + if (!$can) { + throw new InvalidArgumentException(sprintf( + 'Copying %s from %s to %s is not allowed', + $this->getTypeName(), + $from, + $to + )); + } + + /** @var DataObject|Versioned $record */ + $record->copyVersionToStage($from, $to); + return $record; + }; + } + + /** + * @param array $context + * @return Closure + */ + public static function resolvePublishOperation(array $context) + { + $action = $context['action'] ?? null; + $dataClass = $context['dataClass'] ?? null; + $allowedActions = [ + AbstractPublishOperationCreator::ACTION_PUBLISH, + AbstractPublishOperationCreator::ACTION_UNPUBLISH, + ]; + if (!in_array($action, $allowedActions ?? [])) { + throw new InvalidArgumentException(sprintf( + 'Invalid publish action: %s', + $action + )); + } + + $isPublish = $action === AbstractPublishOperationCreator::ACTION_PUBLISH; + + return function ($obj, array $args, array $context, ResolveInfo $info) use ($isPublish, $dataClass) { + if (!$dataClass) { + return; + } + $stage = $isPublish ? Versioned::DRAFT : Versioned::LIVE; + $obj = Versioned::get_by_stage($dataClass, $stage) + ->byID($args['id']); + if (!$obj) { + throw new Exception(sprintf( + '%s with ID %s not found', + $dataClass, + $args['id'] + )); + } + $permissionMethod = $isPublish ? 'canPublish' : 'canUnpublish'; + $member = UserContextProvider::get($context); + if (!$obj->$permissionMethod($member)) { + throw new Exception(sprintf( + 'Not allowed to change published state of this %s', + $dataClass + )); + } + + try { + DB::get_conn()->withTransaction(function () use ($obj, $isPublish) { + if ($isPublish) { + $obj->publishRecursive(); + } else { + $obj->doUnpublish(); + } + }); + } catch (ValidationException $e) { + throw new Exception( + 'Could not changed published state of %s. Got error: %s', + $dataClass, + $e->getMessage() + ); + } + return $obj; + }; + } + + /** + * @param array $context + * @return Closure + * @see RollbackCreator + */ + public static function resolveRollback(array $context) + { + $dataClass = $context['dataClass'] ?? null; + return function ($obj, array $args, array $context, ResolveInfo $info) use ($dataClass) { + if (!$dataClass) { + return; + } + // Get the args + $id = $args['id']; + $rollbackVersion = $args['toVersion']; + + // Pull the latest version of the record + /** @var Versioned|DataObject $record */ + $record = Versioned::get_latest_version($dataClass, $id); + + // Assert permission + $user = UserContextProvider::get($context); + if (!$record->canEdit($user)) { + throw new InvalidArgumentException('Current user does not have permission to roll back this resource'); + } + + // Perform the rollback + $record = $record->rollbackRecursive($rollbackVersion); + + return $record; + }; + } +} diff --git a/tests/Middleware/CSRFMiddlewareTest.php b/tests/Middleware/CSRFMiddlewareTest.php index b0349d7c..61487bbc 100644 --- a/tests/Middleware/CSRFMiddlewareTest.php +++ b/tests/Middleware/CSRFMiddlewareTest.php @@ -8,6 +8,26 @@ class CSRFMiddlewareTest extends BaseMiddlewareProcessTest { + private bool $securityTokenWasEnabled = false; + + protected function setUp(): void + { + parent::setUp(); + // CSRF token check is normally disabled for unit-tests + $this->securityTokenWasEnabled = SecurityToken::is_enabled(); + if (!$this->securityTokenWasEnabled) { + SecurityToken::enable(); + } + } + + protected function tearDown(): void + { + parent::tearDown(); + if (!$this->securityTokenWasEnabled) { + SecurityToken::disable(); + } + } + public function testItDoesntDoAnythingIfNotAMutation() { $this->assertEquals('resolved', $this->simulateMiddlewareProcess( diff --git a/tests/Modules/AssetAdmin/CreateFolderMutationCreatorTest.php b/tests/Modules/AssetAdmin/CreateFolderMutationCreatorTest.php new file mode 100644 index 00000000..9c1f44c4 --- /dev/null +++ b/tests/Modules/AssetAdmin/CreateFolderMutationCreatorTest.php @@ -0,0 +1,64 @@ +objFromFixture(Folder::class, 'folder1'); + + $args = [ + 'folder' => [ + 'parentID' => $folder1->ID, + 'name' => 'testItCreatesFolder', + ] + ]; + $newFolder = AssetAdminResolver::resolveCreateFolder(null, $args, null, new FakeResolveInfo()); + $this->assertNotNull($newFolder); + $this->assertEquals($folder1->ID, $newFolder->ParentID); + $this->assertEquals('testItCreatesFolder', $newFolder->Name); + } + + public function testItRestrictsCreateFolderByCanCreate() + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('create not allowed'); + $folder1 = $this->objFromFixture(Folder::class, 'folder1'); + + $args = [ + 'folder' => [ + 'parentID' => $folder1->ID, + 'name' => 'disallowCanCreate', + ] + ]; + AssetAdminResolver::resolveCreateFolder(null, $args, null, new FakeResolveInfo()); + } +} diff --git a/tests/Modules/AssetAdmin/FakeResolveInfo.php b/tests/Modules/AssetAdmin/FakeResolveInfo.php new file mode 100644 index 00000000..b854653b --- /dev/null +++ b/tests/Modules/AssetAdmin/FakeResolveInfo.php @@ -0,0 +1,28 @@ + 'fake', 'type' => Type::string()]), + new \ArrayObject(), + new ObjectType(['name' => 'fake']), + [], + new Schema([]), + [], + '', + new OperationDefinitionNode([]), + [] + ); + } +} diff --git a/tests/Modules/AssetAdmin/FileExtension.php b/tests/Modules/AssetAdmin/FileExtension.php new file mode 100644 index 00000000..36bfc1a2 --- /dev/null +++ b/tests/Modules/AssetAdmin/FileExtension.php @@ -0,0 +1,40 @@ +owner->Name === 'disallowCanView.txt') { + return false; + } + } + + public function canEdit($member = null) + { + if ($this->owner->Name === 'disallowCanEdit.txt') { + return false; + } + } + + public function canDelete($member = null) + { + if ($this->owner->Name === 'disallowCanDelete.txt') { + return false; + } + } + + public function canCreate($member = null, $context = []) + { + if (isset($context['Parent']) && $context['Parent']->Name === 'disallowCanAddChildren') { + return false; + } + if (isset($context['Upload']['name']) && $context['Upload']['name'] === 'disallowCanCreate.txt') { + return false; + } + } +} diff --git a/tests/Modules/AssetAdmin/FileFilterInputTypeCreatorTest.php b/tests/Modules/AssetAdmin/FileFilterInputTypeCreatorTest.php new file mode 100644 index 00000000..f42ea71d --- /dev/null +++ b/tests/Modules/AssetAdmin/FileFilterInputTypeCreatorTest.php @@ -0,0 +1,278 @@ + 'folder' + ]); + $folder->write(); + + $file1 = new File([ + 'Created' => '2014-01-05 23:11:39', + 'ParentID' => $folder->ID, + ]); + $file1->write(); + + $file2 = new File([ + 'Created' => '2014-01-06 12:00:00', + 'ParentID' => $folder->ID, + ]); + $file2->write(); + + $baseList = $folder->stageChildren(); + + // Mock searches for 4th Jan + $list = FileFilter::filterList($baseList, [ + 'lastEditedFrom' => '2014-01-04', + 'lastEditedTo' => '2014-01-04', + ]); + $this->assertEquals(0, $list->Count()); + + // Mock searches for 5th Jan + $list = FileFilter::filterList($baseList, [ + 'lastEditedFrom' => date('Y-m-d'), + 'lastEditedTo' => date('Y-m-d'), + ]); + $this->assertEquals(2, $list->Count()); + $this->assertContains($file1->ID, $list->column('ID')); + + + // Mock searches for 5th-6th Jan + $list = FileFilter::filterList($baseList, [ + 'createdFrom' => '2014-01-05', + 'createdTo' => '2014-01-06', + ]); + $this->assertEquals(2, $list->Count()); + $this->assertContains($file1->ID, $list->column('ID')); + $this->assertContains($file2->ID, $list->column('ID')); + + // Mock searches for 6th Jan + $list = FileFilter::filterList($baseList, [ + 'createdFrom' => '2014-01-06', + 'createdTo' => '2014-01-06', + ]); + $this->assertEquals(1, $list->Count()); + $this->assertContains($file2->ID, $list->column('ID')); + + // Mock searches for 7th Jan + $list = FileFilter::filterList($baseList, [ + 'lastEditedFrom' => '2014-01-07', + 'lastEditedTo' => '2014-01-07', + ]); + $this->assertEquals(0, $list->Count()); + } + + public function testItFiltersByParentId() + { + $folder1 = new Folder([ + 'name' => 'folder1' + ]); + $folder1->write(); + + $folder2 = new Folder([ + 'name' => 'folder2' + ]); + $folder2->write(); + + $file1 = new File([ + 'ParentID' => $folder1->ID, + ]); + $file1->write(); + + $file2 = new File([ + 'ParentID' => $folder2->ID, + ]); + $file2->write(); + + $baseList = File::get(); + $list = FileFilter::filterList($baseList, [ + 'parentId' => $folder1->ID + ]); + $this->assertContains( + $file1->ID, + $list->column('ID'), + 'Contains file in folder' + ); + $this->assertNotContains( + $file2->ID, + $list->column('ID'), + 'Does not contain file in another folder' + ); + } + + public function testItFiltersById() + { + $file1 = new File([ + ]); + $file1->write(); + + $file2 = new File([ + ]); + $file2->write(); + + $baseList = File::get(); + + $list = FileFilter::filterList($baseList, [ + 'id' => $file1->ID + ]); + $this->assertContains( + $file1->ID, + $list->column('ID'), + 'Contains file matched by ID' + ); + $this->assertNotContains( + $file2->ID, + $list->column('ID'), + 'Does not contain other files' + ); + } + + public function testItFiltersByChildId() + { + $folder1 = new Folder([ + 'name' => 'folder1' + ]); + $folder1->write(); + + $folder2 = new Folder([ + 'name' => 'folder2' + ]); + $folder2->write(); + + $file1 = new File([ + 'ParentID' => $folder1->ID, + ]); + $file1->write(); + + $file2 = new File([ + 'ParentID' => $folder2->ID, + ]); + $file2->write(); + + $baseList = File::get(); + + $list = FileFilter::filterList($baseList, [ + 'anyChildId' => $file2->ID + ]); + $this->assertContains( + $folder2->ID, + $list->column('ID'), + 'Finds parent folder' + ); + $this->assertNotContains( + $folder1->ID, + $list->column('ID'), + 'Does not find non-parent folder' + ); + } + + public function testItFiltersByName() + { + $folder = new Folder([ + 'Name' => 'FooFolderName', + 'Title' => 'FooFolderTitle' + ]); + $folder->write(); + + $file1 = new File([ + 'Name' => 'FooFileName', + 'Title' => 'FooFileTitle' + ]); + $file1->write(); + + $file2 = new File([ + 'Name' => 'BarFileName', + 'Title' => 'BarFileTitle', + ]); + $file2->write(); + + $baseList = File::get(); + $listByName = FileFilter::filterList($baseList, [ + 'name' => 'Foo', + ]); + + $this->assertEquals( + [$file1->ID, $folder->ID], + $listByName->column('ID'), + 'Finds files and folders by name' + ); + + $baseList = File::get(); + $listByTitle = FileFilter::filterList($baseList, [ + 'name' => 'FooFileTitle', + ]); + + $this->assertEquals( + [$file1->ID], + $listByTitle->column('ID'), + 'Finds files and folders by title' + ); + } + + public function testItFiltersByAppCategory() + { + $image = new File([ + 'Name' => 'image.jpg', + ]); + $image->write(); + + $archive = new File([ + 'Name' => 'archive.zip', + ]); + $archive->write(); + + $baseList = File::get(); + $listImages = FileFilter::filterList($baseList, [ + 'appCategory' => ['jpg'], + ]); + $this->assertEquals( + [$image->ID], + $listImages->column('ID'), + 'Finds images by appCategory' + ); + + $baseList = File::get(); + $listArchives = FileFilter::filterList($baseList, [ + 'appCategory' => ['zip'], + ]); + $this->assertEquals( + [$archive->ID], + $listArchives->column('ID'), + 'Finds archives by appCategory' + ); + } +} diff --git a/tests/Modules/AssetAdmin/FileTypeCreatorTest.php b/tests/Modules/AssetAdmin/FileTypeCreatorTest.php new file mode 100644 index 00000000..f448b37f --- /dev/null +++ b/tests/Modules/AssetAdmin/FileTypeCreatorTest.php @@ -0,0 +1,80 @@ +markTestSkipped('AssetAdmin module not installed'); + } + TestAssetStore::activate('FileTypeCreatorTest'); + } + + protected function tearDown(): void + { + TestAssetStore::reset(); + parent::tearDown(); + } + + public function testThumbnail() + { + $this->logInWithPermission('ADMIN'); + ThumbnailGenerator::config()->set('thumbnail_links', [ + AssetStore::VISIBILITY_PROTECTED => ThumbnailGenerator::INLINE, + AssetStore::VISIBILITY_PUBLIC => ThumbnailGenerator::URL, + ]); + + $assetAdmin = AssetAdmin::create(); + + // Build image + $image = new Image(); + $image->setFromLocalFile(__DIR__.'/fixtures/largeimage.png', 'TestImage.png'); + $image->write(); + + // Image original is unset + $thumbnail = FileTypeResolver::resolveFileThumbnail($image, [], [], null); + $this->assertNull($thumbnail); + + // Generate thumbnails by viewing this file's data + $assetAdmin->getObjectFromData($image, false); + + // protected image should have inline thumbnail + $thumbnail = FileTypeResolver::resolveFileThumbnail($image, [], [], null); + $this->assertStringStartsWith('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWAAAADr', $thumbnail); + + // public image should have url + $image->publishSingle(); + $thumbnail = FileTypeResolver::resolveFileThumbnail($image, [], [], null); + $this->assertEquals('/assets/FileTypeCreatorTest/TestImage__FitMaxWzM1MiwyNjRd.png', $thumbnail); + + // Public assets can be set to inline + ThumbnailGenerator::config()->merge('thumbnail_links', [ + AssetStore::VISIBILITY_PUBLIC => ThumbnailGenerator::INLINE, + ]); + $thumbnail = FileTypeResolver::resolveFileThumbnail($image, [], [], null); + $this->assertStringStartsWith('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWAAAADr', $thumbnail); + + // Protected assets can be set to url + // This uses protected asset adapter, so not direct asset link + ThumbnailGenerator::config()->merge('thumbnail_links', [ + AssetStore::VISIBILITY_PROTECTED => ThumbnailGenerator::URL, + ]); + $image->doUnpublish(); + $thumbnail = FileTypeResolver::resolveFileThumbnail($image, [], [], null); + $this->assertEquals('/assets/8cf6c65fa7/TestImage__FitMaxWzM1MiwyNjRd.png', $thumbnail); + } +} diff --git a/tests/Modules/AssetAdmin/FolderExtension.php b/tests/Modules/AssetAdmin/FolderExtension.php new file mode 100644 index 00000000..a9e592ba --- /dev/null +++ b/tests/Modules/AssetAdmin/FolderExtension.php @@ -0,0 +1,37 @@ +owner->Name === 'disallowCanView') { + return false; + } + } + + public function canEdit($member = null, $context = array()) + { + if ($this->owner->Name === 'disallowCanEdit') { + return false; + } + } + + public function canDelete($member = null, $context = array()) + { + if ($this->owner->Name === 'disallowCanDelete') { + return false; + } + } + + public function canCreate($member = null, $context = array()) + { + if (isset($context['Name']) && $context['Name'] === 'disallowCanCreate') { + return false; + } + } +} diff --git a/tests/Modules/AssetAdmin/FolderTypeCreatorTest.php b/tests/Modules/AssetAdmin/FolderTypeCreatorTest.php new file mode 100644 index 00000000..7a1a4564 --- /dev/null +++ b/tests/Modules/AssetAdmin/FolderTypeCreatorTest.php @@ -0,0 +1,134 @@ + 'folder']); + $folder->write(); + + $nestedFile = File::create([ + 'Name' => 'myNestedFile', + 'ParentID' => $folder->ID, + ]); + $nestedFile->write(); + + $rootFile = File::create([ + 'Name' => 'myRootFile', + 'ParentID' => 0, + ]); + $rootFile->write(); + + $listWithoutRecursive = $this->resolveChildrenConnection( + $rootFolder, + ['filter' => [ + 'recursive' => false + ]] + ); + $this->assertEquals( + [ + $folder->Name, + $rootFile->Name, + ], + $listWithoutRecursive->column('Name') + ); + + $listWithRecursive = $this->resolveChildrenConnection( + $rootFolder, + ['filter' => [ + 'recursive' => true + ]] + ); + $this->assertEquals( + [ + $folder->Name, + $nestedFile->Name, + $rootFile->Name, + ], + $listWithRecursive->column('Name') + ); + + // Test with partial tree search + $listWithPartialTreeRecursive = $this->resolveChildrenConnection( + $folder, + ['filter' => [ + 'recursive' => true + ]] + ); + $this->assertEquals( + [ + $nestedFile->Name, + ], + $listWithPartialTreeRecursive->column('Name') + ); + } + + public function testItShowsParents() + { + $folder1 = Folder::create(['Name' => 'folder1', 'ParentID' => 0]); + $folder1->write(); + + $folder1_1 = Folder::create(['Name' => 'folder1_1', 'ParentID' => $folder1->ID]); + $folder1_1->write(); + + $folder1_1_1 = Folder::create(['Name' => 'folder1_1_1', 'ParentID' => $folder1_1->ID]); + $folder1_1_1->write(); + + $folder2 = Folder::create(['Name' => 'folder2', 'ParentID' => 0]); + $folder2->write(); + + $parents = FolderTypeResolver::resolveFolderParents( + $folder1_1_1, + [], + $this->getContext(), + new FakeResolveInfo() + ); + $this->assertEquals( + [ + $folder1->Name, + $folder1_1->Name + ], + array_map(function ($folder) { + return $folder->Name; + }, $parents ?? []) + ); + } + + protected function getContext() + { + return [ + 'currentUser' => null + ]; + } + + protected function resolveChildrenConnection($object, $args, $context = null) + { + $context = $context ? $context : $this->getContext(); + return FolderTypeResolver::resolveFolderChildren( + $object, + $args, + $context, + new FakeResolveInfo() + ); + } +} diff --git a/tests/Modules/AssetAdmin/ReadFileQueryCreatorTest.php b/tests/Modules/AssetAdmin/ReadFileQueryCreatorTest.php new file mode 100644 index 00000000..31760ca6 --- /dev/null +++ b/tests/Modules/AssetAdmin/ReadFileQueryCreatorTest.php @@ -0,0 +1,89 @@ +expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('view access not permitted'); + $folder = new Folder(['Name' => 'disallowCanView']); + $folder->write(); + + $this->getResultsForSearch([ + 'filter' => ['parentId' => $folder->ID], + ]); + } + + public function testItFiltersResultsByCanView() + { + $allowedFolder = new Folder(['Name' => 'allowedFolder']); + $allowedFolder->write(); + + $disallowedFolder = new Folder(['Name' => 'disallowCanView']); + $disallowedFolder->write(); + + $allowedFile = new File(['Name' => 'allowedFile']); + $allowedFile->write(); + + $disallowedFile = new File(['Name' => 'disallowCanView.txt']); + $disallowedFile->write(); + + $list = $this->getResultsForSearch([ + 'filter' => ['parentId' => 0], + ]); + + $this->assertEquals( + [ + $allowedFile->Name, + $allowedFolder->Name, + ], + $list->column('Name') + ); + } + + /** + * @param array $args + * @param array $context + * @return \SilverStripe\ORM\DataList|\SilverStripe\ORM\Filterable + */ + protected function getResultsForSearch($args, $context = null) + { + $context = $context ? $context : ['currentUser' => null]; + + return AssetAdminResolver::resolveReadFiles(null, $args, $context, new FakeResolveInfo()); + } +} diff --git a/tests/Modules/AssetAdmin/ReadFileUsageQueryCreatorTest.php b/tests/Modules/AssetAdmin/ReadFileUsageQueryCreatorTest.php new file mode 100644 index 00000000..620467a4 --- /dev/null +++ b/tests/Modules/AssetAdmin/ReadFileUsageQueryCreatorTest.php @@ -0,0 +1,100 @@ +idFromFixture($class, $fixture); + $this->assertUsageCount($id, $expectedCount, $message); + } + + public function testUsageCountForNonExistentFile() + { + $this->expectException('InvalidArgumentException'); + $this->assertUsageCount(999, false, 'File 999 should throw an exception because it does not exists.'); + } + + /** + * @param array $args + * @param array $context + * @return array + */ + protected function getResultsForSearch($args, $context = null) + { + $context = $context ? $context : ['currentUser' => null]; + return AssetAdminResolver::resolveReadFileUsage(null, $args, $context, new FakeResolveInfo()); + } + + /** + * Assert the file usage of the provided file ID. + * @param string $fixture + * @param int|false $expectedCount $expectedCount or false, if no result should be returned + */ + private function assertUsageCount($id, $expectedCount, $message) + { + $actual = $this->getResultsForSearch(['ids' => [$id]]); + if ($expectedCount === false) { + $this->assertEmpty($actual, $message); + } else { + $expected = [[ + 'id' => $id, + 'inUseCount' => $expectedCount + ]]; + $this->assertEquals($expected, $actual, $message); + } + } +} diff --git a/tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest.php b/tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest.php new file mode 100644 index 00000000..7302e2b2 --- /dev/null +++ b/tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest.php @@ -0,0 +1,67 @@ +set('owns', ['OwnedFile']); + } + + public function testUnpublishWithOwners() + { + // Bootstrap test + $this->logInWithPermission('ADMIN'); + $member = Security::getCurrentUser(); + $context = ['currentUser' => $member]; + $resolveInfo = new FakeResolveInfo(); + + /** @var File $file */ + $file = $this->objFromFixture(File::class, 'file1'); + $file->publishSingle(); + + // 4 owners, 3 published owners + for ($i = 1; $i <= 4; $i++) { + $owner = new UnpublishFileMutationCreatorTest\FileOwner(); + $owner->OwnedFileID = $file->ID; + $owner->Title = "My Owner {$i}"; + $owner->write(); + // Only 3 of these are published + if ($i !== 4) { + $owner->publishSingle(); + } + } + + // Test unpublish without force + $result = PublicationResolver::resolveUnpublishFiles(null, ['ids' => [$file->ID]], $context, $resolveInfo); + $this->assertCount(1, $result); + /** @var Notice $notice */ + $notice = $result[0]; + $this->assertInstanceOf(Notice::class, $notice); + $this->assertEquals('File "The First File" is used in 3 places.', $notice->getMessage()); + $this->assertTrue($file->isPublished()); + + // Unpublish with force + $result = PublicationResolver::resolveUnpublishFiles(null, ['ids' => [$file->ID], 'force' => true], $context, $resolveInfo); + $this->assertCount(1, $result); + $fileResult = $result[0]; + $this->assertInstanceOf(File::class, $fileResult); + $this->assertFalse($file->isPublished()); + } +} diff --git a/tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest.yml b/tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest.yml new file mode 100644 index 00000000..7d679606 --- /dev/null +++ b/tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest.yml @@ -0,0 +1,51 @@ +SilverStripe\Security\Member: + member1: + FirstName: Christopher + Surname: Pitt + member2: + FirstName: Damian + Surname: Mooyman +SilverStripe\Assets\Folder: + folder1: + Title: folder1 + folder2: + Title: folder2 + folder1.1: + Title: folder1.1 + Parent: =>SilverStripe\Assets\Folder.folder1 + disallowCanAddChildren: + Title: disallowCanAddChildren +SilverStripe\Assets\File: + rootfile: + Name: rootfile.jpg + Title: rootfile + file1: + Created: '2015-08-19 00:00:00' + LastUpdated: '2015-08-27 00:00:00' + Owner: =>SilverStripe\Security\Member.member1 + Parent: =>SilverStripe\Assets\Folder.folder1 + Name: file1.jpg + Title: The First File + file2: + Created: '2015-08-20 00:00:00' + LastUpdated: '2015-08-28 00:00:00' + Owner: =>SilverStripe\Security\Member.member2 + Parent: =>SilverStripe\Assets\Folder.folder2 + Name: file2.jpg + Title: The Second File + file3: + Created: '2015-08-21 00:00:00' + LastUpdated: '2015-08-29 00:00:00' + Owner: =>SilverStripe\Security\Member.member2 + Parent: =>SilverStripe\Assets\Folder.folder2 + Name: file3.jpg + Title: The Third File + disallowCanView: + Parent: =>SilverStripe\Assets\Folder.folder1 + Name: disallowCanView.txt + disallowCanEdit: + Parent: =>SilverStripe\Assets\Folder.folder1 + Name: disallowCanEdit.txt + disallowCanDelete: + Parent: =>SilverStripe\Assets\Folder.folder1 + Name: disallowCanDelete.txt diff --git a/tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest/FileOwner.php b/tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest/FileOwner.php new file mode 100644 index 00000000..5005fdbd --- /dev/null +++ b/tests/Modules/AssetAdmin/UnpublishFileMutationCreatorTest/FileOwner.php @@ -0,0 +1,31 @@ + 'Varchar', + ]; + + private static $has_one = [ + 'OwnedFile' => File::class, + ]; +} diff --git a/tests/Modules/AssetAdmin/fixtures.yml b/tests/Modules/AssetAdmin/fixtures.yml new file mode 100644 index 00000000..e99e81a8 --- /dev/null +++ b/tests/Modules/AssetAdmin/fixtures.yml @@ -0,0 +1,60 @@ +SilverStripe\Security\Member: + member1: + FirstName: Christopher + Surname: Pitt + member2: + FirstName: Damian + Surname: Mooyman +SilverStripe\Assets\Folder: + folder1: + Title: folder1 + folder2: + Title: folder2 + folder1.1: + Title: folder1.1 + Parent: =>SilverStripe\Assets\Folder.folder1 + disallowCanAddChildren: + Title: disallowCanAddChildren +SilverStripe\Assets\File: + rootfile: + Name: rootfile.jpg + Title: rootfile + file1: + Created: '2015-08-19 00:00:00' + LastUpdated: '2015-08-27 00:00:00' + Owner: =>SilverStripe\Security\Member.member1 + Parent: =>SilverStripe\Assets\Folder.folder1 + Name: file1.jpg + Title: The First File + file2: + Created: '2015-08-20 00:00:00' + LastUpdated: '2015-08-28 00:00:00' + Owner: =>SilverStripe\Security\Member.member2 + Parent: =>SilverStripe\Assets\Folder.folder2 + Name: file2.jpg + Title: The Second File + file3: + Created: '2015-08-21 00:00:00' + LastUpdated: '2015-08-29 00:00:00' + Owner: =>SilverStripe\Security\Member.member2 + Parent: =>SilverStripe\Assets\Folder.folder2 + Name: file3.jpg + Title: The Third File + disallowCanView: + Parent: =>SilverStripe\Assets\Folder.folder1 + Name: disallowCanView.txt + disallowCanEdit: + Parent: =>SilverStripe\Assets\Folder.folder1 + Name: disallowCanEdit.txt + disallowCanDelete: + Parent: =>SilverStripe\Assets\Folder.folder1 + Name: disallowCanDelete.txt +SilverStripe\Assets\Shortcodes\FileLink: + usingrootfileonce: + Linked: =>SilverStripe\Assets\File.rootfile + usingrootfiletwice: + Linked: =>SilverStripe\Assets\File.rootfile + usingfile1: + Linked: =>SilverStripe\Assets\File.file1 + usingreadonlyfile: + Linked: =>SilverStripe\Assets\File.disallowCanView diff --git a/tests/Modules/AssetAdmin/fixtures/largeimage.png b/tests/Modules/AssetAdmin/fixtures/largeimage.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4a4dc23b73f9d5bc5225d9fe43a847bfb8a12b GIT binary patch literal 1780 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'CMS test ' . __CLASS__ . ' skipped'); + } + } + + /** + * @param bool $list + * @dataProvider provideApply + */ + public function testApply(bool $list) + { + $query = new ModelQuery( + new DataObjectModel(SiteTree::class, new SchemaConfig()), + 'testQuery' + ); + $query->setType($list ? '[SiteTree]' : 'SiteTree'); + + $plugin = new LinkablePlugin(); + $plugin->apply($query, new Schema('test')); + $args = $query->getArgs(); + $field = $list ? 'links' : 'link'; + $this->assertArrayHasKey($field, $args); + $this->assertEquals($list ? '[String]' : 'String', $args[$field]->getType()); + } + + public function testResolver() + { + $page = new SiteTree([ + 'Title' => 'Test page', + 'URLSegment' => 'test-page', + 'ParentID' => 0, + ]); + $page->write(); + $page->publishRecursive(); + + $page = new SiteTree([ + 'Title' => 'Other test page', + 'URLSegment' => 'other-test-page', + 'ParentID' => 0, + ]); + + $page->write(); + $page->publishRecursive(); + + $result = LinkablePlugin::applyLinkFilter('test', ['link' => 'test-page'], [], new FakeResolveInfo()); + $this->assertTrue($result->exists()); + $this->assertEquals('Test page', $result->first()->Title); + + $result = LinkablePlugin::applyLinkFilter('test', ['links' => ['test-page']], [], new FakeResolveInfo()); + $this->assertTrue($result->exists()); + $this->assertEquals('Test page', $result->first()->Title); + + $result = LinkablePlugin::applyLinkFilter( + 'test', + ['links' => ['test-page', 'other-test-page']], + [], + new FakeResolveInfo() + ); + $this->assertTrue($result->exists()); + $this->assertCount(2, $result); + $titles = $result->column('Title'); + $this->assertTrue(in_array('Test page', $titles ?? [])); + $this->assertTrue(in_array('Other test page', $titles ?? [])); + + $result = LinkablePlugin::applyLinkFilter( + 'test', + ['links' => ['test-page', 'fail-page']], + [], + new FakeResolveInfo() + ); + $this->assertTrue($result->exists()); + $this->assertCount(1, $result); + $this->assertEquals('Test page', $result->first()->Title); + + $result = LinkablePlugin::applyLinkFilter('test', ['link' => 'fail-page'], [], new FakeResolveInfo()); + $this->assertFalse($result->exists()); + + $result = LinkablePlugin::applyLinkFilter('test', ['links' => ['fail-page']], [], new FakeResolveInfo()); + $this->assertFalse($result->exists()); + + $result = LinkablePlugin::applyLinkFilter('test', ['notAnArg' => 'fail'], [], new FakeResolveInfo()); + $this->assertEquals('test', $result); + } + + + public function provideApply() + { + return [ + [true], + [false], + ]; + } +} diff --git a/tests/Modules/Versioned/Fake/Fake.php b/tests/Modules/Versioned/Fake/Fake.php new file mode 100644 index 00000000..a7037d27 --- /dev/null +++ b/tests/Modules/Versioned/Fake/Fake.php @@ -0,0 +1,35 @@ + "Varchar", + ]; + + private static $extensions = [ + Versioned::class, + ]; + + public function canView($member = null) + { + $extended = $this->extendedCan(__FUNCTION__, $member); + if ($extended !== null) { + return $extended; + } + return true; + } +} diff --git a/tests/Modules/Versioned/Fake/FakeDataObjectStub.php b/tests/Modules/Versioned/Fake/FakeDataObjectStub.php new file mode 100644 index 00000000..602d82f6 --- /dev/null +++ b/tests/Modules/Versioned/Fake/FakeDataObjectStub.php @@ -0,0 +1,36 @@ + 'Varchar', + 'Editable' => 'Boolean', + ]; + + private static $defaults = [ + 'Editable' => true, + ]; + + private static $extensions = [ + Versioned::class, + ]; + + public static $rollbackCalled = false; + + public function canEdit($member = null) + { + return $this->Editable; + } + + public function rollbackRecursive($rollbackVersion) + { + FakeDataObjectStub::$rollbackCalled = true; + } +} diff --git a/tests/Modules/Versioned/Fake/FakeResolveInfo.php b/tests/Modules/Versioned/Fake/FakeResolveInfo.php new file mode 100644 index 00000000..713aae55 --- /dev/null +++ b/tests/Modules/Versioned/Fake/FakeResolveInfo.php @@ -0,0 +1,28 @@ + 'fake', 'type' => Type::string()]), + new \ArrayObject, + new ObjectType(['name' => 'fake']), + [], + new Schema([]), + [], + '', + new OperationDefinitionNode([]), + [] + ); + } +} diff --git a/tests/Modules/Versioned/Plugins/UnversionedWithField.php b/tests/Modules/Versioned/Plugins/UnversionedWithField.php new file mode 100644 index 00000000..5e9ac195 --- /dev/null +++ b/tests/Modules/Versioned/Plugins/UnversionedWithField.php @@ -0,0 +1,15 @@ + 'Varchar(255)' + ]; +} diff --git a/tests/Modules/Versioned/Plugins/VersionedDataObjectPluginTest.php b/tests/Modules/Versioned/Plugins/VersionedDataObjectPluginTest.php new file mode 100644 index 00000000..1a6c320f --- /dev/null +++ b/tests/Modules/Versioned/Plugins/VersionedDataObjectPluginTest.php @@ -0,0 +1,117 @@ +markTestSkipped('Skipped Versioned test ' . __CLASS__); + } + } + + public function testPluginAddsVersionedFields() + { + $config = $this->createSchemaConfig(); + $model = DataObjectModel::create(Fake::class, $config); + $type = ModelType::create($model); + $type->addField('name'); + + $schema = new Schema('test', $config); + $schema->addModel($type); + $plugin = new VersionedDataObject(); + $plugin->updateSchema($schema); + $this->assertInstanceOf(ModelType::class, $schema->getModelByClassName(Member::class)); + + $plugin->apply($type, $schema); + $storableSchema = $schema->createStoreableSchema(); + $types = $storableSchema->getTypes(); + $this->assertArrayHasKey('FakeVersion', $types); + $versionType = $types['FakeVersion']; + $this->assertInstanceOf(Type::class, $versionType); + + $fields = ['author', 'publisher', 'published', 'liveVersion', 'latestDraftVersion']; + foreach ($fields as $fieldName) { + $field = $versionType->getFieldByName($fieldName); + $this->assertInstanceOf(Field::class, $field, 'Field ' . $fieldName . ' not found'); + $this->assertEquals(VersionedResolver::class . '::resolveVersionFields', $field->getResolver()->toString()); + } + + $fields = ['version', 'name']; + foreach ($fields as $fieldName) { + $field = $type->getFieldByName($fieldName); + $this->assertInstanceOf(Field::class, $field, 'Field ' . $fieldName . ' not found'); + // temorarily removed until BuildState API is in graphql ^4 + //$this->assertEquals(Resolver::class . '::resolve', $field->getEncodedResolver()->getRef()->toString()); + } + + $this->assertInstanceOf(Field::class, $type->getFieldByName('versions')); + } + + public function testPluginDoesntAddVersionedFieldsToUnversionedObjects() + { + Fake::remove_extension(Versioned::class); + $config = $this->createSchemaConfig(); + $type = ModelType::create(DataObjectModel::create(Fake::class, $config)); + $type->addField('Name'); + + $schema = new Schema('test', $config); + $schema->addModel($type); + $plugin = new VersionedDataObject(); + $plugin->updateSchema($schema); + + $plugin->apply($type, $schema); + $type = $schema->getType('FakeVersion'); + $this->assertNull($type); + + Fake::add_extension(Versioned::class); + } + + /** + * @return SchemaConfig + */ + private function createSchemaConfig(): SchemaConfig + { + return new SchemaConfig([ + 'modelCreators' => [ModelCreator::class], + ]); + } +} diff --git a/tests/Modules/Versioned/Plugins/VersionedReadTest.php b/tests/Modules/Versioned/Plugins/VersionedReadTest.php new file mode 100644 index 00000000..46ffc341 --- /dev/null +++ b/tests/Modules/Versioned/Plugins/VersionedReadTest.php @@ -0,0 +1,72 @@ +markTestSkipped('Skipped Versioned test ' . __CLASS__); + } + } + + public function testVersionedRead() + { + $config = $this->createSchemaConfig(); + $model = DataObjectModel::create(Fake::class, $config); + $query = ModelQuery::create($model, 'testQuery'); + $schema = new Schema('test', $config); + $schema->addQuery($query); + $plugin = new VersionedRead(); + $plugin->apply($query, $schema); + $this->assertCount(1, $query->getResolverAfterwares()); + $this->assertEquals( + VersionedResolver::class . '::resolveVersionedRead', + $query->getResolverAfterwares()[0]->getRef()->toString() + ); + $this->assertCount(1, $query->getArgs()); + $this->assertArrayHasKey('versioning', $query->getArgs()); + } + + /** + * @return SchemaConfig + */ + private function createSchemaConfig(): SchemaConfig + { + return new SchemaConfig([ + 'modelCreators' => [ModelCreator::class], + ]); + } +} diff --git a/tests/Modules/Versioned/Resolvers/VersionedFiltersTest.php b/tests/Modules/Versioned/Resolvers/VersionedFiltersTest.php new file mode 100644 index 00000000..e0b361d8 --- /dev/null +++ b/tests/Modules/Versioned/Resolvers/VersionedFiltersTest.php @@ -0,0 +1,289 @@ +markTestSkipped('Skipped Versioned test ' . __CLASS__); + } + } + + public function testItValidatesArchiveDate() + { + $filter = new VersionFilters(); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/ArchiveDate parameter/'); + $filter->validateArgs(['mode' => 'archive']); + } + + public function testItValidatesArchiveDateFormat() + { + $filter = new VersionFilters(); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/Invalid date/'); + $filter->validateArgs(['mode' => 'archive', 'archiveDate' => '01/12/2018']); + } + + public function testItValidatesStatusParameter() + { + $filter = new VersionFilters(); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/Status parameter/'); + $filter->validateArgs(['mode' => 'status']); + } + + public function testItValidatesVersionParameter() + { + $filter = new VersionFilters(); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/Version parameter/'); + $filter->validateArgs(['mode' => 'version']); + } + + public function testItSetsReadingStateByMode() + { + Versioned::withVersionedMode(function () { + $filter = new VersionFilters(); + $filter->applyToReadingState(['mode' => Versioned::DRAFT]); + $this->assertEquals(Versioned::DRAFT, Versioned::get_stage()); + }); + } + + public function testItSetsReadingStateByArchiveDate() + { + Versioned::withVersionedMode(function () { + $filter = new VersionFilters(); + $filter->applyToReadingState(['mode' => 'archive', 'archiveDate' => '2018-01-01']); + $this->assertEquals('2018-01-01', Versioned::current_archived_date()); + }); + } + + public function testItFiltersByStageOnApplyToList() + { + $filter = new VersionFilters(); + $record1 = new Fake(); + $record1->Name = 'First version draft'; + $record1->write(); + + $record2 = new Fake(); + $record2->Name = 'First version live'; + $record2->write(); + $record2->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); + + $list = Fake::get(); + $list = $filter->applyToList($list, ['mode' => Versioned::DRAFT]); + $this->assertCount(2, $list); + + $list = Fake::get(); + $list = $filter->applyToList($list, ['mode' => Versioned::LIVE]); + $this->assertCount(1, $list); + } + + public function testItThrowsIfArchiveAndNoDateOnApplyToList() + { + $filter = new VersionFilters(); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/ArchiveDate parameter/'); + $list = Fake::get(); + $filter->applyToList($list, ['mode' => 'archive']); + } + + public function testItThrowsIfArchiveAndInvalidDateOnApplyToList() + { + $filter = new VersionFilters(); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/Invalid date/'); + $list = Fake::get(); + $filter->applyToList($list, ['mode' => 'archive', 'archiveDate' => 'foo']); + } + + + public function testItThrowsIfVersionAndNoVersionOnApplyToList() + { + $filter = new VersionFilters(); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/Version parameter/'); + $list = Fake::get(); + $filter->applyToList($list, ['mode' => 'version']); + } + + public function testItSetsArchiveQueryParamsOnApplyToList() + { + $filter = new VersionFilters(); + $list = Fake::get(); + $list = $filter->applyToList( + $list, + [ + 'mode' => 'archive', + 'archiveDate' => '2016-11-08', + ] + ); + + $this->assertEquals('archive', $list->dataQuery()->getQueryParam('Versioned.mode')); + $this->assertEquals('2016-11-08', $list->dataQuery()->getQueryParam('Versioned.date')); + } + + public function testItSetsVersionQueryParamsOnApplyToList() + { + $filter = new VersionFilters(); + $list = Fake::get(); + $list = $filter->applyToList( + $list, + [ + 'mode' => 'version', + 'version' => '5', + ] + ); + + $this->assertEquals('version', $list->dataQuery()->getQueryParam('Versioned.mode')); + $this->assertEquals('5', $list->dataQuery()->getQueryParam('Versioned.version')); + } + + public function testItSetsLatestVersionQueryParamsOnApplyToList() + { + $filter = new VersionFilters(); + $list = Fake::get(); + $list = $filter->applyToList( + $list, + [ + 'mode' => 'latest_versions', + ] + ); + + $this->assertEquals('latest_versions', $list->dataQuery()->getQueryParam('Versioned.mode')); + } + + public function testItSetsAllVersionsQueryParamsOnApplyToList() + { + $filter = new VersionFilters(); + $list = Fake::get(); + $list = $filter->applyToList( + $list, + [ + 'mode' => 'all_versions', + ] + ); + + $this->assertEquals('all_versions', $list->dataQuery()->getQueryParam('Versioned.mode')); + } + + public function testItThrowsOnNoStatusOnApplyToList() + { + $filter = new VersionFilters(); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/Status parameter/'); + $list = Fake::get(); + $filter->applyToList($list, ['mode' => 'status']); + } + + public function testStatusOnApplyToList() + { + $filter = new VersionFilters(); + $record1 = new Fake(); + $record1->Name = 'Only on draft'; + $record1->write(); + + $record2 = new Fake(); + $record2->Name = 'Published'; + $record2->write(); + $record2->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); + + $record3 = new Fake(); + $record2->Name = 'Will be modified'; + $record3->write(); + $record3->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); + $record3->Name = 'Modified'; + $record3->write(); + + $record4 = new Fake(); + $record4->Name = 'Will be archived'; + $record4->write(); + $record4->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); + $oldID = $record4->ID; + $record4->delete(); + $list = Fake::get(); + $list = $filter->applyToList( + $list, + [ + 'mode' => 'status', + 'status' => ['modified'] + ] + ); + $this->assertListEquals([['ID' => $record3->ID]], $list); + + $list = Fake::get(); + $list = $filter->applyToList( + $list, + [ + 'mode' => 'status', + 'status' => ['archived'] + ] + ); + $this->assertCount(1, $list); + $this->assertEquals($oldID, $list->first()->ID); + + $list = Fake::get(); + $list = $filter->applyToList( + $list, + [ + 'mode' => 'status', + 'status' => ['draft'] + ] + ); + + $this->assertCount(1, $list); + $ids = $list->column('ID'); + $this->assertContains($record1->ID, $ids); + + + $list = Fake::get(); + $list = $filter->applyToList( + $list, + [ + 'mode' => 'status', + 'status' => ['draft', 'modified'] + ] + ); + + $this->assertCount(2, $list); + $ids = $list->column('ID'); + + $this->assertContains($record3->ID, $ids); + $this->assertContains($record1->ID, $ids); + + $list = Fake::get(); + $list = $filter->applyToList( + $list, + [ + 'mode' => 'status', + 'status' => ['archived', 'modified'] + ] + ); + + $this->assertCount(2, $list); + $ids = $list->column('ID'); + $this->assertTrue(in_array($record3->ID, $ids ?? [])); + $this->assertTrue(in_array($oldID, $ids ?? [])); + } +} diff --git a/tests/Modules/Versioned/Resolvers/VersionedResolverTest.php b/tests/Modules/Versioned/Resolvers/VersionedResolverTest.php new file mode 100644 index 00000000..4022f558 --- /dev/null +++ b/tests/Modules/Versioned/Resolvers/VersionedResolverTest.php @@ -0,0 +1,292 @@ +markTestSkipped('Skipped Versioned test ' . __CLASS__); + } + } + + public function testVersionedRead() + { + /* @var Fake|Versioned $record */ + $record = new Fake(); + $record->Name = 'First'; + $record->write(); + + $this->logInWithPermission('ADMIN'); + $member = Security::getCurrentUser(); + + $list = Fake::get(); + $resolvedList = VersionedResolver::resolveVersionedRead( + $list, + ['versioning' => [ + 'mode' => Versioned::LIVE + ]], + ['currentUser' => $member], + new FakeResolveInfo() + ); + $this->assertEquals( + $resolvedList->Count(), + 0, + 'Excludes draft records records in live mode' + ); + + $record->publishSingle(); + + $list = Fake::get(); + $resolvedList = VersionedResolver::resolveVersionedRead( + $list, + ['versioning' => [ + 'mode' => Versioned::LIVE + ]], + ['currentUser' => $member], + new FakeResolveInfo() + ); + $this->assertEquals( + $resolvedList->Count(), + 1, + 'Includes live records records in live mode' + ); + $this->assertEquals( + $resolvedList->First()->ID, + $record->ID, + 'Includes live records records in live mode' + ); + } + + public function testCopyToStage() + { + /* @var Fake|Versioned $record */ + $record = new Fake(); + $record->Name = 'First'; + $record->write(); // v1 + + $this->logInWithPermission('ADMIN'); + $member = Security::getCurrentUser(); + $resolve = VersionedResolver::resolveCopyToStage(['dataClass' => Fake::class]); + $resolve( + null, + [ + 'input' => [ + 'fromStage' => Versioned::DRAFT, + 'toStage' => Versioned::LIVE, + 'id' => $record->ID, + ], + ], + [ 'currentUser' => $member ], + new FakeResolveInfo() + ); + $recordLive = Versioned::get_by_stage(Fake::class, Versioned::LIVE) + ->byID($record->ID); + $this->assertNotNull($recordLive); + $this->assertEquals($record->ID, $recordLive->ID); + + $record->Name = 'Second'; + $record->write(); + $newVersion = $record->Version; + + $recordLive = Versioned::get_by_stage(Fake::class, Versioned::LIVE) + ->byID($record->ID); + $this->assertEquals('First', $recordLive->Title); + + // Invoke publish + $resolve( + null, + [ + 'input' => [ + 'fromVersion' => $newVersion, + 'toStage' => Versioned::LIVE, + 'id' => $record->ID, + ], + ], + [ 'currentUser' => $member ], + new FakeResolveInfo() + ); + $recordLive = Versioned::get_by_stage(Fake::class, Versioned::LIVE) + ->byID($record->ID); + $this->assertEquals('Second', $recordLive->Title); + + // Test error + $this->expectException(\InvalidArgumentException::class); + $resolve( + null, + [ + 'input' => [ + 'toStage' => Versioned::DRAFT, + 'id' => $record->ID, + ], + ], + [ 'currentUser' => new Member() ], + new FakeResolveInfo() + ); + } + + public function testPublish() + { + $record = new Fake(); + $record->Name = 'First'; + $record->write(); + + $result = Versioned::get_by_stage(Fake::class, Versioned::LIVE) + ->byID($record->ID); + + $this->assertNull($result); + $this->logInWithPermission('ADMIN'); + $member = Security::getCurrentUser(); + $resolve = VersionedResolver::resolvePublishOperation([ + 'dataClass' => Fake::class, + 'action' => AbstractPublishOperationCreator::ACTION_PUBLISH + ]); + $resolve( + null, + [ + 'id' => $record->ID + ], + [ 'currentUser' => $member ], + new FakeResolveInfo() + ); + $result = Versioned::get_by_stage(Fake::class, Versioned::LIVE) + ->byID($record->ID); + + $this->assertNotNull($result); + $this->assertInstanceOf(Fake::class, $result); + $this->assertEquals('First', $result->Name); + + $this->expectException(Exception::class); + $this->expectExceptionMessageMatches('/^Not allowed/'); + $resolve( + null, + [ + 'id' => $record->ID + ], + [ 'currentUser' => new Member() ], + new FakeResolveInfo() + ); + } + + public function testUnpublish() + { + $record = new Fake(); + $record->Name = 'First'; + $record->write(); + $record->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); + $result = Versioned::get_by_stage(Fake::class, Versioned::LIVE) + ->byID($record->ID); + + $this->assertNotNull($result); + $this->assertInstanceOf(Fake::class, $result); + $this->assertEquals('First', $result->Name); + + $this->logInWithPermission('ADMIN'); + $member = Security::getCurrentUser(); + $doResolve = VersionedResolver::resolvePublishOperation([ + 'dataClass' => Fake::class, + 'action' => AbstractPublishOperationCreator::ACTION_UNPUBLISH + ]); + $doResolve( + null, + [ + 'id' => $record->ID + ], + [ 'currentUser' => $member ], + new FakeResolveInfo() + ); + $result = Versioned::get_by_stage(Fake::class, Versioned::LIVE) + ->byID($record->ID); + + $this->assertNull($result); + + $record->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE); + $this->expectException(Exception::class); + $this->expectExceptionMessageMatches('/^Not allowed/'); + $doResolve( + null, + [ + 'id' => $record->ID + ], + [ 'currentUser' => new Member() ], + new FakeResolveInfo() + ); + } + + public function testRollbackCannotBePerformedWithoutEditPermission() + { + // Create a fake version of our stub + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/Current user does not have permission to roll back this resource/'); + + $stub = FakeDataObjectStub::create(); + $stub->Name = 'First'; + $stub->Editable = false; + $stub->write(); + + $this->doRollbackMutation($stub); + } + + public function testRollbackRecursiveIsCalled() + { + // Create a fake version of our stub + $stub = FakeDataObjectStub::create(); + $stub->Name = 'First'; + $stub->write(); + + $this->doRollbackMutation($stub); + + $this->assertTrue($stub::$rollbackCalled, 'RollbackRecursive was called'); + } + + protected function doRollbackMutation(DataObject $stub, $toVersion = 1, $member = null) + { + if (!$stub->isInDB()) { + $stub->write(); + } + + $doRollback = VersionedResolver::resolveRollback(['dataClass' => get_class($stub)]); + $args = [ + 'id' => $stub->ID, + 'toVersion' => $toVersion, + ]; + + $doRollback( + null, + $args, + [ 'currentUser' => $member ?: Security::getCurrentUser() ], + new FakeResolveInfo() + ); + } +} diff --git a/tests/Schema/TestSchemaBuilder.php b/tests/Schema/TestSchemaBuilder.php index 05047971..33d8eff3 100644 --- a/tests/Schema/TestSchemaBuilder.php +++ b/tests/Schema/TestSchemaBuilder.php @@ -13,6 +13,7 @@ use SilverStripe\GraphQL\Schema\Logger; use SilverStripe\GraphQL\Schema\Schema; use SilverStripe\GraphQL\Schema\SchemaBuilder; +use SilverStripe\GraphQL\Schema\Services\SchemaTranscribeHandler; class TestSchemaBuilder extends SchemaBuilder { @@ -101,7 +102,9 @@ private function bootstrapSchema(string $key) 'properties' => [ 'handlers' => [ 'graphqlTranscribe' => [ - 'off' => ['graphqlSchemaBuild'] + 'off' => ['graphqlSchemaBuild'], + 'on' => ['graphqlSchemaBuild'], + 'handler' => '%$' . SchemaTranscribeHandler::class, ], ], ],

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