Source of file AbstractPublishOperationCreator.php
Size: 2,620 Bytes - Last Modified: 2021-12-23T10:35:47+00:00
/var/www/docs.ssmods.com/process/src/src/GraphQL/Operations/AbstractPublishOperationCreator.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | <?php namespace SilverStripe\Versioned\GraphQL\Operations; use Exception; use GraphQL\Type\Definition\ResolveInfo; use GraphQL\Type\Definition\Type; use SilverStripe\Core\Config\Configurable; use SilverStripe\Core\Extensible; use SilverStripe\Core\Injector\Injectable; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\OperationResolver; use SilverStripe\GraphQL\Scaffolding\Scaffolders\MutationScaffolder; use SilverStripe\GraphQL\Schema\Exception\SchemaBuilderException; 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\ORM\DataObject; use SilverStripe\ORM\DataObjectInterface; use SilverStripe\ORM\DB; use SilverStripe\ORM\ValidationException; use SilverStripe\Security\Member; use SilverStripe\Versioned\GraphQL\Resolvers\VersionedResolver; use SilverStripe\Versioned\Versioned; // GraphQL dependency is optional in versioned, // and the following implementation relies on existence of this class (in GraphQL v4) if (!interface_exists(OperationCreator::class)) { return; } /** * Scaffolds a generic update operation for DataObjects. */ abstract class AbstractPublishOperationCreator implements OperationCreator { use Configurable; use Injectable; const ACTION_PUBLISH = 'publish'; const ACTION_UNPUBLISH = 'unpublish'; /** * @param SchemaModelInterface $model * @param string $typeName * @param array $config * @return ModelOperation|null * @throws SchemaBuilderException */ public function createOperation( SchemaModelInterface $model, string $typeName, array $config = [] ): ?ModelOperation { if (!Extensible::has_extension($model->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; } |