MaterioSchemaExtension.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748
  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. /**
  10. * @SchemaExtension(
  11. * id = "materio_extension",
  12. * name = "Materio extension",
  13. * description = "Materio extension.",
  14. * schema = "materio"
  15. * )
  16. */
  17. class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
  18. /**
  19. * {@inheritdoc}
  20. */
  21. public function registerResolvers(ResolverRegistryInterface $registry) {
  22. $builder = new ResolverBuilder();
  23. $this->addMateriau($registry, $builder);
  24. $this->addArticle($registry, $builder);
  25. $this->addCompany($registry, $builder);
  26. $this->addAddress($registry, $builder);
  27. $this->addFilefield($registry, $builder);
  28. $this->addFile($registry, $builder);
  29. $this->addDate($registry, $builder);
  30. $this->addLink($registry, $builder);
  31. $this->addShowroom($registry, $builder);
  32. $this->addTag($registry, $builder);
  33. $this->addThesaurus($registry, $builder);
  34. $this->addVideolink($registry, $builder);
  35. $this->addImage($registry, $builder);
  36. // Response type resolver.
  37. $registry->addTypeResolver('Response', [
  38. __CLASS__,
  39. 'resolveResponse',
  40. ]);
  41. }
  42. // __ __ _ _
  43. // | \/ |__ _| |_ ___ _ _(_)__ _ _ _
  44. // | |\/| / _` | _/ -_) '_| / _` | || |
  45. // |_| |_\__,_|\__\___|_| |_\__,_|\_,_|
  46. protected function addMateriau(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  47. $registry->addFieldResolver('Query', 'materiau',
  48. $builder->produce('entity_load')
  49. ->map('type', $builder->fromValue('node'))
  50. ->map('bundles', $builder->fromValue(['materiau']))
  51. ->map('id', $builder->fromArgument('id'))
  52. );
  53. $registry->addFieldResolver('Materiau', 'id',
  54. $builder->produce('entity_id')
  55. ->map('entity', $builder->fromParent())
  56. );
  57. $registry->addFieldResolver('Materiau', 'uuid',
  58. $builder->produce('entity_uuid')
  59. ->map('entity', $builder->fromParent())
  60. );
  61. $registry->addFieldResolver('Materiau', 'title',
  62. $builder->compose(
  63. $builder->produce('entity_label')
  64. ->map('entity', $builder->fromParent())
  65. ));
  66. $registry->addFieldResolver('Materiau', 'body',
  67. $builder->produce('property_path')
  68. ->map('type', $builder->fromValue('entity:node'))
  69. ->map('value', $builder->fromParent())
  70. ->map('path', $builder->fromValue('body.value'))
  71. );
  72. $registry->addFieldResolver('Materiau', 'short_description',
  73. $builder->produce('property_path')
  74. ->map('type', $builder->fromValue('entity:node'))
  75. ->map('value', $builder->fromParent())
  76. ->map('path', $builder->fromValue('field_short_description.value'))
  77. );
  78. $registry->addFieldResolver('Materiau', 'author',
  79. $builder->compose(
  80. $builder->produce('entity_owner')
  81. ->map('entity', $builder->fromParent()),
  82. $builder->produce('entity_label')
  83. ->map('entity', $builder->fromParent())
  84. ));
  85. // https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md
  86. // https://blog.chrismitchellonline.com/posts/custom_graphql_data/
  87. $registry->addFieldResolver('Materiau', 'linked_materials',
  88. $builder->compose(
  89. $builder->produce('entity_reference')
  90. ->map('entity', $builder->fromParent())
  91. ->map('field', $builder->fromValue('field_linked_materials'))
  92. ));
  93. $registry->addFieldResolver('Materiau', 'linked_articles',
  94. $builder->compose(
  95. $builder->produce('entity_reference')
  96. ->map('entity', $builder->fromParent())
  97. ->map('field', $builder->fromValue('field_linked_articles'))
  98. ));
  99. $registry->addFieldResolver('Materiau', 'memo',
  100. $builder->produce('property_path')
  101. ->map('type', $builder->fromValue('entity:node'))
  102. ->map('value', $builder->fromParent())
  103. ->map('path', $builder->fromValue('field_memo.value'))
  104. );
  105. $registry->addFieldResolver('Materiau', 'images',
  106. $builder->produce('entity_reference')
  107. ->map('entity', $builder->fromParent())
  108. ->map('field', $builder->fromValue('field_materiau_images'))
  109. );
  110. $registry->addFieldResolver('Materiau', 'attachments',
  111. $builder->produce('property_path')
  112. ->map('type', $builder->fromValue('entity:node'))
  113. ->map('value', $builder->fromParent())
  114. ->map('path', $builder->fromValue('field_attachments'))
  115. );
  116. $registry->addFieldResolver('Materiau', 'videos',
  117. $builder->produce('property_path')
  118. ->map('type', $builder->fromValue('entity:node'))
  119. ->map('value', $builder->fromParent())
  120. ->map('path', $builder->fromValue('field_video'))
  121. );
  122. $registry->addFieldResolver('Materiau', 'tags',
  123. $builder->produce('entity_reference')
  124. ->map('entity', $builder->fromParent())
  125. ->map('field', $builder->fromValue('field_tags'))
  126. );
  127. $registry->addFieldResolver('Materiau', 'thesaurus',
  128. $builder->produce('entity_reference')
  129. ->map('entity', $builder->fromParent())
  130. ->map('field', $builder->fromValue('field_thesaurus'))
  131. );
  132. $registry->addFieldResolver('Materiau', 'manufacturer',
  133. $builder->produce('entity_reference')
  134. ->map('entity', $builder->fromParent())
  135. ->map('field', $builder->fromValue('field_manufacturer'))
  136. );
  137. $registry->addFieldResolver('Materiau', 'distributor',
  138. $builder->produce('entity_reference')
  139. ->map('entity', $builder->fromParent())
  140. ->map('field', $builder->fromValue('field_distributor'))
  141. );
  142. // field_famille
  143. // field_index
  144. // field_reference
  145. // field_samples
  146. }
  147. // _ _ _ _
  148. // /_\ _ _| |_(_)__| |___
  149. // / _ \| '_| _| / _| / -_)
  150. // /_/ \_\_| \__|_\__|_\___|
  151. protected function addArticle(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  152. $registry->addFieldResolver('Query', 'article',
  153. $builder->produce('entity_load')
  154. ->map('type', $builder->fromValue('node'))
  155. ->map('bundles', $builder->fromValue(['article']))
  156. ->map('id', $builder->fromArgument('id'))
  157. );
  158. $registry->addFieldResolver('Article', 'id',
  159. $builder->produce('entity_id')
  160. ->map('entity', $builder->fromParent())
  161. );
  162. $registry->addFieldResolver('Article', 'uuid',
  163. $builder->produce('entity_uuid')
  164. ->map('entity', $builder->fromParent())
  165. );
  166. $registry->addFieldResolver('Article', 'title',
  167. $builder->compose(
  168. $builder->produce('entity_label')
  169. ->map('entity', $builder->fromParent())
  170. ));
  171. $registry->addFieldResolver('Article', 'author',
  172. $builder->compose(
  173. $builder->produce('entity_owner')
  174. ->map('entity', $builder->fromParent()),
  175. $builder->produce('entity_label')
  176. ->map('entity', $builder->fromParent())
  177. ));
  178. $registry->addFieldResolver('Article', 'body',
  179. $builder->produce('property_path')
  180. ->map('type', $builder->fromValue('entity:node'))
  181. ->map('value', $builder->fromParent())
  182. ->map('path', $builder->fromValue('body.value'))
  183. );
  184. $registry->addFieldResolver('Article', 'memo',
  185. $builder->produce('property_path')
  186. ->map('type', $builder->fromValue('entity:node'))
  187. ->map('value', $builder->fromParent())
  188. ->map('path', $builder->fromValue('field_memo.value'))
  189. );
  190. // https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md
  191. // https://blog.chrismitchellonline.com/posts/custom_graphql_data/
  192. $registry->addFieldResolver('Article', 'linked_materials',
  193. $builder->produce('entity_reference')
  194. ->map('entity', $builder->fromParent())
  195. ->map('field', $builder->fromValue('field_linked_materials'))
  196. );
  197. $registry->addFieldResolver('Article', 'images',
  198. $builder->produce('entity_reference')
  199. ->map('entity', $builder->fromParent())
  200. ->map('field', $builder->fromValue('field_visuel'))
  201. );
  202. $registry->addFieldResolver('Article', 'videos',
  203. $builder->produce('property_path')
  204. ->map('type', $builder->fromValue('entity:node'))
  205. ->map('value', $builder->fromParent())
  206. ->map('path', $builder->fromValue('field_video'))
  207. );
  208. $registry->addFieldResolver('Article', 'tags',
  209. $builder->produce('entity_reference')
  210. ->map('entity', $builder->fromParent())
  211. ->map('field', $builder->fromValue('field_tags'))
  212. );
  213. $registry->addFieldResolver('Article', 'thesaurus',
  214. $builder->produce('entity_reference')
  215. ->map('entity', $builder->fromParent())
  216. ->map('field', $builder->fromValue('field_thesaurus'))
  217. );
  218. $registry->addFieldResolver('Article', 'showroom',
  219. $builder->compose(
  220. $builder->produce('entity_reference')
  221. ->map('entity', $builder->fromParent())
  222. ->map('field', $builder->fromValue('field_showroom')),
  223. $builder->callback(function ($items) {
  224. return $items[0];
  225. })
  226. ));
  227. $registry->addFieldResolver('Article', 'source',
  228. $builder->produce('property_path')
  229. ->map('type', $builder->fromValue('entity:node'))
  230. ->map('value', $builder->fromParent())
  231. ->map('path', $builder->fromValue('field_source'))
  232. );
  233. $registry->addFieldResolver('Article', 'date',
  234. $builder->produce('property_path')
  235. ->map('type', $builder->fromValue('entity:node'))
  236. ->map('value', $builder->fromParent())
  237. ->map('path', $builder->fromValue('field_date'))
  238. );
  239. }
  240. // ___
  241. // |_ _|_ __ __ _ __ _ ___
  242. // | || ' \/ _` / _` / -_)
  243. // |___|_|_|_\__,_\__, \___|
  244. // |___/
  245. protected function addImage(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  246. $registry->addFieldResolver('Image', 'id',
  247. $builder->produce('entity_id')
  248. ->map('entity', $builder->fromParent())
  249. );
  250. $registry->addFieldResolver('Image', 'url',
  251. $builder->produce('image_url')
  252. ->map('entity', $builder->fromParent())
  253. );
  254. $registry->addFieldResolver('Image', 'alt',
  255. $builder->produce('property_path')
  256. ->map('type', $builder->fromValue('entity:node'))
  257. ->map('value', $builder->fromParent())
  258. ->map('path', $builder->fromValue('field_image.alt'))
  259. );
  260. $registry->addFieldResolver('Image', 'style_minicard',
  261. $builder->produce('image_derivative')
  262. ->map('entity', $builder->fromParent())
  263. ->map('style', $builder->fromValue('card_medium_half'))
  264. );
  265. $registry->addFieldResolver('Image', 'style_cardmedium',
  266. $builder->produce('image_derivative')
  267. ->map('entity', $builder->fromParent())
  268. ->map('style', $builder->fromValue('card_medium'))
  269. );
  270. $registry->addFieldResolver('Image', 'style_cardfull',
  271. $builder->produce('image_derivative')
  272. ->map('entity', $builder->fromParent())
  273. ->map('style', $builder->fromValue('card_full'))
  274. );
  275. $registry->addFieldResolver('Image', 'style_articlecardmedium',
  276. $builder->produce('image_derivative')
  277. ->map('entity', $builder->fromParent())
  278. ->map('style', $builder->fromValue('article_card_medium'))
  279. );
  280. }
  281. // __ ___ _ _ _ _
  282. // \ \ / (_)__| |___ ___| | (_)_ _ | |__
  283. // \ V /| / _` / -_) _ \ |__| | ' \| / /
  284. // \_/ |_\__,_\___\___/____|_|_||_|_\_\
  285. protected function addVideolink(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  286. $registry->addFieldResolver('VideoLink', 'url',
  287. $builder->produce('property_path')
  288. ->map('type', $builder->fromValue('field_item:video_embed_field'))
  289. ->map('value', $builder->fromParent())
  290. ->map('path', $builder->fromValue('value'))
  291. );
  292. }
  293. // _____ _
  294. // |_ _| |_ ___ ___ __ _ _ _ _ _ _ _ ___
  295. // | | | ' \/ -_|_-</ _` | || | '_| || (_-<
  296. // |_| |_||_\___/__/\__,_|\_,_|_| \_,_/__/
  297. protected function addThesaurus(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  298. $registry->addFieldResolver('Query', 'thesaurus',
  299. $builder->produce('entity_load')
  300. ->map('type', $builder->fromValue('taxonomy_term'))
  301. ->map('bundles', $builder->fromValue(['thesaurus']))
  302. ->map('id', $builder->fromArgument('id'))
  303. );
  304. $registry->addFieldResolver('Thesaurus', 'id',
  305. $builder->produce('entity_id')
  306. ->map('entity', $builder->fromParent())
  307. );
  308. $registry->addFieldResolver('Thesaurus', 'uuid',
  309. $builder->produce('entity_uuid')
  310. ->map('entity', $builder->fromParent())
  311. );
  312. $registry->addFieldResolver('Thesaurus', 'name',
  313. $builder->produce('entity_label')
  314. ->map('entity', $builder->fromParent())
  315. );
  316. }
  317. // _____
  318. // |_ _|_ _ __ _
  319. // | |/ _` / _` |
  320. // |_|\__,_\__, |
  321. // |___/
  322. protected function addTag(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  323. $registry->addFieldResolver('Query', 'tag',
  324. $builder->produce('entity_load')
  325. ->map('type', $builder->fromValue('taxonomy_term'))
  326. ->map('bundles', $builder->fromValue(['tags']))
  327. ->map('id', $builder->fromArgument('id'))
  328. );
  329. $registry->addFieldResolver('Tag', 'id',
  330. $builder->produce('entity_id')
  331. ->map('entity', $builder->fromParent())
  332. );
  333. $registry->addFieldResolver('Tag', 'uuid',
  334. $builder->produce('entity_uuid')
  335. ->map('entity', $builder->fromParent())
  336. );
  337. $registry->addFieldResolver('Tag', 'name',
  338. $builder->produce('entity_label')
  339. ->map('entity', $builder->fromParent())
  340. );
  341. }
  342. // ___ _
  343. // / __| |_ _____ __ ___ _ ___ ___ _ __
  344. // \__ \ ' \/ _ \ V V / '_/ _ \/ _ \ ' \
  345. // |___/_||_\___/\_/\_/|_| \___/\___/_|_|_|
  346. protected function addShowroom(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  347. $registry->addFieldResolver('Query', 'showroom',
  348. $builder->produce('entity_load')
  349. ->map('type', $builder->fromValue('taxonomy_term'))
  350. ->map('bundles', $builder->fromValue(['showroom']))
  351. ->map('id', $builder->fromArgument('id'))
  352. );
  353. $registry->addFieldResolver('Showroom', 'id',
  354. $builder->produce('entity_id')
  355. ->map('entity', $builder->fromParent())
  356. );
  357. $registry->addFieldResolver('Showroom', 'uuid',
  358. $builder->produce('entity_uuid')
  359. ->map('entity', $builder->fromParent())
  360. );
  361. $registry->addFieldResolver('Showroom', 'name',
  362. $builder->produce('entity_label')
  363. ->map('entity', $builder->fromParent())
  364. );
  365. }
  366. // _ _ _
  367. // | | (_)_ _ | |__
  368. // | |__| | ' \| / /
  369. // |____|_|_||_|_\_\
  370. protected function addLink(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  371. $registry->addFieldResolver('Link', 'url',
  372. $builder->callback(function ($parent, $args) {
  373. return $parent[0]['uri'];
  374. })
  375. );
  376. $registry->addFieldResolver('Link', 'title',
  377. $builder->callback(function ($parent, $args) {
  378. return $parent[0]['title'];
  379. })
  380. );
  381. }
  382. // ___ _
  383. // | \ __ _| |_ ___
  384. // | |) / _` | _/ -_)
  385. // |___/\__,_|\__\___|
  386. protected function addDate(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  387. $registry->addFieldResolver('Date', 'start',
  388. $builder->callback(function ($parent, $args) {
  389. return $parent[0]['value'];
  390. })
  391. );
  392. $registry->addFieldResolver('Date', 'end',
  393. $builder->callback(function ($parent, $args) {
  394. return $parent[0]['end_value'];
  395. })
  396. );
  397. }
  398. // ___ _ _ __ _ _ _
  399. // | __(_) |___ / _(_)___| |__| |
  400. // | _|| | / -_) _| / -_) / _` |
  401. // |_| |_|_\___|_| |_\___|_\__,_|
  402. protected function addFilefield(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  403. $registry->addFieldResolver('Filefield', 'description',
  404. $builder->callback(function ($parent, $args) {
  405. return $parent['description'];
  406. })
  407. );
  408. $registry->addFieldResolver('Filefield', 'file',
  409. $builder->callback(function ($parent, $args) {
  410. return \Drupal\file\Entity\File::load($parent['target_id']);
  411. })
  412. );
  413. }
  414. // ___ _ _
  415. // | __(_) |___
  416. // | _|| | / -_)
  417. // |_| |_|_\___|
  418. protected function addFile(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  419. $registry->addFieldResolver('File', 'url',
  420. $builder->callback(function ($parent, $args) {
  421. return $parent->url();
  422. })
  423. );
  424. $registry->addFieldResolver('File', 'filesize',
  425. $builder->callback(function ($parent, $args) {
  426. return $parent->getSize();
  427. })
  428. );
  429. $registry->addFieldResolver('File', 'filemime',
  430. $builder->callback(function ($parent, $args) {
  431. return $parent->getMimeType();
  432. })
  433. );
  434. $registry->addFieldResolver('File', 'filename',
  435. $builder->callback(function ($parent, $args) {
  436. return $parent->getFilename();
  437. })
  438. );
  439. $registry->addFieldResolver('File', 'fid',
  440. $builder->callback(function ($parent, $args) {
  441. return $parent->id();
  442. })
  443. );
  444. $registry->addFieldResolver('File', 'uuid',
  445. $builder->callback(function ($parent, $args) {
  446. return $parent->uuid();
  447. })
  448. );
  449. }
  450. // _ _ _
  451. // /_\ __| |__| |_ _ ___ ______
  452. // / _ \/ _` / _` | '_/ -_|_-<_-<
  453. // /_/ \_\__,_\__,_|_| \___/__/__/
  454. protected function addAddress(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  455. // $addr_fields = [
  456. // 'langcode',
  457. // 'country_code',
  458. // 'administrative_area',
  459. // 'locality',
  460. // 'dependent_locality',
  461. // 'postal_code',
  462. // 'sorting_code',
  463. // 'address_line1',
  464. // 'address_line2',
  465. // 'organization',
  466. // 'given_name',
  467. // 'additional_name',
  468. // 'family_name'
  469. // ];
  470. //
  471. // foreach ($addr_fields as $key => $value) {
  472. // $registry->addFieldResolver('Address', $value,
  473. // $builder->callback(function ($parent, $args) {
  474. // return $parent[0][$value];
  475. // })
  476. // );
  477. // }
  478. $registry->addFieldResolver('Address', 'langcode',
  479. $builder->callback(function ($parent, $args) {
  480. return $parent[0]['langcode'];
  481. })
  482. );
  483. $registry->addFieldResolver('Address', 'country_code',
  484. $builder->callback(function ($parent, $args) {
  485. return $parent[0]['country_code'];
  486. })
  487. );
  488. $registry->addFieldResolver('Address', 'administrative_area',
  489. $builder->callback(function ($parent, $args) {
  490. return $parent[0]['administrative_area'];
  491. })
  492. );
  493. $registry->addFieldResolver('Address', 'locality',
  494. $builder->callback(function ($parent, $args) {
  495. return $parent[0]['locality'];
  496. })
  497. );
  498. $registry->addFieldResolver('Address', 'dependent_locality',
  499. $builder->callback(function ($parent, $args) {
  500. return $parent[0]['dependent_locality'];
  501. })
  502. );
  503. $registry->addFieldResolver('Address', 'postal_code',
  504. $builder->callback(function ($parent, $args) {
  505. return $parent[0]['postal_code'];
  506. })
  507. );
  508. $registry->addFieldResolver('Address', 'sorting_code',
  509. $builder->callback(function ($parent, $args) {
  510. return $parent[0]['sorting_code'];
  511. })
  512. );
  513. $registry->addFieldResolver('Address', 'address_line1',
  514. $builder->callback(function ($parent, $args) {
  515. return $parent[0]['address_line1'];
  516. })
  517. );
  518. $registry->addFieldResolver('Address', 'address_line2',
  519. $builder->callback(function ($parent, $args) {
  520. return $parent[0]['address_line2'];
  521. })
  522. );
  523. $registry->addFieldResolver('Address', 'organization',
  524. $builder->callback(function ($parent, $args) {
  525. return $parent[0]['organization'];
  526. })
  527. );
  528. $registry->addFieldResolver('Address', 'given_name',
  529. $builder->callback(function ($parent, $args) {
  530. return $parent[0]['given_name'];
  531. })
  532. );
  533. $registry->addFieldResolver('Address', 'additional_name',
  534. $builder->callback(function ($parent, $args) {
  535. return $parent[0]['additional_name'];
  536. })
  537. );
  538. $registry->addFieldResolver('Address', 'family_name',
  539. $builder->callback(function ($parent, $args) {
  540. return $parent[0]['family_name'];
  541. })
  542. );
  543. }
  544. // ___
  545. // / __|___ _ __ _ __ __ _ _ _ _ _
  546. // | (__/ _ \ ' \| '_ \/ _` | ' \ || |
  547. // \___\___/_|_|_| .__/\__,_|_||_\_, |
  548. // |_| |__/
  549. protected function addCompany(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  550. $registry->addFieldResolver('Query', 'company',
  551. $builder->produce('entity_load')
  552. ->map('type', $builder->fromValue('taxonomy_term'))
  553. ->map('bundles', $builder->fromValue(['company']))
  554. ->map('id', $builder->fromArgument('id'))
  555. );
  556. $registry->addFieldResolver('Company', 'id',
  557. $builder->produce('entity_id')
  558. ->map('entity', $builder->fromParent())
  559. );
  560. $registry->addFieldResolver('Company', 'uuid',
  561. $builder->produce('entity_uuid')
  562. ->map('entity', $builder->fromParent())
  563. );
  564. $registry->addFieldResolver('Company', 'name',
  565. $builder->produce('entity_label')
  566. ->map('entity', $builder->fromParent())
  567. );
  568. // TODO: property_path helper
  569. // $props = [
  570. // [
  571. // "res" => "attachments",
  572. // "type" => "entity:taxonomy_term",
  573. // "path" => "field_attachments",
  574. // ]
  575. // ]
  576. // foreach ($props as $key => $value) {
  577. // $registry->addFieldResolver('Company', $value['res'],
  578. // $builder->produce('property_path')
  579. // ->map('type', $builder->fromValue('entity:taxonomy_term'))
  580. // ->map('value', $builder->fromParent())
  581. // ->map('path', $builder->fromValue('field_attachments'))
  582. // );
  583. // }
  584. $registry->addFieldResolver('Company', 'attachments',
  585. $builder->produce('property_path')
  586. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  587. ->map('value', $builder->fromParent())
  588. ->map('path', $builder->fromValue('field_attachments'))
  589. );
  590. $registry->addFieldResolver('Company', 'memo',
  591. $builder->produce('property_path')
  592. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  593. ->map('value', $builder->fromParent())
  594. ->map('path', $builder->fromValue('field_memo.value'))
  595. );
  596. $registry->addFieldResolver('Company', 'note',
  597. $builder->produce('property_path')
  598. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  599. ->map('value', $builder->fromParent())
  600. ->map('path', $builder->fromValue('field_note.value'))
  601. );
  602. $registry->addFieldResolver('Company', 'website',
  603. $builder->produce('property_path')
  604. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  605. ->map('value', $builder->fromParent())
  606. ->map('path', $builder->fromValue('field_website'))
  607. );
  608. $registry->addFieldResolver('Company', 'departement',
  609. $builder->produce('property_path')
  610. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  611. ->map('value', $builder->fromParent())
  612. ->map('path', $builder->fromValue('field_departement.value'))
  613. );
  614. $registry->addFieldResolver('Company', 'email',
  615. $builder->produce('property_path')
  616. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  617. ->map('value', $builder->fromParent())
  618. ->map('path', $builder->fromValue('field_public_email.value'))
  619. );
  620. $registry->addFieldResolver('Company', 'address',
  621. $builder->produce('property_path')
  622. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  623. ->map('value', $builder->fromParent())
  624. ->map('path', $builder->fromValue('field_public_address'))
  625. );
  626. // field_infos_from_company
  627. // field_public_phone
  628. }
  629. /**
  630. * Resolves the response type.
  631. *
  632. * @param \Drupal\graphql\GraphQL\Response\ResponseInterface $response
  633. * Response object.
  634. *
  635. * @return string
  636. * Response type.
  637. *
  638. * @throws \Exception
  639. * Invalid response type.
  640. */
  641. public static function resolveResponse(ResponseInterface $response): string {
  642. // Resolve content response.
  643. if ($response instanceof MateriauResponse) {
  644. return 'MateriauResponse';
  645. }
  646. throw new \Exception('Invalid response type.');
  647. }
  648. }