. * */ namespace Vvveb\Plugins\Seo; use function Vvveb\getMultiPostContentMeta; use function Vvveb\getMultiProductContentMeta; use Vvveb\System\Event; if (! defined('V_VERSION')) { die('Invalid request!'); } #[\AllowDynamicProperties] class GraphQLSchema { function types($types) { $types['og'] = [ 'name' => 'og', 'properties' => [ 'title' => [ 'name' => 'title', 'description' => '', 'type' => 'String', ], 'description' => [ 'name' => 'description', 'description' => '', 'type' => 'String', ], ], ]; $types['twitter'] = [ 'name' => 'twitter', 'properties' => [ 'title' => [ 'name' => 'title', 'description' => '', 'type' => 'String', ], 'content' => [ 'name' => 'content', 'description' => '', 'type' => 'String', ], 'label1' => [ 'name' => 'label1', 'description' => '', 'type' => 'String', ], 'data1' => [ 'name' => 'data1', 'description' => '', 'type' => 'String', ], 'label2' => [ 'name' => 'label2', 'description' => '', 'type' => 'String', ], 'data2' => [ 'name' => 'data2', 'description' => '', 'type' => 'String', ], ], ]; $types['seo'] = [ 'name' => 'post_seo', 'properties' => [ 'og' => [ 'name' => 'og', 'description' => '', 'type' => 'OgType', ], 'twitter' => [ 'name' => 'twitter', 'description' => '', 'type' => 'TwitterType', ], ], ]; $types['seo']['properties']['seo'] = [ 'name' => 'seo', 'type' => '[SeoType]', ]; $types['post']['properties']['seo'] = [ 'name' => 'seo', 'type' => '[SeoType]', ]; $types['product']['properties']['seo'] = [ 'name' => 'seo', 'type' => '[SeoType]', ]; return [$types]; } function models($models) { return [$models]; } function queries($queries) { //$queries['seo'] = ; return [$queries]; } function mutations($mutations) { $mutations['seo'] = $this->seo; return [$mutations]; } function __construct() { //register schema defintion for types and add seo types for post and product Event::on('Vvveb\Controller\Schema', 'types', __CLASS__, [$this, 'types']); Event::on('Vvveb\Controller\Schema', 'models', __CLASS__, [$this, 'models']); } } #[\AllowDynamicProperties] class GraphQL { function seo($parentTypeName, $modelName, $args, $returnIsList, $isConnection) { if ($parentTypeName == 'PostType') { $seo = []; if (isset($args['post_id'])) { $seo = getMultiPostContentMeta($args['post_id'], 'seo') ?? []; } } else { if ($parentTypeName == 'ProductType') { $seo = []; if (isset($args['product_id'])) { $seo = getMultiProductContentMeta($args['product_id'], 'seo') ?? []; } } } $data = []; if ($seo) { foreach ($seo as $meta) { $data[$meta['key']] = $meta['value']; } } if ($returnIsList) { return [$data]; } return $data; } function types($types) { $types['Seo'] = [$this, 'seo']; return [$types]; } function queries($queries) { //$queries['seo'] = ; return [$queries]; } function mutations($mutations) { ///$mutations['seo'] = $this->seo; return [$mutations]; } function __construct() { //register plugin queries and mutations Event::on('Vvveb\Controller\Index', 'queries', __CLASS__, [$this, 'queries']); Event::on('Vvveb\Controller\Index', 'mutations', __CLASS__, [$this, 'mutations']); Event::on('Vvveb\Controller\Index', 'types', __CLASS__, [$this, 'types']); Event::on('Vvveb\Controller\Index', 'mutations', __CLASS__, [$this, 'mutations']); } } $graphQLSchema = new GraphQLSchema();