EnFrSchemaExtension.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583
  1. <?php
  2. namespace Drupal\enfrancais_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 = "enfr_extension",
  13. * name = "En Francais extension",
  14. * description = "En Francais extension.",
  15. * schema = "enfr"
  16. * )
  17. */
  18. class EnFrSchemaExtension extends SdlSchemaExtensionPluginBase {
  19. /**
  20. * {@inheritdoc}
  21. */
  22. public function registerResolvers(ResolverRegistryInterface $registry) {
  23. $builder = new ResolverBuilder();
  24. $this->addRouteResolver($registry, $builder);
  25. $this->addTextsdepart($registry, $builder);
  26. $this->addTextref($registry, $builder);
  27. $this->addTextprod($registry, $builder);
  28. //
  29. $this->addFilefield($registry, $builder);
  30. //
  31. $this->addFile($registry, $builder);
  32. //
  33. $this->addDate($registry, $builder);
  34. //
  35. $this->addVideolink($registry, $builder);
  36. //
  37. $this->addImage($registry, $builder);
  38. //
  39. $this->addTaxoterm($registry, $builder);
  40. //
  41. // $this->addNote($registry, $builder);
  42. //
  43. // $this->addSearchResult($registry, $builder);
  44. //
  45. // $this->addSample($registry, $builder);
  46. //
  47. // $this->addArticle($registry, $builder);
  48. //
  49. // $this->addThematique($registry, $builder);
  50. //
  51. // $this->addCompany($registry, $builder);
  52. //
  53. // $this->addProduct($registry, $builder);
  54. //
  55. // $this->addVariation($registry, $builder);
  56. //
  57. // $this->addPrice($registry, $builder);
  58. //
  59. // $this->addAddress($registry, $builder);
  60. //
  61. // $this->addLink($registry, $builder);
  62. //
  63. // $this->addShowroom($registry, $builder);
  64. //
  65. // $this->addThesaurus($registry, $builder);
  66. //
  67. }
  68. // ___ _
  69. // | _ \___ _ _| |_ ___
  70. // | / _ \ || | _/ -_)
  71. // |_|_\___/\_,_|\__\___|
  72. protected function addRouteResolver(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  73. // Tell GraphQL how to resolve types of a common interface.
  74. $registry->addTypeResolver('NodeInterface', function ($value) {
  75. $path = explode('\\', get_class($value));
  76. $class = array_pop($path);
  77. if ($class === 'Node') {
  78. switch ($value->bundle()) {
  79. case 'texte': return 'Textref';
  80. case 'texte_prod': return 'TextProd';
  81. }
  82. }
  83. throw new Error('Could not resolve content type.');
  84. });
  85. $registry->addFieldResolver('Query', 'route',
  86. $builder->compose(
  87. $builder->produce('route_load')
  88. ->map('path', $builder->fromArgument('path')),
  89. $builder->produce('route_entity')
  90. ->map('url', $builder->fromParent())
  91. ));
  92. }
  93. // _____ _ ___ _
  94. // |_ _|____ _| |_ ___ | \ ___ _ __ __ _ _ _| |_
  95. // | |/ -_) \ / _(_-< | |) / -_) '_ \/ _` | '_| _|
  96. // |_|\___/_\_\\__/__/ |___/\___| .__/\__,_|_| \__|
  97. // |_|
  98. protected function addTextsdepart(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  99. $registry->addFieldResolver('Query', 'textsdepart',
  100. $builder->compose(
  101. $builder->callback(function($parent, $arg){
  102. $entity_storage = \Drupal::entityTypeManager()->getStorage('node');
  103. $query = $entity_storage->getQuery()
  104. ->condition('type', 'texte')
  105. ->condition('field_famille', 9)
  106. ->accessCheck(TRUE);
  107. $results = $query->execute();
  108. return $results;
  109. }),
  110. $builder->produce('entity_load_multiple')
  111. ->map('type', $builder->fromValue('node'))
  112. ->map('ids', $builder->fromParent())
  113. )
  114. );
  115. }
  116. // _____ _ __
  117. // |_ _|____ _| |_ _ _ ___ / _|
  118. // | |/ -_) \ / _| '_/ -_) _|
  119. // |_|\___/_\_\\__|_| \___|_|
  120. protected function addTextref(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  121. // $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
  122. $registry->addFieldResolver('Query', 'textref',
  123. $builder->produce('entity_load')
  124. ->map('type', $builder->fromValue('node'))
  125. ->map('bundles', $builder->fromValue(['texte']))
  126. ->map('id', $builder->fromArgument('id'))
  127. );
  128. $registry->addFieldResolver('Query', 'textsref',
  129. $builder->produce('entity_load_multiple')
  130. ->map('type', $builder->fromValue('node'))
  131. ->map('ids', $builder->fromArgument('ids'))
  132. );
  133. $registry->addFieldResolver('Textref', 'id',
  134. $builder->produce('entity_id')
  135. ->map('entity', $builder->fromParent())
  136. );
  137. $registry->addFieldResolver('Textref', 'uuid',
  138. $builder->produce('entity_uuid')
  139. ->map('entity', $builder->fromParent())
  140. );
  141. $registry->addFieldResolver('Textref', 'path',
  142. $builder->compose(
  143. $builder->produce('entity_url')
  144. ->map('entity', $builder->fromParent()),
  145. $builder->produce('url_path')
  146. ->map('url', $builder->fromParent())
  147. )
  148. );
  149. $registry->addFieldResolver('Textref', 'title',
  150. $builder->compose(
  151. $builder->produce('entity_label')
  152. ->map('entity', $builder->fromParent())
  153. ));
  154. $registry->addFieldResolver('Textref', 'texte',
  155. $builder->produce('property_path')
  156. ->map('type', $builder->fromValue('entity:node'))
  157. ->map('value', $builder->fromParent())
  158. ->map('path', $builder->fromValue('body.value'))
  159. );
  160. $registry->addFieldResolver('Textref', 'author',
  161. $builder->compose(
  162. $builder->produce('entity_owner')
  163. ->map('entity', $builder->fromParent()),
  164. $builder->produce('entity_label')
  165. ->map('entity', $builder->fromParent())
  166. ));
  167. $registry->addFieldResolver('Textref', 'text_en_rebond',
  168. $builder->compose(
  169. $builder->produce('entity_reference')
  170. ->map('entity', $builder->fromParent())
  171. ->map('field', $builder->fromValue('field_texte_en_rebond'))
  172. ));
  173. $registry->addFieldResolver('Textref', 'text_produits',
  174. $builder->compose(
  175. $builder->produce('entity_reference')
  176. ->map('entity', $builder->fromParent())
  177. ->map('field', $builder->fromValue('field_textes_produits'))
  178. ));
  179. $registry->addFieldResolver('Textref', 'images',
  180. $builder->produce('entity_reference')
  181. ->map('entity', $builder->fromParent())
  182. ->map('field', $builder->fromValue('field_images'))
  183. );
  184. $registry->addFieldResolver('Textref', 'videos',
  185. $builder->produce('property_path')
  186. ->map('type', $builder->fromValue('entity:node'))
  187. ->map('value', $builder->fromParent())
  188. ->map('path', $builder->fromValue('field_video'))
  189. );
  190. $registry->addFieldResolver('Textref', 'tags',
  191. $builder->produce('entity_reference')
  192. ->map('entity', $builder->fromParent())
  193. ->map('field', $builder->fromValue('field_tag'))
  194. );
  195. $registry->addFieldResolver('Textref', 'familles',
  196. $builder->produce('entity_reference')
  197. ->map('entity', $builder->fromParent())
  198. ->map('field', $builder->fromValue('field_famille'))
  199. );
  200. }
  201. // _____ _ ___ _
  202. // |_ _|____ _| |_| _ \_ _ ___ __| |
  203. // | |/ -_) \ / _| _/ '_/ _ \/ _` |
  204. // |_|\___/_\_\\__|_| |_| \___/\__,_|
  205. protected function addTextprod(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  206. // $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
  207. $registry->addFieldResolver('Query', 'textprod',
  208. $builder->produce('entity_load')
  209. ->map('type', $builder->fromValue('node'))
  210. ->map('bundles', $builder->fromValue(['texte_prod']))
  211. ->map('id', $builder->fromArgument('id'))
  212. );
  213. $registry->addFieldResolver('Query', 'textsprod',
  214. $builder->produce('entity_load_multiple')
  215. ->map('type', $builder->fromValue('node'))
  216. ->map('ids', $builder->fromArgument('ids'))
  217. );
  218. $registry->addFieldResolver('Textprod', 'id',
  219. $builder->produce('entity_id')
  220. ->map('entity', $builder->fromParent())
  221. );
  222. $registry->addFieldResolver('Textprod', 'uuid',
  223. $builder->produce('entity_uuid')
  224. ->map('entity', $builder->fromParent())
  225. );
  226. $registry->addFieldResolver('Textprod', 'path',
  227. $builder->compose(
  228. $builder->produce('entity_url')
  229. ->map('entity', $builder->fromParent()),
  230. $builder->produce('url_path')
  231. ->map('url', $builder->fromParent())
  232. )
  233. );
  234. $registry->addFieldResolver('Textprod', 'title',
  235. $builder->compose(
  236. $builder->produce('entity_label')
  237. ->map('entity', $builder->fromParent())
  238. ));
  239. $registry->addFieldResolver('Textprod', 'texte',
  240. $builder->produce('property_path')
  241. ->map('type', $builder->fromValue('entity:node'))
  242. ->map('value', $builder->fromParent())
  243. ->map('path', $builder->fromValue('body.value'))
  244. );
  245. $registry->addFieldResolver('Textprod', 'author',
  246. $builder->compose(
  247. $builder->produce('entity_owner')
  248. ->map('entity', $builder->fromParent()),
  249. $builder->produce('entity_label')
  250. ->map('entity', $builder->fromParent())
  251. ));
  252. $registry->addFieldResolver('Textprod', 'text_de_depart',
  253. $builder->compose(
  254. $builder->produce('entity_reference')
  255. ->map('entity', $builder->fromParent())
  256. ->map('field', $builder->fromValue('field_texte_de_depart'))
  257. ));
  258. $registry->addFieldResolver('Textprod', 'images',
  259. $builder->produce('entity_reference')
  260. ->map('entity', $builder->fromParent())
  261. ->map('field', $builder->fromValue('field_images'))
  262. );
  263. $registry->addFieldResolver('Textprod', 'videos',
  264. $builder->produce('property_path')
  265. ->map('type', $builder->fromValue('entity:node'))
  266. ->map('value', $builder->fromParent())
  267. ->map('path', $builder->fromValue('field_video'))
  268. );
  269. $registry->addFieldResolver('Textprod', 'tags',
  270. $builder->produce('entity_reference')
  271. ->map('entity', $builder->fromParent())
  272. ->map('field', $builder->fromValue('field_tag_prod'))
  273. );
  274. $registry->addFieldResolver('Textprod', 'familles',
  275. $builder->produce('entity_reference')
  276. ->map('entity', $builder->fromParent())
  277. ->map('field', $builder->fromValue('field_famille'))
  278. );
  279. }
  280. // ___ _
  281. // | \ __ _| |_ ___
  282. // | |) / _` | _/ -_)
  283. // |___/\__,_|\__\___|
  284. protected function addDate(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  285. $registry->addFieldResolver('Date', 'start',
  286. $builder->callback(function ($parent, $args) {
  287. return isset($parent[0]) ? $parent[0]['value'] : null;
  288. })
  289. );
  290. $registry->addFieldResolver('Date', 'end',
  291. $builder->callback(function ($parent, $args) {
  292. return isset($parent[0]) ? $parent[0]['end_value'] : null;
  293. })
  294. );
  295. }
  296. // ___ _ _ __ _ _ _
  297. // | __(_) |___ / _(_)___| |__| |
  298. // | _|| | / -_) _| / -_) / _` |
  299. // |_| |_|_\___|_| |_\___|_\__,_|
  300. protected function addFilefield(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  301. $registry->addFieldResolver('Filefield', 'description',
  302. $builder->callback(function ($parent, $args) {
  303. return $parent['description'];
  304. })
  305. );
  306. $registry->addFieldResolver('Filefield', 'file',
  307. $builder->callback(function ($parent, $args) {
  308. return \Drupal\file\Entity\File::load($parent['target_id']);
  309. })
  310. );
  311. }
  312. // ___ _ _
  313. // | __(_) |___
  314. // | _|| | / -_)
  315. // |_| |_|_\___|
  316. protected function addFile(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  317. $registry->addFieldResolver('File', 'url',
  318. $builder->callback(function ($parent, $args) {
  319. return $parent->url();
  320. })
  321. );
  322. $registry->addFieldResolver('File', 'filesize',
  323. $builder->callback(function ($parent, $args) {
  324. return $parent->getSize();
  325. })
  326. );
  327. $registry->addFieldResolver('File', 'filemime',
  328. $builder->callback(function ($parent, $args) {
  329. return $parent->getMimeType();
  330. })
  331. );
  332. $registry->addFieldResolver('File', 'filename',
  333. $builder->callback(function ($parent, $args) {
  334. return $parent->getFilename();
  335. })
  336. );
  337. $registry->addFieldResolver('File', 'fid',
  338. $builder->callback(function ($parent, $args) {
  339. return $parent->id();
  340. })
  341. );
  342. $registry->addFieldResolver('File', 'uuid',
  343. $builder->callback(function ($parent, $args) {
  344. return $parent->uuid();
  345. })
  346. );
  347. }
  348. // ___
  349. // |_ _|_ __ __ _ __ _ ___
  350. // | || ' \/ _` / _` / -_)
  351. // |___|_|_|_\__,_\__, \___|
  352. // |___/
  353. protected function addImage(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  354. $registry->addFieldResolver('Image', 'id',
  355. $builder->produce('entity_id')
  356. ->map('entity', $builder->fromParent())
  357. );
  358. $registry->addFieldResolver('Image', 'url',
  359. $builder->produce('image_url')
  360. ->map('entity', $builder->fromParent())
  361. );
  362. $registry->addFieldResolver('Image', 'alt',
  363. $builder->produce('property_path')
  364. ->map('type', $builder->fromValue('entity:node'))
  365. ->map('value', $builder->fromParent())
  366. ->map('path', $builder->fromValue('field_image.alt'))
  367. );
  368. $registry->addFieldResolver('Image', 'style_minicard',
  369. $builder->produce('image_derivative')
  370. ->map('entity', $builder->fromParent())
  371. ->map('style', $builder->fromValue('card_medium_half'))
  372. );
  373. $registry->addFieldResolver('Image', 'style_minicard_url',
  374. $builder->compose(
  375. $builder->produce('image_derivative')
  376. ->map('entity', $builder->fromParent())
  377. ->map('style', $builder->fromValue('card_medium_half')),
  378. $builder->callback(function($parent, $args){
  379. return $parent['url'];
  380. })
  381. ));
  382. $registry->addFieldResolver('Image', 'style_linkedmaterialcard',
  383. $builder->produce('image_derivative')
  384. ->map('entity', $builder->fromParent())
  385. ->map('style', $builder->fromValue('linkedmaterial_card'))
  386. );
  387. $registry->addFieldResolver('Image', 'style_linkedmaterialcard_url',
  388. $builder->compose(
  389. $builder->produce('image_derivative')
  390. ->map('entity', $builder->fromParent())
  391. ->map('style', $builder->fromValue('linkedmaterial_card')),
  392. $builder->callback(function($parent, $args){
  393. return $parent['url'];
  394. })
  395. ));
  396. $registry->addFieldResolver('Image', 'style_cardmedium',
  397. $builder->produce('image_derivative')
  398. ->map('entity', $builder->fromParent())
  399. ->map('style', $builder->fromValue('card_medium'))
  400. );
  401. $registry->addFieldResolver('Image', 'style_cardmedium_url',
  402. $builder->compose(
  403. $builder->produce('image_derivative')
  404. ->map('entity', $builder->fromParent())
  405. ->map('style', $builder->fromValue('card_medium')),
  406. $builder->callback(function($parent, $args){
  407. return $parent['url'];
  408. })
  409. ));
  410. $registry->addFieldResolver('Image', 'style_cardfull',
  411. $builder->produce('image_derivative')
  412. ->map('entity', $builder->fromParent())
  413. ->map('style', $builder->fromValue('card_full'))
  414. );
  415. $registry->addFieldResolver('Image', 'style_cardfull_url',
  416. $builder->compose(
  417. $builder->produce('image_derivative')
  418. ->map('entity', $builder->fromParent())
  419. ->map('style', $builder->fromValue('card_full')),
  420. $builder->callback(function($parent, $args){
  421. return $parent['url'];
  422. })
  423. ));
  424. $registry->addFieldResolver('Image', 'style_articlecardmedium',
  425. $builder->produce('image_derivative')
  426. ->map('entity', $builder->fromParent())
  427. ->map('style', $builder->fromValue('article_card_medium'))
  428. );
  429. $registry->addFieldResolver('Image', 'style_articlecardmedium_url',
  430. $builder->compose(
  431. $builder->produce('image_derivative')
  432. ->map('entity', $builder->fromParent())
  433. ->map('style', $builder->fromValue('article_card_medium')),
  434. $builder->callback(function($parent, $args){
  435. return $parent['url'];
  436. })
  437. ));
  438. $registry->addFieldResolver('Image', 'style_hd',
  439. $builder->produce('image_derivative')
  440. ->map('entity', $builder->fromParent())
  441. ->map('style', $builder->fromValue('hd'))
  442. );
  443. $registry->addFieldResolver('Image', 'style_hd_url',
  444. $builder->compose(
  445. $builder->produce('image_derivative')
  446. ->map('entity', $builder->fromParent())
  447. ->map('style', $builder->fromValue('hd')),
  448. $builder->callback(function($parent, $args){
  449. return $parent['url'];
  450. })
  451. ));
  452. }
  453. // __ ___ _ _ _ _
  454. // \ \ / (_)__| |___ ___| | (_)_ _ | |__
  455. // \ V /| / _` / -_) _ \ |__| | ' \| / /
  456. // \_/ |_\__,_\___\___/____|_|_||_|_\_\
  457. protected function addVideolink(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  458. $registry->addFieldResolver('VideoLink', 'url',
  459. $builder->produce('property_path')
  460. ->map('type', $builder->fromValue('field_item:video_embed_field'))
  461. ->map('value', $builder->fromParent())
  462. ->map('path', $builder->fromValue('value'))
  463. );
  464. }
  465. // _____
  466. // |_ _|_ _ __ _
  467. // | |/ _` / _` |
  468. // |_|\__,_\__, |
  469. // |___/
  470. protected function addTaxoterm(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  471. $registry->addFieldResolver('Query', 'tag',
  472. $builder->produce('entity_load')
  473. ->map('type', $builder->fromValue('taxonomy_term'))
  474. ->map('bundles', $builder->fromValue(['tag']))
  475. ->map('id', $builder->fromArgument('id'))
  476. );
  477. $registry->addFieldResolver('Query', 'famille',
  478. $builder->produce('entity_load')
  479. ->map('type', $builder->fromValue('taxonomy_term'))
  480. ->map('bundles', $builder->fromValue(['famille']))
  481. ->map('id', $builder->fromArgument('id'))
  482. );
  483. $registry->addFieldResolver('Query', 'tagprod',
  484. $builder->produce('entity_load')
  485. ->map('type', $builder->fromValue('taxonomy_term'))
  486. ->map('bundles', $builder->fromValue(['tag_prod']))
  487. ->map('id', $builder->fromArgument('id'))
  488. );
  489. $registry->addFieldResolver('Taxoterm', 'id',
  490. $builder->produce('entity_id')
  491. ->map('entity', $builder->fromParent())
  492. );
  493. $registry->addFieldResolver('Taxoterm', 'uuid',
  494. $builder->produce('entity_uuid')
  495. ->map('entity', $builder->fromParent())
  496. );
  497. $registry->addFieldResolver('Taxoterm', 'name',
  498. $builder->produce('entity_label')
  499. ->map('entity', $builder->fromParent())
  500. );
  501. }
  502. }