Преглед изворни кода

added entity field def access to graphql

bach пре 1 година
родитељ
комит
f6611f839b

+ 13 - 1
src/web/modules/custom/ouatt_graphql/graphql/ouatt_extension.base.graphqls

@@ -12,7 +12,8 @@ type Concernement implements NodeInterface {
   title: String!
   path: String!
   author: String
-  texte: String
+  description: String
+  caillou: String
   recit: Filefield
   entites: [Entiteintegre]
 }
@@ -134,3 +135,14 @@ type Date {
   start: String
   end: String
 }
+
+type EntityDefinition {
+  fields: [FieldDef]
+}
+
+type FieldDef {
+  field_name: String
+  type: String
+  label: String
+  description: String
+}

+ 4 - 0
src/web/modules/custom/ouatt_graphql/graphql/ouatt_extension.extension.graphqls

@@ -54,3 +54,7 @@ extend type Query {
 extend type Query {
   group(id: Int!): Group
 }
+
+extend type Query {
+  entitydef(type: String, bundle: String): EntityDefinition
+}

+ 89 - 2
src/web/modules/custom/ouatt_graphql/src/Plugin/GraphQL/SchemaExtension/OuattSchemaExtension.php

@@ -8,6 +8,7 @@ use Drupal\graphql\GraphQL\Response\ResponseInterface;
 use Drupal\graphql\Plugin\GraphQL\SchemaExtension\SdlSchemaExtensionPluginBase;
 use Drupal\materio_graphql\GraphQL\Response\MaterioResponse;
 use Drupal\Core\Url;
+use Drupal\Node\Entity\NodeType;
 
 use GraphQL\Error\Error;
 
@@ -55,6 +56,9 @@ class OuattSchemaExtension extends SdlSchemaExtensionPluginBase {
     //
     $this->addLink($registry, $builder);
 
+    $this->addEntityDefinition($registry, $builder);
+    $this->addFieldDef($registry, $builder);
+
   }
 
   //  ___          _
@@ -162,11 +166,18 @@ class OuattSchemaExtension extends SdlSchemaExtensionPluginBase {
           ->map('entity', $builder->fromParent())
       ));
 
-    $registry->addFieldResolver('Concernement', 'texte',
+    $registry->addFieldResolver('Concernement', 'description',
       $builder->produce('property_path')
         ->map('type', $builder->fromValue('entity:node'))
         ->map('value', $builder->fromParent())
-        ->map('path', $builder->fromValue('body.value'))
+        ->map('path', $builder->fromValue('field_description.value'))
+      );
+
+    $registry->addFieldResolver('Concernement', 'caillou',
+      $builder->produce('property_path')
+        ->map('type', $builder->fromValue('entity:node'))
+        ->map('value', $builder->fromParent())
+        ->map('path', $builder->fromValue('field_caillou.value'))
       );
 
     $registry->addFieldResolver('Concernement', 'author',
@@ -882,4 +893,80 @@ class OuattSchemaExtension extends SdlSchemaExtensionPluginBase {
       })
     );
   }
+
+  protected function addEntityDefinition(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
+    $registry->addFieldResolver('Query', 'entitydef',
+      $builder->compose(
+        $builder->callback(function($parent, $arg){
+          // $entity_object = NodeType::load($builder->fromArgument('bundle'));
+          $field_defintions = \Drupal::service('entity_field.manager')->getFieldDefinitions($arg['type'], $arg['bundle']);
+          return $field_defintions;
+        })
+      )
+    );
+
+    $registry->addFieldResolver('EntityDefinition', 'fields',
+      $builder->callback(function ($parent, $args) {
+        return $parent;
+      })
+    );
+
+  }
+
+  protected function addFieldDef(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
+    
+    $registry->addFieldResolver('FieldDef', 'type',
+      $builder->callback(function ($parent, $args) {
+        return $parent->getType();
+      })
+    );
+
+    $registry->addFieldResolver('FieldDef', 'field_name',
+      $builder->callback(function ($parent, $args) {
+        return $parent->getName();
+      })
+    );
+
+    $registry->addFieldResolver('FieldDef', 'label',
+      $builder->callback(function ($parent, $args) {
+        $label = $parent->getLabel();
+        $vartype = gettype($label);
+        switch ($vartype) {
+          case 'string':
+            return $label;
+            break;
+          case 'object':
+            switch (get_class($label)) {
+              case 'TranslatableMarkup':
+                return $label->render();
+                break;
+            }
+            break;
+        }
+        return ""; 
+      })
+    );
+
+    $registry->addFieldResolver('FieldDef', 'description',
+      $builder->callback(function ($parent, $args) {
+        $description = $parent->getDescription();
+        $vartype = gettype($description);
+        switch ($vartype) {
+          case 'string':
+            return $description;
+            break;
+          case 'object':
+            switch (get_class($description)) {
+              case 'TranslatableMarkup':
+                return $description->render();
+                break;
+            }
+            break;
+        }
+        return ""; 
+      })
+    );
+  }
+
 }
+