MaterioSchemaExtension.php 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480
  1. <?php
  2. namespace Drupal\materio_graphql\Plugin\GraphQL\SchemaExtension;
  3. use Drupal\graphql\GraphQL\ResolverBuilder;
  4. use Drupal\graphql\GraphQL\ResolverRegistryInterface;
  5. use Drupal\graphql\GraphQL\Response\ResponseInterface;
  6. use Drupal\graphql\Plugin\GraphQL\SchemaExtension\SdlSchemaExtensionPluginBase;
  7. use Drupal\materio_graphql\GraphQL\Response\MaterioResponse;
  8. use Drupal\Core\Url;
  9. use GraphQL\Error\Error;
  10. /**
  11. * @SchemaExtension(
  12. * id = "materio_extension",
  13. * name = "Materio extension",
  14. * description = "Materio extension.",
  15. * schema = "materio"
  16. * )
  17. */
  18. class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
  19. /**
  20. * {@inheritdoc}
  21. */
  22. public function registerResolvers(ResolverRegistryInterface $registry) {
  23. $builder = new ResolverBuilder();
  24. $this->addRouteResolver($registry, $builder);
  25. $this->addMateriau($registry, $builder);
  26. $this->addNote($registry, $builder);
  27. $this->addSearchResult($registry, $builder);
  28. $this->addSample($registry, $builder);
  29. $this->addArticle($registry, $builder);
  30. $this->addThematique($registry, $builder);
  31. $this->addCompany($registry, $builder);
  32. $this->addProduct($registry, $builder);
  33. $this->addVariation($registry, $builder);
  34. $this->addPrice($registry, $builder);
  35. $this->addAddress($registry, $builder);
  36. $this->addFilefield($registry, $builder);
  37. $this->addFile($registry, $builder);
  38. $this->addDate($registry, $builder);
  39. $this->addLink($registry, $builder);
  40. $this->addShowroom($registry, $builder);
  41. $this->addTag($registry, $builder);
  42. $this->addThesaurus($registry, $builder);
  43. $this->addVideolink($registry, $builder);
  44. $this->addImage($registry, $builder);
  45. // Response type resolver.
  46. $registry->addTypeResolver('Response', [
  47. __CLASS__,
  48. 'resolveResponse',
  49. ]);
  50. }
  51. // ___ _
  52. // | _ \___ _ _| |_ ___
  53. // | / _ \ || | _/ -_)
  54. // |_|_\___/\_,_|\__\___|
  55. protected function addRouteResolver(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  56. // Tell GraphQL how to resolve types of a common interface.
  57. $registry->addTypeResolver('NodeInterface', function ($value) {
  58. $path = explode('\\', get_class($value));
  59. $class = array_pop($path);
  60. if ($class === 'Node') {
  61. switch ($value->bundle()) {
  62. case 'article': return 'Article';
  63. case 'materiau': return 'Materiau';
  64. case 'thematique': return 'Thematique';
  65. }
  66. }
  67. throw new Error('Could not resolve content type.');
  68. });
  69. $registry->addFieldResolver('Query', 'route',
  70. $builder->compose(
  71. $builder->callBack(function($parent, $args){
  72. $t="t";
  73. return $parent;
  74. }),
  75. $builder->produce('route_load')
  76. ->map('path', $builder->fromArgument('path')),
  77. $builder->callBack(function($parent, $args){
  78. $t="t";
  79. return $parent;
  80. }),
  81. $builder->produce('route_entity')
  82. ->map('url', $builder->fromParent())
  83. ->map('language', $builder->fromArgument('lang')),
  84. $builder->callBack(function($parent, $args){
  85. $t="t";
  86. return $parent;
  87. })
  88. ));
  89. }
  90. // __ __ _ _
  91. // | \/ |__ _| |_ ___ _ _(_)__ _ _ _
  92. // | |\/| / _` | _/ -_) '_| / _` | || |
  93. // |_| |_\__,_|\__\___|_| |_\__,_|\_,_|
  94. protected function addMateriau(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  95. // $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
  96. $registry->addFieldResolver('Query', 'materiau',
  97. $builder->produce('entity_load')
  98. ->map('type', $builder->fromValue('node'))
  99. ->map('bundles', $builder->fromValue(['materiau']))
  100. ->map('id', $builder->fromArgument('id'))
  101. ->map('language', $builder->fromArgument('lang'))
  102. );
  103. $registry->addFieldResolver('Query', 'materiaux',
  104. $builder->produce('entity_load_multiple')
  105. ->map('type', $builder->fromValue('node'))
  106. // ->map('bundles', $builder->fromValue(['materiau']))
  107. ->map('ids', $builder->fromArgument('ids'))
  108. ->map('language', $builder->fromArgument('lang'))
  109. );
  110. $registry->addFieldResolver('Materiau', 'id',
  111. $builder->produce('entity_id')
  112. ->map('entity', $builder->fromParent())
  113. );
  114. $registry->addFieldResolver('Materiau', 'uuid',
  115. $builder->produce('entity_uuid')
  116. ->map('entity', $builder->fromParent())
  117. );
  118. $registry->addFieldResolver('Materiau', 'bundle',
  119. $builder->compose(
  120. $builder->produce('entity_bundle')
  121. ->map('entity', $builder->fromParent())
  122. ));
  123. $registry->addFieldResolver('Materiau', 'path',
  124. $builder->compose(
  125. $builder->produce('entity_url')
  126. ->map('entity', $builder->fromParent()),
  127. $builder->produce('url_path')
  128. ->map('url', $builder->fromParent())
  129. )
  130. );
  131. $registry->addFieldResolver('Materiau', 'title',
  132. $builder->compose(
  133. $builder->produce('entity_label')
  134. ->map('entity', $builder->fromParent())
  135. ));
  136. $registry->addFieldResolver('Materiau', 'body',
  137. $builder->produce('property_path')
  138. ->map('type', $builder->fromValue('entity:node'))
  139. ->map('value', $builder->fromParent())
  140. ->map('path', $builder->fromValue('body.value'))
  141. );
  142. $registry->addFieldResolver('Materiau', 'short_description',
  143. $builder->produce('property_path')
  144. ->map('type', $builder->fromValue('entity:node'))
  145. ->map('value', $builder->fromParent())
  146. ->map('path', $builder->fromValue('field_short_description.value'))
  147. );
  148. $registry->addFieldResolver('Materiau', 'author',
  149. $builder->compose(
  150. $builder->produce('entity_owner')
  151. ->map('entity', $builder->fromParent()),
  152. $builder->produce('entity_label')
  153. ->map('entity', $builder->fromParent())
  154. ));
  155. // https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md
  156. // https://blog.chrismitchellonline.com/posts/custom_graphql_data/
  157. $registry->addFieldResolver('Materiau', 'linked_materials',
  158. // $builder->compose(
  159. // $builder->produce('entity_reference')
  160. // ->map('entity', $builder->fromParent())
  161. // ->map('field', $builder->fromValue('field_linked_materials')))
  162. $builder->compose(
  163. $builder->callback(function($parent, $args){
  164. $linkedmaterials = $parent->get('field_linked_materials')->getValue();
  165. $nids = [];
  166. foreach ($linkedmaterials as $key => $value) {
  167. $nids[] = $value['target_id'];
  168. }
  169. $lang = $parent->language()->getId();
  170. $test="test";
  171. return [
  172. "ids" => $nids,
  173. "language" => $lang
  174. ];
  175. }),
  176. $builder->produce('entity_load_multiple')
  177. ->map('type', $builder->fromValue('node'))
  178. ->map('bundles', $builder->fromValue(['materiau']))
  179. ->map('ids', $builder->callback(function($parent, $args){
  180. return $parent['ids'];
  181. }))
  182. ->map('language', $builder->callback(function($parent, $args){
  183. return $parent['language'];
  184. }))
  185. )
  186. );
  187. $registry->addFieldResolver('Materiau', 'linked_articles',
  188. // $builder->compose(
  189. // $builder->produce('entity_reference')
  190. // ->map('entity', $builder->fromParent())
  191. // ->map('field', $builder->fromValue('field_linked_articles')))
  192. $builder->compose(
  193. $builder->callback(function($parent, $args){
  194. $linkedmaterials = $parent->get('field_linked_articles')->getValue();
  195. $nids = [];
  196. foreach ($linkedmaterials as $key => $value) {
  197. $nids[] = $value['target_id'];
  198. }
  199. $lang = $parent->language()->getId();
  200. $test="test";
  201. return [
  202. "ids" => $nids,
  203. "language" => $lang
  204. ];
  205. }),
  206. $builder->produce('entity_load_multiple')
  207. ->map('type', $builder->fromValue('node'))
  208. ->map('bundles', $builder->fromValue(['materiau']))
  209. ->map('ids', $builder->callback(function($parent, $args){
  210. return $parent['ids'];
  211. }))
  212. ->map('language', $builder->callback(function($parent, $args){
  213. return $parent['language'];
  214. }))
  215. )
  216. );
  217. $registry->addFieldResolver('Materiau', 'memo',
  218. $builder->produce('property_path')
  219. ->map('type', $builder->fromValue('entity:node'))
  220. ->map('value', $builder->fromParent())
  221. ->map('path', $builder->fromValue('field_memo.value'))
  222. );
  223. $registry->addFieldResolver('Materiau', 'images',
  224. $builder->produce('entity_reference')
  225. ->map('entity', $builder->fromParent())
  226. ->map('field', $builder->fromValue('field_materiau_images'))
  227. );
  228. $registry->addFieldResolver('Materiau', 'attachments',
  229. $builder->produce('property_path')
  230. ->map('type', $builder->fromValue('entity:node'))
  231. ->map('value', $builder->fromParent())
  232. ->map('path', $builder->fromValue('field_attachments'))
  233. );
  234. $registry->addFieldResolver('Materiau', 'videos',
  235. $builder->produce('property_path')
  236. ->map('type', $builder->fromValue('entity:node'))
  237. ->map('value', $builder->fromParent())
  238. ->map('path', $builder->fromValue('field_video'))
  239. );
  240. $registry->addFieldResolver('Materiau', 'tags',
  241. $builder->produce('entity_reference')
  242. ->map('entity', $builder->fromParent())
  243. ->map('field', $builder->fromValue('field_tags'))
  244. );
  245. $registry->addFieldResolver('Materiau', 'thesaurus',
  246. $builder->produce('entity_reference')
  247. ->map('entity', $builder->fromParent())
  248. ->map('field', $builder->fromValue('field_thesaurus'))
  249. );
  250. $registry->addFieldResolver('Materiau', 'manufacturer',
  251. $builder->produce('entity_reference')
  252. ->map('entity', $builder->fromParent())
  253. ->map('field', $builder->fromValue('field_manufacturer'))
  254. );
  255. $registry->addFieldResolver('Materiau', 'distributor',
  256. $builder->produce('entity_reference')
  257. ->map('entity', $builder->fromParent())
  258. ->map('field', $builder->fromValue('field_distributor'))
  259. );
  260. // $registry->addFieldResolver('Materiau', 'famille',
  261. // $builder->produce('property_path')
  262. // ->map('type', $builder->fromValue('entity:node'))
  263. // ->map('value', $builder->fromParent())
  264. // ->map('path', $builder->fromValue('field_famille.value'))
  265. // );
  266. //
  267. // $registry->addFieldResolver('Materiau', 'index',
  268. // $builder->produce('property_path')
  269. // ->map('type', $builder->fromValue('entity:node'))
  270. // ->map('value', $builder->fromParent())
  271. // ->map('path', $builder->fromValue('field_index.value'))
  272. // );
  273. $registry->addFieldResolver('Materiau', 'reference',
  274. $builder->produce('property_path')
  275. ->map('type', $builder->fromValue('entity:node'))
  276. ->map('value', $builder->fromParent())
  277. ->map('path', $builder->fromValue('field_reference.value'))
  278. );
  279. $registry->addFieldResolver('Materiau', 'samples',
  280. $builder->produce('property_path')
  281. ->map('type', $builder->fromValue('entity:node'))
  282. ->map('value', $builder->fromParent())
  283. ->map('path', $builder->fromValue('field_samples'))
  284. );
  285. $registry->addFieldResolver('Materiau', 'note',
  286. $builder->compose(
  287. $builder->callback(function($parent, $args){
  288. // get the current user id
  289. $user = \Drupal::currentUser()->id();
  290. // get the current material id
  291. $target = $parent->id();
  292. // query the note for these user AND material (if any)
  293. // if null, UI will create it with rest api
  294. $entity_storage = \Drupal::entityTypeManager()->getStorage('node');
  295. $query = $entity_storage->getQuery()
  296. ->condition('type', 'note')
  297. ->condition('uid', $user)
  298. ->condition('field_target', $target)
  299. ->accessCheck(TRUE);
  300. $results = $query->execute();
  301. // $test="test";
  302. return array_shift($results);
  303. }),
  304. $builder->produce('entity_load')
  305. ->map('type', $builder->fromValue('node'))
  306. ->map('bundle', $builder->fromValue('note'))
  307. ->map('id', $builder->fromParent())
  308. )
  309. );
  310. $registry->addFieldResolver('Materiau', 'note_id',
  311. $builder->compose(
  312. $builder->callback(function($parent, $args){
  313. // get the current user id
  314. $user = \Drupal::currentUser()->id();
  315. // get the current material id
  316. $target = $parent->id();
  317. // query the note for these user AND material (if any)
  318. // if null, UI will create it with rest api
  319. $entity_storage = \Drupal::entityTypeManager()->getStorage('node');
  320. $query = $entity_storage->getQuery()
  321. ->condition('type', 'note')
  322. ->condition('uid', $user)
  323. ->condition('field_target', $target)
  324. ->accessCheck(TRUE);
  325. $results = $query->execute();
  326. // $test="test";
  327. return array_shift($results);
  328. }),
  329. $builder->produce('entity_load')
  330. ->map('type', $builder->fromValue('node'))
  331. ->map('bundle', $builder->fromValue('note'))
  332. ->map('id', $builder->fromParent()),
  333. $builder->produce('entity_id')
  334. ->map('entity', $builder->fromParent())
  335. )
  336. );
  337. }
  338. // _ _ _
  339. // | \| |___| |_ ___
  340. // | .` / _ \ _/ -_)
  341. // |_|\_\___/\__\___|
  342. protected function addNote(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  343. $registry->addFieldResolver('Note', 'id',
  344. $builder->produce('entity_id')
  345. ->map('entity', $builder->fromParent())
  346. );
  347. $registry->addFieldResolver('Note', 'contenu',
  348. $builder->produce('property_path')
  349. ->map('type', $builder->fromValue('entity:node'))
  350. ->map('value', $builder->fromParent())
  351. ->map('path', $builder->fromValue('field_contenu.value'))
  352. );
  353. $registry->addFieldResolver('Note', 'bundle',
  354. $builder->compose(
  355. $builder->produce('entity_bundle')
  356. ->map('entity', $builder->fromParent())
  357. ));
  358. $registry->addFieldResolver('Note', 'target',
  359. $builder->produce('property_path')
  360. ->map('type', $builder->fromValue('entity:node'))
  361. ->map('value', $builder->fromParent())
  362. ->map('path', $builder->fromValue('field_target.target_id'))
  363. );
  364. }
  365. // ___ _ ___ _ _
  366. // / __| ___ __ _ _ _ __| |_ | _ \___ ____ _| | |_
  367. // \__ \/ -_) _` | '_/ _| ' \| / -_|_-< || | | _|
  368. // |___/\___\__,_|_| \__|_||_|_|_\___/__/\_,_|_|\__|
  369. protected function addSearchResult(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  370. // Tell GraphQL how to resolve types of a common interface.
  371. $registry->addTypeResolver('SearchResultInterface', function ($value) {
  372. switch ($value->bundle()) {
  373. case 'materiau': return 'Materiau';
  374. case 'thematique': return 'Thematique';
  375. }
  376. throw new Error('Could not resolve content type.');
  377. });
  378. $registry->addFieldResolver('Query', 'searchresults',
  379. $builder->produce('entity_load_multiple')
  380. ->map('type', $builder->fromValue('node'))
  381. ->map('ids', $builder->fromArgument('ids'))
  382. ->map('language', $builder->fromArgument('lang'))
  383. );
  384. $registry->addFieldResolver('Query', 'searchresult',
  385. $builder->produce('entity_load')
  386. ->map('type', $builder->fromValue('node'))
  387. ->map('id', $builder->fromArgument('id'))
  388. ->map('language', $builder->fromArgument('lang'))
  389. );
  390. }
  391. // ___ _
  392. // / __| __ _ _ __ _ __| |___
  393. // \__ \/ _` | ' \| '_ \ / -_)
  394. // |___/\__,_|_|_|_| .__/_\___|
  395. // |_|
  396. protected function addSample(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  397. $registry->addFieldResolver('Sample', 'showroom',
  398. $builder->callback(function($parent, $args){
  399. return \Drupal\taxonomy\Entity\Term::load($parent['target_id']);
  400. })
  401. );
  402. $registry->addFieldResolver('Sample', 'location',
  403. $builder->callback(function($parent, $args){
  404. return $parent['location'];
  405. })
  406. );
  407. }
  408. // _ _ _ _
  409. // /_\ _ _| |_(_)__| |___
  410. // / _ \| '_| _| / _| / -_)
  411. // /_/ \_\_| \__|_\__|_\___|
  412. protected function addArticle(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  413. $registry->addFieldResolver('Query', 'article',
  414. $builder->produce('entity_load')
  415. ->map('type', $builder->fromValue('node'))
  416. ->map('bundles', $builder->fromValue(['article']))
  417. ->map('id', $builder->fromArgument('id'))
  418. ->map('language', $builder->fromArgument('lang'))
  419. );
  420. $registry->addFieldResolver('Article', 'id',
  421. $builder->produce('entity_id')
  422. ->map('entity', $builder->fromParent())
  423. );
  424. $registry->addFieldResolver('Article', 'uuid',
  425. $builder->produce('entity_uuid')
  426. ->map('entity', $builder->fromParent())
  427. );
  428. $registry->addFieldResolver('Article', 'path',
  429. $builder->compose(
  430. $builder->produce('entity_url')
  431. ->map('entity', $builder->fromParent()),
  432. $builder->produce('url_path')
  433. ->map('url', $builder->fromParent())
  434. )
  435. );
  436. $registry->addFieldResolver('Article', 'bundle',
  437. $builder->compose(
  438. $builder->produce('entity_bundle')
  439. ->map('entity', $builder->fromParent())
  440. ));
  441. $registry->addFieldResolver('Article', 'title',
  442. $builder->compose(
  443. $builder->produce('entity_label')
  444. ->map('entity', $builder->fromParent())
  445. ));
  446. $registry->addFieldResolver('Article', 'author',
  447. $builder->compose(
  448. $builder->produce('entity_owner')
  449. ->map('entity', $builder->fromParent()),
  450. $builder->produce('entity_label')
  451. ->map('entity', $builder->fromParent())
  452. ));
  453. $registry->addFieldResolver('Article', 'body',
  454. $builder->produce('property_path')
  455. ->map('type', $builder->fromValue('entity:node'))
  456. ->map('value', $builder->fromParent())
  457. ->map('path', $builder->fromValue('body.value'))
  458. );
  459. $registry->addFieldResolver('Article', 'memo',
  460. $builder->produce('property_path')
  461. ->map('type', $builder->fromValue('entity:node'))
  462. ->map('value', $builder->fromParent())
  463. ->map('path', $builder->fromValue('field_memo.value'))
  464. );
  465. // https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md
  466. // https://blog.chrismitchellonline.com/posts/custom_graphql_data/
  467. $registry->addFieldResolver('Article', 'linked_materials',
  468. // $builder->produce('entity_reference')
  469. // ->map('entity', $builder->fromParent())
  470. // ->map('field', $builder->fromValue('field_linked_materials'))
  471. // // ->map('language', $builder->fromValue('fr')) // this is not working
  472. // // ->map('language', $builder->produce('entity_language')
  473. // // ->map('entity', $builder->fromParent())) // neither that
  474. // THIS USED TO WORK but not anymore :(
  475. // invalid language translation (fr) provided
  476. $builder->compose(
  477. $builder->callback(function($parent, $args){
  478. $linkedmaterials = $parent->get('field_linked_materials')->getValue();
  479. $nids = [];
  480. foreach ($linkedmaterials as $key => $value) {
  481. $nids[] = $value['target_id'];
  482. }
  483. $lang = $parent->language()->getId();
  484. $test="test";
  485. return [
  486. "ids" => $nids,
  487. "language" => $lang
  488. ];
  489. }),
  490. $builder->produce('entity_load_multiple')
  491. ->map('type', $builder->fromValue('node'))
  492. ->map('bundles', $builder->fromValue(['materiau']))
  493. ->map('ids', $builder->callback(function($parent, $args){
  494. return $parent['ids'];
  495. }))
  496. ->map('language', $builder->callback(function($parent, $args){
  497. return $parent['language'];
  498. }))
  499. )
  500. );
  501. $registry->addFieldResolver('Article', 'images',
  502. $builder->produce('entity_reference')
  503. ->map('entity', $builder->fromParent())
  504. ->map('field', $builder->fromValue('field_visuel'))
  505. );
  506. $registry->addFieldResolver('Article', 'videos',
  507. $builder->produce('property_path')
  508. ->map('type', $builder->fromValue('entity:node'))
  509. ->map('value', $builder->fromParent())
  510. ->map('path', $builder->fromValue('field_video'))
  511. );
  512. $registry->addFieldResolver('Article', 'tags',
  513. $builder->produce('entity_reference')
  514. ->map('entity', $builder->fromParent())
  515. ->map('field', $builder->fromValue('field_tags'))
  516. );
  517. $registry->addFieldResolver('Article', 'thesaurus',
  518. $builder->produce('entity_reference')
  519. ->map('entity', $builder->fromParent())
  520. ->map('field', $builder->fromValue('field_thesaurus'))
  521. );
  522. $registry->addFieldResolver('Article', 'showroom',
  523. $builder->compose(
  524. $builder->produce('entity_reference')
  525. ->map('entity', $builder->fromParent())
  526. ->map('field', $builder->fromValue('field_showroom')),
  527. $builder->callback(function ($items) {
  528. return $items[0];
  529. })
  530. ));
  531. $registry->addFieldResolver('Article', 'source',
  532. $builder->produce('property_path')
  533. ->map('type', $builder->fromValue('entity:node'))
  534. ->map('value', $builder->fromParent())
  535. ->map('path', $builder->fromValue('field_source'))
  536. );
  537. $registry->addFieldResolver('Article', 'date',
  538. $builder->produce('property_path')
  539. ->map('type', $builder->fromValue('entity:node'))
  540. ->map('value', $builder->fromParent())
  541. ->map('path', $builder->fromValue('field_date'))
  542. );
  543. }
  544. // _____ _ _ _
  545. // |_ _| |_ ___ _ __ __ _| |_(_)__ _ _ _ ___
  546. // | | | ' \/ -_) ' \/ _` | _| / _` | || / -_)
  547. // |_| |_||_\___|_|_|_\__,_|\__|_\__, |\_,_\___|
  548. // |_|
  549. protected function addThematique(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  550. $registry->addFieldResolver('Query', 'thematique',
  551. $builder->produce('entity_load')
  552. ->map('type', $builder->fromValue('node'))
  553. // ->map('bundles', $builder->fromValue(['thematique']))
  554. ->map('id', $builder->fromArgument('id'))
  555. ->map('language', $builder->fromArgument('lang'))
  556. );
  557. $registry->addFieldResolver('Thematique', 'id',
  558. $builder->produce('entity_id')
  559. ->map('entity', $builder->fromParent())
  560. );
  561. $registry->addFieldResolver('Thematique', 'uuid',
  562. $builder->produce('entity_uuid')
  563. ->map('entity', $builder->fromParent())
  564. );
  565. $registry->addFieldResolver('Thematique', 'path',
  566. $builder->compose(
  567. $builder->produce('entity_url')
  568. ->map('entity', $builder->fromParent()),
  569. $builder->produce('url_path')
  570. ->map('url', $builder->fromParent())
  571. )
  572. );
  573. $registry->addFieldResolver('Thematique', 'bundle',
  574. $builder->compose(
  575. $builder->produce('entity_bundle')
  576. ->map('entity', $builder->fromParent())
  577. ));
  578. $registry->addFieldResolver('Thematique', 'title',
  579. $builder->compose(
  580. $builder->produce('entity_label')
  581. ->map('entity', $builder->fromParent())
  582. ));
  583. $registry->addFieldResolver('Thematique', 'author',
  584. $builder->compose(
  585. $builder->produce('entity_owner')
  586. ->map('entity', $builder->fromParent()),
  587. $builder->produce('entity_label')
  588. ->map('entity', $builder->fromParent())
  589. ));
  590. $registry->addFieldResolver('Thematique', 'short_description',
  591. $builder->produce('property_path')
  592. ->map('type', $builder->fromValue('entity:node'))
  593. ->map('value', $builder->fromParent())
  594. ->map('path', $builder->fromValue('field_short_description.value'))
  595. );
  596. $registry->addFieldResolver('Thematique', 'body',
  597. $builder->produce('property_path')
  598. ->map('type', $builder->fromValue('entity:node'))
  599. ->map('value', $builder->fromParent())
  600. ->map('path', $builder->fromValue('body.value'))
  601. );
  602. $registry->addFieldResolver('Thematique', 'memo',
  603. $builder->produce('property_path')
  604. ->map('type', $builder->fromValue('entity:node'))
  605. ->map('value', $builder->fromParent())
  606. ->map('path', $builder->fromValue('field_memo.value'))
  607. );
  608. // https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md
  609. // https://blog.chrismitchellonline.com/posts/custom_graphql_data/
  610. $registry->addFieldResolver('Thematique', 'linked_materials',
  611. // $builder->produce('entity_reference')
  612. // ->map('entity', $builder->fromParent())
  613. // ->map('field', $builder->fromValue('field_linked_materials'))
  614. $builder->compose(
  615. $builder->callback(function($parent, $args){
  616. $linkedmaterials = $parent->get('field_linked_materials')->getValue();
  617. $nids = [];
  618. foreach ($linkedmaterials as $key => $value) {
  619. $nids[] = $value['target_id'];
  620. }
  621. $lang = $parent->language()->getId();
  622. $test="test";
  623. return [
  624. "ids" => $nids,
  625. "language" => $lang
  626. ];
  627. }),
  628. $builder->produce('entity_load_multiple')
  629. ->map('type', $builder->fromValue('node'))
  630. ->map('bundles', $builder->fromValue(['materiau']))
  631. ->map('ids', $builder->callback(function($parent, $args){
  632. return $parent['ids'];
  633. }))
  634. ->map('language', $builder->callback(function($parent, $args){
  635. return $parent['language'];
  636. }))
  637. )
  638. );
  639. $registry->addFieldResolver('Thematique', 'images',
  640. $builder->produce('entity_reference')
  641. ->map('entity', $builder->fromParent())
  642. ->map('field', $builder->fromValue('field_visuel'))
  643. );
  644. $registry->addFieldResolver('Thematique', 'tags',
  645. $builder->produce('entity_reference')
  646. ->map('entity', $builder->fromParent())
  647. ->map('field', $builder->fromValue('field_tags'))
  648. );
  649. }
  650. // ___
  651. // |_ _|_ __ __ _ __ _ ___
  652. // | || ' \/ _` / _` / -_)
  653. // |___|_|_|_\__,_\__, \___|
  654. // |___/
  655. protected function addImage(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  656. $registry->addFieldResolver('Image', 'id',
  657. $builder->produce('entity_id')
  658. ->map('entity', $builder->fromParent())
  659. );
  660. $registry->addFieldResolver('Image', 'url',
  661. $builder->produce('image_url')
  662. ->map('entity', $builder->fromParent())
  663. );
  664. $registry->addFieldResolver('Image', 'alt',
  665. $builder->produce('property_path')
  666. ->map('type', $builder->fromValue('entity:node'))
  667. ->map('value', $builder->fromParent())
  668. ->map('path', $builder->fromValue('field_image.alt'))
  669. );
  670. $registry->addFieldResolver('Image', 'style_minicard',
  671. $builder->produce('image_derivative')
  672. ->map('entity', $builder->fromParent())
  673. ->map('style', $builder->fromValue('card_medium_half'))
  674. );
  675. $registry->addFieldResolver('Image', 'style_minicard_url',
  676. $builder->compose(
  677. $builder->produce('image_derivative')
  678. ->map('entity', $builder->fromParent())
  679. ->map('style', $builder->fromValue('card_medium_half')),
  680. $builder->callback(function($parent, $args){
  681. return $parent['url'];
  682. })
  683. ));
  684. $registry->addFieldResolver('Image', 'style_linkedmaterialcard',
  685. $builder->produce('image_derivative')
  686. ->map('entity', $builder->fromParent())
  687. ->map('style', $builder->fromValue('linkedmaterial_card'))
  688. );
  689. $registry->addFieldResolver('Image', 'style_linkedmaterialcard_url',
  690. $builder->compose(
  691. $builder->produce('image_derivative')
  692. ->map('entity', $builder->fromParent())
  693. ->map('style', $builder->fromValue('linkedmaterial_card')),
  694. $builder->callback(function($parent, $args){
  695. return $parent['url'];
  696. })
  697. ));
  698. $registry->addFieldResolver('Image', 'style_cardmedium',
  699. $builder->produce('image_derivative')
  700. ->map('entity', $builder->fromParent())
  701. ->map('style', $builder->fromValue('card_medium'))
  702. );
  703. $registry->addFieldResolver('Image', 'style_cardmedium_url',
  704. $builder->compose(
  705. $builder->produce('image_derivative')
  706. ->map('entity', $builder->fromParent())
  707. ->map('style', $builder->fromValue('card_medium')),
  708. $builder->callback(function($parent, $args){
  709. return $parent['url'];
  710. })
  711. ));
  712. $registry->addFieldResolver('Image', 'style_cardfull',
  713. $builder->produce('image_derivative')
  714. ->map('entity', $builder->fromParent())
  715. ->map('style', $builder->fromValue('card_full'))
  716. );
  717. $registry->addFieldResolver('Image', 'style_cardfull_url',
  718. $builder->compose(
  719. $builder->produce('image_derivative')
  720. ->map('entity', $builder->fromParent())
  721. ->map('style', $builder->fromValue('card_full')),
  722. $builder->callback(function($parent, $args){
  723. return $parent['url'];
  724. })
  725. ));
  726. $registry->addFieldResolver('Image', 'style_articlecardmedium',
  727. $builder->produce('image_derivative')
  728. ->map('entity', $builder->fromParent())
  729. ->map('style', $builder->fromValue('article_card_medium'))
  730. );
  731. $registry->addFieldResolver('Image', 'style_articlecardmedium_url',
  732. $builder->compose(
  733. $builder->produce('image_derivative')
  734. ->map('entity', $builder->fromParent())
  735. ->map('style', $builder->fromValue('article_card_medium')),
  736. $builder->callback(function($parent, $args){
  737. return $parent['url'];
  738. })
  739. ));
  740. $registry->addFieldResolver('Image', 'style_hd',
  741. $builder->produce('image_derivative')
  742. ->map('entity', $builder->fromParent())
  743. ->map('style', $builder->fromValue('hd'))
  744. );
  745. $registry->addFieldResolver('Image', 'style_hd_url',
  746. $builder->compose(
  747. $builder->produce('image_derivative')
  748. ->map('entity', $builder->fromParent())
  749. ->map('style', $builder->fromValue('hd')),
  750. $builder->callback(function($parent, $args){
  751. return $parent['url'];
  752. })
  753. ));
  754. }
  755. // __ ___ _ _ _ _
  756. // \ \ / (_)__| |___ ___| | (_)_ _ | |__
  757. // \ V /| / _` / -_) _ \ |__| | ' \| / /
  758. // \_/ |_\__,_\___\___/____|_|_||_|_\_\
  759. protected function addVideolink(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  760. $registry->addFieldResolver('VideoLink', 'url',
  761. $builder->produce('property_path')
  762. ->map('type', $builder->fromValue('field_item:video_embed_field'))
  763. ->map('value', $builder->fromParent())
  764. ->map('path', $builder->fromValue('value'))
  765. );
  766. }
  767. // _____ _
  768. // |_ _| |_ ___ ___ __ _ _ _ _ _ _ _ ___
  769. // | | | ' \/ -_|_-</ _` | || | '_| || (_-<
  770. // |_| |_||_\___/__/\__,_|\_,_|_| \_,_/__/
  771. protected function addThesaurus(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  772. $registry->addFieldResolver('Query', 'thesaurus',
  773. $builder->produce('entity_load')
  774. ->map('type', $builder->fromValue('taxonomy_term'))
  775. ->map('bundles', $builder->fromValue(['thesaurus']))
  776. ->map('id', $builder->fromArgument('id'))
  777. );
  778. $registry->addFieldResolver('Thesaurus', 'id',
  779. $builder->produce('entity_id')
  780. ->map('entity', $builder->fromParent())
  781. );
  782. $registry->addFieldResolver('Thesaurus', 'uuid',
  783. $builder->produce('entity_uuid')
  784. ->map('entity', $builder->fromParent())
  785. );
  786. $registry->addFieldResolver('Thesaurus', 'name',
  787. $builder->produce('entity_label')
  788. ->map('entity', $builder->fromParent())
  789. );
  790. }
  791. // _____
  792. // |_ _|_ _ __ _
  793. // | |/ _` / _` |
  794. // |_|\__,_\__, |
  795. // |___/
  796. protected function addTag(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  797. $registry->addFieldResolver('Query', 'tag',
  798. $builder->produce('entity_load')
  799. ->map('type', $builder->fromValue('taxonomy_term'))
  800. ->map('bundles', $builder->fromValue(['tags']))
  801. ->map('id', $builder->fromArgument('id'))
  802. );
  803. $registry->addFieldResolver('Tag', 'id',
  804. $builder->produce('entity_id')
  805. ->map('entity', $builder->fromParent())
  806. );
  807. $registry->addFieldResolver('Tag', 'uuid',
  808. $builder->produce('entity_uuid')
  809. ->map('entity', $builder->fromParent())
  810. );
  811. $registry->addFieldResolver('Tag', 'name',
  812. $builder->produce('entity_label')
  813. ->map('entity', $builder->fromParent())
  814. );
  815. }
  816. // ___ _
  817. // / __| |_ _____ __ ___ _ ___ ___ _ __
  818. // \__ \ ' \/ _ \ V V / '_/ _ \/ _ \ ' \
  819. // |___/_||_\___/\_/\_/|_| \___/\___/_|_|_|
  820. protected function addShowroom(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  821. $registry->addFieldResolver('Query', 'showroom',
  822. $builder->produce('entity_load')
  823. ->map('type', $builder->fromValue('taxonomy_term'))
  824. ->map('bundles', $builder->fromValue(['showroom']))
  825. ->map('id', $builder->fromArgument('id'))
  826. );
  827. $registry->addFieldResolver('Showroom', 'id',
  828. $builder->produce('entity_id')
  829. ->map('entity', $builder->fromParent())
  830. );
  831. $registry->addFieldResolver('Showroom', 'uuid',
  832. $builder->produce('entity_uuid')
  833. ->map('entity', $builder->fromParent())
  834. );
  835. $registry->addFieldResolver('Showroom', 'name',
  836. $builder->produce('entity_label')
  837. ->map('entity', $builder->fromParent())
  838. );
  839. $registry->addFieldResolver('Showroom', 'email',
  840. $builder->produce('property_path')
  841. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  842. ->map('value', $builder->fromParent())
  843. ->map('path', $builder->fromValue('field_public_email.value'))
  844. );
  845. $registry->addFieldResolver('Showroom', 'address',
  846. $builder->produce('property_path')
  847. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  848. ->map('value', $builder->fromParent())
  849. ->map('path', $builder->fromValue('field_public_address'))
  850. );
  851. $registry->addFieldResolver('Showroom', 'phone',
  852. $builder->produce('property_path')
  853. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  854. ->map('value', $builder->fromParent())
  855. ->map('path', $builder->fromValue('field_public_phone.value'))
  856. );
  857. }
  858. // _ _ _
  859. // | | (_)_ _ | |__
  860. // | |__| | ' \| / /
  861. // |____|_|_||_|_\_\
  862. protected function addLink(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  863. $registry->addFieldResolver('Link', 'url',
  864. $builder->callback(function ($parent, $args) {
  865. return isset($parent[0]) ? $parent[0]['uri'] : null;
  866. })
  867. );
  868. $registry->addFieldResolver('Link', 'title',
  869. $builder->callback(function ($parent, $args) {
  870. return isset($parent[0]) ? $parent[0]['title'] : null;
  871. })
  872. );
  873. }
  874. // ___ _
  875. // | \ __ _| |_ ___
  876. // | |) / _` | _/ -_)
  877. // |___/\__,_|\__\___|
  878. protected function addDate(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  879. $registry->addFieldResolver('Date', 'start',
  880. $builder->callback(function ($parent, $args) {
  881. return isset($parent[0]) ? $parent[0]['value'] : null;
  882. })
  883. );
  884. $registry->addFieldResolver('Date', 'end',
  885. $builder->callback(function ($parent, $args) {
  886. return isset($parent[0]) ? $parent[0]['end_value'] : null;
  887. })
  888. );
  889. }
  890. // ___ _ _ __ _ _ _
  891. // | __(_) |___ / _(_)___| |__| |
  892. // | _|| | / -_) _| / -_) / _` |
  893. // |_| |_|_\___|_| |_\___|_\__,_|
  894. protected function addFilefield(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  895. $registry->addFieldResolver('Filefield', 'description',
  896. $builder->callback(function ($parent, $args) {
  897. return $parent['description'];
  898. })
  899. );
  900. $registry->addFieldResolver('Filefield', 'file',
  901. $builder->callback(function ($parent, $args) {
  902. return \Drupal\file\Entity\File::load($parent['target_id']);
  903. })
  904. );
  905. }
  906. // ___ _ _
  907. // | __(_) |___
  908. // | _|| | / -_)
  909. // |_| |_|_\___|
  910. protected function addFile(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  911. $registry->addFieldResolver('File', 'url',
  912. $builder->callback(function ($parent, $args) {
  913. return $parent->url();
  914. })
  915. );
  916. $registry->addFieldResolver('File', 'filesize',
  917. $builder->callback(function ($parent, $args) {
  918. return $parent->getSize();
  919. })
  920. );
  921. $registry->addFieldResolver('File', 'filemime',
  922. $builder->callback(function ($parent, $args) {
  923. return $parent->getMimeType();
  924. })
  925. );
  926. $registry->addFieldResolver('File', 'filename',
  927. $builder->callback(function ($parent, $args) {
  928. return $parent->getFilename();
  929. })
  930. );
  931. $registry->addFieldResolver('File', 'fid',
  932. $builder->callback(function ($parent, $args) {
  933. return $parent->id();
  934. })
  935. );
  936. $registry->addFieldResolver('File', 'uuid',
  937. $builder->callback(function ($parent, $args) {
  938. return $parent->uuid();
  939. })
  940. );
  941. }
  942. // _ _ _
  943. // /_\ __| |__| |_ _ ___ ______
  944. // / _ \/ _` / _` | '_/ -_|_-<_-<
  945. // /_/ \_\__,_\__,_|_| \___/__/__/
  946. protected function addAddress(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  947. // $addr_fields = [
  948. // 'langcode',
  949. // 'country_code',
  950. // 'administrative_area',
  951. // 'locality',
  952. // 'dependent_locality',
  953. // 'postal_code',
  954. // 'sorting_code',
  955. // 'address_line1',
  956. // 'address_line2',
  957. // 'organization',
  958. // 'given_name',
  959. // 'additional_name',
  960. // 'family_name'
  961. // ];
  962. //
  963. // foreach ($addr_fields as $key => $value) {
  964. // $registry->addFieldResolver('Address', $value,
  965. // $builder->callback(function ($parent, $args) {
  966. // return $parent[0][$value];
  967. // })
  968. // );
  969. // }
  970. $registry->addFieldResolver('Address', 'langcode',
  971. $builder->callback(function ($parent, $args) {
  972. return $parent[0]['langcode'];
  973. })
  974. );
  975. $registry->addFieldResolver('Address', 'country_code',
  976. $builder->callback(function ($parent, $args) {
  977. return $parent[0]['country_code'];
  978. })
  979. );
  980. $registry->addFieldResolver('Address', 'administrative_area',
  981. $builder->callback(function ($parent, $args) {
  982. return $parent[0]['administrative_area'];
  983. })
  984. );
  985. $registry->addFieldResolver('Address', 'locality',
  986. $builder->callback(function ($parent, $args) {
  987. return $parent[0]['locality'];
  988. })
  989. );
  990. $registry->addFieldResolver('Address', 'dependent_locality',
  991. $builder->callback(function ($parent, $args) {
  992. return $parent[0]['dependent_locality'];
  993. })
  994. );
  995. $registry->addFieldResolver('Address', 'postal_code',
  996. $builder->callback(function ($parent, $args) {
  997. return $parent[0]['postal_code'];
  998. })
  999. );
  1000. $registry->addFieldResolver('Address', 'sorting_code',
  1001. $builder->callback(function ($parent, $args) {
  1002. return $parent[0]['sorting_code'];
  1003. })
  1004. );
  1005. $registry->addFieldResolver('Address', 'address_line1',
  1006. $builder->callback(function ($parent, $args) {
  1007. return $parent[0]['address_line1'];
  1008. })
  1009. );
  1010. $registry->addFieldResolver('Address', 'address_line2',
  1011. $builder->callback(function ($parent, $args) {
  1012. return $parent[0]['address_line2'];
  1013. })
  1014. );
  1015. $registry->addFieldResolver('Address', 'organization',
  1016. $builder->callback(function ($parent, $args) {
  1017. return $parent[0]['organization'];
  1018. })
  1019. );
  1020. $registry->addFieldResolver('Address', 'given_name',
  1021. $builder->callback(function ($parent, $args) {
  1022. return $parent[0]['given_name'];
  1023. })
  1024. );
  1025. $registry->addFieldResolver('Address', 'additional_name',
  1026. $builder->callback(function ($parent, $args) {
  1027. return $parent[0]['additional_name'];
  1028. })
  1029. );
  1030. $registry->addFieldResolver('Address', 'family_name',
  1031. $builder->callback(function ($parent, $args) {
  1032. return $parent[0]['family_name'];
  1033. })
  1034. );
  1035. }
  1036. // ___
  1037. // / __|___ _ __ _ __ __ _ _ _ _ _
  1038. // | (__/ _ \ ' \| '_ \/ _` | ' \ || |
  1039. // \___\___/_|_|_| .__/\__,_|_||_\_, |
  1040. // |_| |__/
  1041. protected function addCompany(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  1042. $registry->addFieldResolver('Query', 'company',
  1043. $builder->produce('entity_load')
  1044. ->map('type', $builder->fromValue('taxonomy_term'))
  1045. ->map('bundles', $builder->fromValue(['company']))
  1046. ->map('id', $builder->fromArgument('id'))
  1047. );
  1048. $registry->addFieldResolver('Company', 'id',
  1049. $builder->produce('entity_id')
  1050. ->map('entity', $builder->fromParent())
  1051. );
  1052. $registry->addFieldResolver('Company', 'uuid',
  1053. $builder->produce('entity_uuid')
  1054. ->map('entity', $builder->fromParent())
  1055. );
  1056. $registry->addFieldResolver('Company', 'name',
  1057. $builder->produce('entity_label')
  1058. ->map('entity', $builder->fromParent())
  1059. );
  1060. $registry->addFieldResolver('Company', 'description',
  1061. $builder->callback(function($parent, $args){
  1062. return $parent->getDescription();
  1063. })
  1064. );
  1065. // TODO: property_path helper
  1066. // $props = [
  1067. // [
  1068. // "res" => "attachments",
  1069. // "type" => "entity:taxonomy_term",
  1070. // "path" => "field_attachments",
  1071. // ]
  1072. // ]
  1073. // foreach ($props as $key => $value) {
  1074. // $registry->addFieldResolver('Company', $value['res'],
  1075. // $builder->produce('property_path')
  1076. // ->map('type', $builder->fromValue('entity:taxonomy_term'))
  1077. // ->map('value', $builder->fromParent())
  1078. // ->map('path', $builder->fromValue('field_attachments'))
  1079. // );
  1080. // }
  1081. $registry->addFieldResolver('Company', 'attachments',
  1082. $builder->produce('property_path')
  1083. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  1084. ->map('value', $builder->fromParent())
  1085. ->map('path', $builder->fromValue('field_attachments'))
  1086. );
  1087. $registry->addFieldResolver('Company', 'memo',
  1088. $builder->produce('property_path')
  1089. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  1090. ->map('value', $builder->fromParent())
  1091. ->map('path', $builder->fromValue('field_memo.value'))
  1092. );
  1093. $registry->addFieldResolver('Company', 'note',
  1094. $builder->produce('property_path')
  1095. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  1096. ->map('value', $builder->fromParent())
  1097. ->map('path', $builder->fromValue('field_note.value'))
  1098. );
  1099. $registry->addFieldResolver('Company', 'website',
  1100. $builder->produce('property_path')
  1101. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  1102. ->map('value', $builder->fromParent())
  1103. ->map('path', $builder->fromValue('field_website'))
  1104. );
  1105. $registry->addFieldResolver('Company', 'departement',
  1106. $builder->produce('property_path')
  1107. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  1108. ->map('value', $builder->fromParent())
  1109. ->map('path', $builder->fromValue('field_departement.value'))
  1110. );
  1111. $registry->addFieldResolver('Company', 'email',
  1112. $builder->produce('property_path')
  1113. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  1114. ->map('value', $builder->fromParent())
  1115. ->map('path', $builder->fromValue('field_public_email.value'))
  1116. );
  1117. $registry->addFieldResolver('Company', 'address',
  1118. $builder->produce('property_path')
  1119. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  1120. ->map('value', $builder->fromParent())
  1121. ->map('path', $builder->fromValue('field_public_address'))
  1122. );
  1123. $registry->addFieldResolver('Company', 'phone',
  1124. $builder->produce('property_path')
  1125. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  1126. ->map('value', $builder->fromParent())
  1127. ->map('path', $builder->fromValue('field_public_phone.value'))
  1128. );
  1129. $registry->addFieldResolver('Company', 'infos',
  1130. $builder->produce('property_path')
  1131. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  1132. ->map('value', $builder->fromParent())
  1133. ->map('path', $builder->fromValue('field_infos_from_company.value'))
  1134. );
  1135. }
  1136. protected function addProduct(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  1137. $registry->addFieldResolver('Query', 'product',
  1138. $builder->produce('entity_load')
  1139. ->map('type', $builder->fromValue('commerce_product'))
  1140. // ->map('bundles', $builder->fromValue(['materiau']))
  1141. ->map('id', $builder->fromArgument('id'))
  1142. );
  1143. $registry->addFieldResolver('Query', 'products',
  1144. $builder->produce('entity_load_multiple')
  1145. ->map('type', $builder->fromValue('commerce_product'))
  1146. // ->map('bundles', $builder->fromValue(['materiau']))
  1147. ->map('ids', $builder->fromArgument('ids'))
  1148. );
  1149. $registry->addFieldResolver('Product', 'id',
  1150. $builder->produce('entity_id')
  1151. ->map('entity', $builder->fromParent())
  1152. );
  1153. $registry->addFieldResolver('Product', 'uuid',
  1154. $builder->produce('entity_uuid')
  1155. ->map('entity', $builder->fromParent())
  1156. );
  1157. $registry->addFieldResolver('Product', 'bundle',
  1158. $builder->produce('entity_bundle')
  1159. ->map('entity', $builder->fromParent())
  1160. );
  1161. $registry->addFieldResolver('Product', 'path',
  1162. $builder->compose(
  1163. $builder->produce('entity_url')
  1164. ->map('entity', $builder->fromParent()),
  1165. $builder->produce('url_path')
  1166. ->map('url', $builder->fromParent())
  1167. )
  1168. );
  1169. $registry->addFieldResolver('Product', 'title',
  1170. $builder->compose(
  1171. $builder->produce('entity_label')
  1172. ->map('entity', $builder->fromParent())
  1173. ));
  1174. $registry->addFieldResolver('Product', 'body',
  1175. $builder->produce('property_path')
  1176. ->map('type', $builder->fromValue('entity:commerce_product'))
  1177. ->map('value', $builder->fromParent())
  1178. ->map('path', $builder->fromValue('body.value'))
  1179. );
  1180. $registry->addFieldResolver('Product', 'price_description',
  1181. $builder->produce('property_path')
  1182. ->map('type', $builder->fromValue('entity:commerce_product'))
  1183. ->map('value', $builder->fromParent())
  1184. ->map('path', $builder->fromValue('field_price_description.value'))
  1185. );
  1186. $registry->addFieldResolver('Product', 'variations',
  1187. $builder->produce('entity_reference')
  1188. ->map('entity', $builder->fromParent())
  1189. ->map('field', $builder->fromValue('variations'))
  1190. );
  1191. }
  1192. protected function addVariation(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  1193. // $registry->addFieldResolver('Query', 'product',
  1194. // $builder->produce('entity_load')
  1195. // ->map('type', $builder->fromValue('commerce_product_variation'))
  1196. // // ->map('bundles', $builder->fromValue(['materiau']))
  1197. // ->map('id', $builder->fromArgument('id'))
  1198. // );
  1199. // $registry->addFieldResolver('Query', 'product',
  1200. // $builder->produce('entity_load_multiple')
  1201. // ->map('type', $builder->fromValue('product'))
  1202. // // ->map('bundles', $builder->fromValue(['materiau']))
  1203. // ->map('ids', $builder->fromArgument('ids'))
  1204. // );
  1205. $registry->addFieldResolver('Variation', 'id',
  1206. $builder->produce('entity_id')
  1207. ->map('entity', $builder->fromParent())
  1208. );
  1209. $registry->addFieldResolver('Variation', 'uuid',
  1210. $builder->produce('entity_uuid')
  1211. ->map('entity', $builder->fromParent())
  1212. );
  1213. $registry->addFieldResolver('Variation', 'bundle',
  1214. $builder->produce('entity_bundle')
  1215. ->map('entity', $builder->fromParent())
  1216. );
  1217. $registry->addFieldResolver('Variation', 'path',
  1218. $builder->compose(
  1219. $builder->produce('entity_url')
  1220. ->map('entity', $builder->fromParent()),
  1221. $builder->produce('url_path')
  1222. ->map('url', $builder->fromParent())
  1223. )
  1224. );
  1225. $registry->addFieldResolver('Variation', 'title',
  1226. $builder->compose(
  1227. $builder->produce('entity_label')
  1228. ->map('entity', $builder->fromParent())
  1229. ));
  1230. $registry->addFieldResolver('Variation', 'description',
  1231. $builder->produce('property_path')
  1232. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1233. ->map('value', $builder->fromParent())
  1234. ->map('path', $builder->fromValue('field_description.value'))
  1235. );
  1236. $registry->addFieldResolver('Variation', 'subscription_type',
  1237. $builder->produce('property_path')
  1238. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1239. ->map('value', $builder->fromParent())
  1240. ->map('path', $builder->fromValue('subscription_type.value'))
  1241. );
  1242. $registry->addFieldResolver('Variation', 'sku',
  1243. $builder->produce('property_path')
  1244. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1245. ->map('value', $builder->fromParent())
  1246. ->map('path', $builder->fromValue('sku.value'))
  1247. );
  1248. $registry->addFieldResolver('Variation', 'price',
  1249. $builder->produce('property_path')
  1250. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1251. ->map('value', $builder->fromParent())
  1252. ->map('path', $builder->fromValue('price'))
  1253. );
  1254. // product_id
  1255. // list_price
  1256. // billing_schedule
  1257. // license_expiration
  1258. // license_type
  1259. // field_multiple
  1260. }
  1261. protected function addPrice(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  1262. $registry->addFieldResolver('Price', 'value',
  1263. $builder->compose(
  1264. $builder->callback(function($parent, $args){
  1265. return $parent[0]['number'];
  1266. })
  1267. ));
  1268. $registry->addFieldResolver('Price', 'currency',
  1269. $builder->compose(
  1270. $builder->callback(function($parent, $args){
  1271. return $parent[0]['currency_code'];
  1272. })
  1273. ));
  1274. }
  1275. /**
  1276. * Resolves the response type.
  1277. *
  1278. * @param \Drupal\graphql\GraphQL\Response\ResponseInterface $response
  1279. * Response object.
  1280. *
  1281. * @return string
  1282. * Response type.
  1283. *
  1284. * @throws \Exception
  1285. * Invalid response type.
  1286. */
  1287. public static function resolveResponse(ResponseInterface $response): string {
  1288. // Resolve content response.
  1289. if ($response instanceof MateriauResponse) {
  1290. return 'MateriauResponse';
  1291. }
  1292. throw new \Exception('Invalid response type.');
  1293. }
  1294. }