EnFrSchemaExtension.php 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963
  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->addTexts($registry, $builder);
  26. $this->addTextsdepart($registry, $builder);
  27. $this->addTextref($registry, $builder);
  28. $this->addTextprod($registry, $builder);
  29. $this->addNote($registry, $builder);
  30. $this->addNoteProd($registry, $builder);
  31. $this->addCreation($registry, $builder);
  32. //
  33. $this->addFilefield($registry, $builder);
  34. //
  35. $this->addFile($registry, $builder);
  36. //
  37. $this->addDate($registry, $builder);
  38. //
  39. $this->addVideolink($registry, $builder);
  40. //
  41. $this->addImage($registry, $builder);
  42. //
  43. $this->addTaxoterm($registry, $builder);
  44. //
  45. $this->addAuteur($registry, $builder);
  46. //
  47. // $this->addNote($registry, $builder);
  48. //
  49. // $this->addSearchResult($registry, $builder);
  50. //
  51. // $this->addSample($registry, $builder);
  52. //
  53. // $this->addArticle($registry, $builder);
  54. //
  55. // $this->addThematique($registry, $builder);
  56. //
  57. // $this->addCompany($registry, $builder);
  58. //
  59. // $this->addProduct($registry, $builder);
  60. //
  61. // $this->addVariation($registry, $builder);
  62. //
  63. // $this->addPrice($registry, $builder);
  64. //
  65. // $this->addAddress($registry, $builder);
  66. //
  67. $this->addLink($registry, $builder);
  68. //
  69. // $this->addShowroom($registry, $builder);
  70. //
  71. // $this->addThesaurus($registry, $builder);
  72. //
  73. }
  74. // ___ _
  75. // | _ \___ _ _| |_ ___
  76. // | / _ \ || | _/ -_)
  77. // |_|_\___/\_,_|\__\___|
  78. protected function addRouteResolver(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  79. // Tell GraphQL how to resolve types of a common interface.
  80. $registry->addTypeResolver('NodeInterface', function ($value) {
  81. $path = explode('\\', get_class($value));
  82. $class = array_pop($path);
  83. if ($class === 'Node') {
  84. switch ($value->bundle()) {
  85. case 'texte': return 'Textref';
  86. case 'texte_prod': return 'Textprod';
  87. }
  88. }
  89. throw new Error('Could not resolve content type.');
  90. });
  91. $registry->addFieldResolver('Query', 'route',
  92. $builder->compose(
  93. $builder->produce('route_load')
  94. ->map('path', $builder->fromArgument('path')),
  95. $builder->produce('route_entity')
  96. ->map('url', $builder->fromParent())
  97. ));
  98. }
  99. // _____ _
  100. // |_ _|____ _| |_ ___
  101. // | |/ -_) \ / _(_-<
  102. // |_|\___/_\_\\__/__/
  103. protected function addTexts(ResolverRegistryInterface $registry, ResolverBuilder $builder){
  104. // Tell GraphQL how to resolve types of a common interface.
  105. $registry->addTypeResolver('TextInterface', function ($value) {
  106. switch ($value->bundle()) {
  107. case 'texte': return 'Textref';
  108. case 'texte_prod': return 'Textprod';
  109. }
  110. throw new Error('Could not resolve content type.');
  111. });
  112. $registry->addFieldResolver('Query', 'texts',
  113. $builder->compose(
  114. $builder->callback(function($parent, $arg){
  115. $entity_storage = \Drupal::entityTypeManager()->getStorage('node');
  116. $query = $entity_storage->getQuery()
  117. ->condition('type', ['texte', 'texte_prod'], 'IN')
  118. ->accessCheck(TRUE);
  119. $results = $query->execute();
  120. return $results;
  121. }),
  122. $builder->produce('entity_load_multiple')
  123. ->map('type', $builder->fromValue('node'))
  124. ->map('ids', $builder->fromParent())
  125. )
  126. );
  127. $registry->addFieldResolver('Query', 'texte',
  128. $builder->produce('entity_load')
  129. ->map('type', $builder->fromValue('node'))
  130. ->map('id', $builder->fromArgument('id'))
  131. );
  132. }
  133. // _____ _ ___ _
  134. // |_ _|____ _| |_ ___ | \ ___ _ __ __ _ _ _| |_
  135. // | |/ -_) \ / _(_-< | |) / -_) '_ \/ _` | '_| _|
  136. // |_|\___/_\_\\__/__/ |___/\___| .__/\__,_|_| \__|
  137. // |_|
  138. protected function addTextsdepart(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  139. $registry->addFieldResolver('Query', 'textsdepart',
  140. $builder->compose(
  141. $builder->callback(function($parent, $arg){
  142. $entity_storage = \Drupal::entityTypeManager()->getStorage('node');
  143. $query = $entity_storage->getQuery()
  144. ->condition('type', 'texte')
  145. ->condition('field_famille', 9)
  146. ->accessCheck(TRUE);
  147. $results = $query->execute();
  148. return $results;
  149. }),
  150. $builder->produce('entity_load_multiple')
  151. ->map('type', $builder->fromValue('node'))
  152. ->map('ids', $builder->fromParent())
  153. )
  154. );
  155. }
  156. // _____ _ __
  157. // |_ _|____ _| |_ _ _ ___ / _|
  158. // | |/ -_) \ / _| '_/ -_) _|
  159. // |_|\___/_\_\\__|_| \___|_|
  160. protected function addTextref(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  161. // $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
  162. $registry->addFieldResolver('Query', 'textref',
  163. $builder->produce('entity_load')
  164. ->map('type', $builder->fromValue('node'))
  165. ->map('bundles', $builder->fromValue(['texte']))
  166. ->map('id', $builder->fromArgument('id'))
  167. );
  168. $registry->addFieldResolver('Query', 'textsref',
  169. $builder->produce('entity_load_multiple')
  170. ->map('type', $builder->fromValue('node'))
  171. ->map('ids', $builder->fromArgument('ids'))
  172. );
  173. $registry->addFieldResolver('Textref', 'id',
  174. $builder->produce('entity_id')
  175. ->map('entity', $builder->fromParent())
  176. );
  177. $registry->addFieldResolver('Textref', 'uuid',
  178. $builder->produce('entity_uuid')
  179. ->map('entity', $builder->fromParent())
  180. );
  181. $registry->addFieldResolver('Textref', 'path',
  182. $builder->compose(
  183. $builder->produce('entity_url')
  184. ->map('entity', $builder->fromParent()),
  185. $builder->produce('url_path')
  186. ->map('url', $builder->fromParent())
  187. )
  188. );
  189. $registry->addFieldResolver('Textref', 'title',
  190. $builder->compose(
  191. $builder->produce('entity_label')
  192. ->map('entity', $builder->fromParent())
  193. ));
  194. $registry->addFieldResolver('Textref', 'bundle',
  195. $builder->compose(
  196. $builder->produce('entity_bundle')
  197. ->map('entity', $builder->fromParent())
  198. ));
  199. $registry->addFieldResolver('Textref', 'texte',
  200. $builder->produce('property_path')
  201. ->map('type', $builder->fromValue('entity:node'))
  202. ->map('value', $builder->fromParent())
  203. ->map('path', $builder->fromValue('body.value'))
  204. );
  205. $registry->addFieldResolver('Textref', 'author',
  206. $builder->compose(
  207. $builder->produce('entity_owner')
  208. ->map('entity', $builder->fromParent()),
  209. $builder->produce('entity_label')
  210. ->map('entity', $builder->fromParent())
  211. ));
  212. $registry->addFieldResolver('Textref', 'text_en_rebond',
  213. $builder->compose(
  214. $builder->produce('entity_reference')
  215. ->map('entity', $builder->fromParent())
  216. ->map('field', $builder->fromValue('field_texte_en_rebond'))
  217. ));
  218. $registry->addFieldResolver('Textref', 'text_produits',
  219. $builder->compose(
  220. $builder->produce('entity_reference')
  221. ->map('entity', $builder->fromParent())
  222. ->map('field', $builder->fromValue('field_textes_produits'))
  223. ));
  224. $registry->addFieldResolver('Textref', 'images',
  225. $builder->produce('entity_reference')
  226. ->map('entity', $builder->fromParent())
  227. ->map('field', $builder->fromValue('field_images'))
  228. );
  229. $registry->addFieldResolver('Textref', 'videos',
  230. $builder->produce('property_path')
  231. ->map('type', $builder->fromValue('entity:node'))
  232. ->map('value', $builder->fromParent())
  233. ->map('path', $builder->fromValue('field_video'))
  234. );
  235. $registry->addFieldResolver('Textref', 'tags',
  236. $builder->produce('entity_reference')
  237. ->map('entity', $builder->fromParent())
  238. ->map('field', $builder->fromValue('field_tag'))
  239. );
  240. $registry->addFieldResolver('Textref', 'familles',
  241. $builder->produce('entity_reference')
  242. ->map('entity', $builder->fromParent())
  243. ->map('field', $builder->fromValue('field_famille'))
  244. );
  245. $registry->addFieldResolver('Textref', 'degres_detrangement',
  246. $builder->produce('property_path')
  247. ->map('type', $builder->fromValue('entity:node'))
  248. ->map('value', $builder->fromParent())
  249. ->map('path', $builder->fromValue('degres_detrangement'))
  250. );
  251. $registry->addFieldResolver('Textref', 'field_titre_regular',
  252. $builder->produce('property_path')
  253. ->map('type', $builder->fromValue('entity:node'))
  254. ->map('value', $builder->fromParent())
  255. ->map('path', $builder->fromValue('field_titre_regular.value'))
  256. );
  257. $registry->addFieldResolver('Textref', 'field_titre_italique',
  258. $builder->produce('property_path')
  259. ->map('type', $builder->fromValue('entity:node'))
  260. ->map('value', $builder->fromParent())
  261. ->map('path', $builder->fromValue('field_titre.value'))
  262. );
  263. $registry->addFieldResolver('Textref', 'auteurs',
  264. $builder->produce('entity_reference')
  265. ->map('entity', $builder->fromParent())
  266. ->map('field', $builder->fromValue('field_auteurs'))
  267. );
  268. $registry->addFieldResolver('Textref', 'edition',
  269. $builder->produce('entity_reference')
  270. ->map('entity', $builder->fromParent())
  271. ->map('field', $builder->fromValue('field_edition'))
  272. );
  273. $registry->addFieldResolver('Textref', 'lien_reference',
  274. $builder->produce('property_path')
  275. ->map('type', $builder->fromValue('entity:node'))
  276. ->map('value', $builder->fromParent())
  277. ->map('path', $builder->fromValue('field_lien_reference'))
  278. );
  279. $registry->addFieldResolver('Textref', 'fichiers',
  280. $builder->produce('entity_reference')
  281. ->map('entity', $builder->fromParent())
  282. ->map('field', $builder->fromValue('field_fichier'))
  283. );
  284. $registry->addFieldResolver('Textref', 'notes',
  285. $builder->produce('entity_reference_revisions')
  286. ->map('entity', $builder->fromParent())
  287. ->map('field', $builder->fromValue('field_notes'))
  288. );
  289. }
  290. // _____ _ ___ _
  291. // |_ _|____ _| |_| _ \_ _ ___ __| |
  292. // | |/ -_) \ / _| _/ '_/ _ \/ _` |
  293. // |_|\___/_\_\\__|_| |_| \___/\__,_|
  294. protected function addTextprod(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  295. // $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
  296. $registry->addFieldResolver('Query', 'textprod',
  297. $builder->produce('entity_load')
  298. ->map('type', $builder->fromValue('node'))
  299. ->map('bundles', $builder->fromValue(['texte_prod']))
  300. ->map('id', $builder->fromArgument('id'))
  301. );
  302. $registry->addFieldResolver('Query', 'textsprod',
  303. $builder->produce('entity_load_multiple')
  304. ->map('type', $builder->fromValue('node'))
  305. ->map('ids', $builder->fromArgument('ids'))
  306. );
  307. $registry->addFieldResolver('Textprod', 'id',
  308. $builder->produce('entity_id')
  309. ->map('entity', $builder->fromParent())
  310. );
  311. $registry->addFieldResolver('Textprod', 'uuid',
  312. $builder->produce('entity_uuid')
  313. ->map('entity', $builder->fromParent())
  314. );
  315. $registry->addFieldResolver('Textprod', 'path',
  316. $builder->compose(
  317. $builder->produce('entity_url')
  318. ->map('entity', $builder->fromParent()),
  319. $builder->produce('url_path')
  320. ->map('url', $builder->fromParent())
  321. )
  322. );
  323. $registry->addFieldResolver('Textprod', 'title',
  324. $builder->compose(
  325. $builder->produce('entity_label')
  326. ->map('entity', $builder->fromParent())
  327. ));
  328. $registry->addFieldResolver('Textprod', 'bundle',
  329. $builder->compose(
  330. $builder->produce('entity_bundle')
  331. ->map('entity', $builder->fromParent())
  332. ));
  333. $registry->addFieldResolver('Textprod', 'texte',
  334. $builder->produce('property_path')
  335. ->map('type', $builder->fromValue('entity:node'))
  336. ->map('value', $builder->fromParent())
  337. ->map('path', $builder->fromValue('body.value'))
  338. );
  339. $registry->addFieldResolver('Textprod', 'author',
  340. $builder->compose(
  341. $builder->produce('entity_owner')
  342. ->map('entity', $builder->fromParent()),
  343. $builder->produce('entity_label')
  344. ->map('entity', $builder->fromParent())
  345. ));
  346. $registry->addFieldResolver('Textprod', 'text_de_depart',
  347. $builder->compose(
  348. $builder->produce('entity_reference')
  349. ->map('entity', $builder->fromParent())
  350. ->map('field', $builder->fromValue('field_texte_de_depart'))
  351. ));
  352. $registry->addFieldResolver('Textprod', 'text_en_rebond',
  353. $builder->compose(
  354. $builder->produce('entity_reference')
  355. ->map('entity', $builder->fromParent())
  356. ->map('field', $builder->fromValue('field_texte_en_rebond'))
  357. ));
  358. $registry->addFieldResolver('Textprod', 'images',
  359. $builder->produce('entity_reference')
  360. ->map('entity', $builder->fromParent())
  361. ->map('field', $builder->fromValue('field_images'))
  362. );
  363. $registry->addFieldResolver('Textprod', 'videos',
  364. $builder->produce('property_path')
  365. ->map('type', $builder->fromValue('entity:node'))
  366. ->map('value', $builder->fromParent())
  367. ->map('path', $builder->fromValue('field_video'))
  368. );
  369. $registry->addFieldResolver('Textprod', 'tags',
  370. $builder->produce('entity_reference')
  371. ->map('entity', $builder->fromParent())
  372. ->map('field', $builder->fromValue('field_tag_prod'))
  373. );
  374. $registry->addFieldResolver('Textprod', 'familles',
  375. $builder->produce('entity_reference')
  376. ->map('entity', $builder->fromParent())
  377. ->map('field', $builder->fromValue('field_famille'))
  378. );
  379. //
  380. // $registry->addFieldResolver('Textprod', 'field_titre',
  381. // $builder->produce('property_path')
  382. // ->map('type', $builder->fromValue('entity:node'))
  383. // ->map('value', $builder->fromParent())
  384. // ->map('path', $builder->fromValue('field_titre'))
  385. // );
  386. $registry->addFieldResolver('Textprod', 'auteurs',
  387. $builder->produce('entity_reference')
  388. ->map('entity', $builder->fromParent())
  389. ->map('field', $builder->fromValue('field_auteurs'))
  390. );
  391. //
  392. // $registry->addFieldResolver('Textprod', 'edition',
  393. // $builder->produce('entity_reference')
  394. // ->map('entity', $builder->fromParent())
  395. // ->map('field', $builder->fromValue('field_edition'))
  396. // );
  397. $registry->addFieldResolver('Textprod', 'notes',
  398. $builder->produce('entity_reference_revisions')
  399. ->map('entity', $builder->fromParent())
  400. ->map('field', $builder->fromValue('field_notes_prod'))
  401. );
  402. }
  403. // _ _ _
  404. // | \| |___| |_ ___
  405. // | .` / _ \ _/ -_)
  406. // |_|\_\___/\__\___|
  407. protected function addNote(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  408. $registry->addFieldResolver('Noteref', 'note',
  409. $builder->produce('property_path')
  410. ->map('type', $builder->fromValue('entity:paragraph'))
  411. ->map('value', $builder->fromParent())
  412. ->map('path', $builder->fromValue('field_note.value'))
  413. );
  414. $registry->addFieldResolver('Noteref', 'numero',
  415. $builder->produce('property_path')
  416. ->map('type', $builder->fromValue('entity:paragraph'))
  417. ->map('value', $builder->fromParent())
  418. ->map('path', $builder->fromValue('field_numero.value'))
  419. );
  420. }
  421. protected function addNoteProd(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  422. $registry->addFieldResolver('Noteprod', 'note',
  423. $builder->produce('property_path')
  424. ->map('type', $builder->fromValue('entity:paragraph'))
  425. ->map('value', $builder->fromParent())
  426. ->map('path', $builder->fromValue('field_note.value'))
  427. );
  428. $registry->addFieldResolver('Noteprod', 'numero',
  429. $builder->produce('property_path')
  430. ->map('type', $builder->fromValue('entity:paragraph'))
  431. ->map('value', $builder->fromParent())
  432. ->map('path', $builder->fromValue('field_numero.value'))
  433. );
  434. $registry->addFieldResolver('Noteprod', 'liens',
  435. $builder->produce('entity_reference')
  436. ->map('entity', $builder->fromParent())
  437. ->map('field', $builder->fromValue('field_text_lien'))
  438. );
  439. }
  440. // ___ _ _
  441. // / __|_ _ ___ __ _| |_(_)___ _ _
  442. // | (__| '_/ -_) _` | _| / _ \ ' \
  443. // \___|_| \___\__,_|\__|_\___/_||_|
  444. protected function addCreation(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  445. $registry->addFieldResolver('Query', 'allcreations',
  446. $builder->compose(
  447. $builder->callback(function($parent, $arg){
  448. $entity_storage = \Drupal::entityTypeManager()->getStorage('node');
  449. $query = $entity_storage->getQuery()
  450. ->condition('type', ['creation'], 'IN')
  451. ->accessCheck(TRUE);
  452. $results = $query->execute();
  453. return $results;
  454. }),
  455. $builder->produce('entity_load_multiple')
  456. ->map('type', $builder->fromValue('node'))
  457. ->map('ids', $builder->fromParent())
  458. )
  459. );
  460. $registry->addFieldResolver('Query', 'creations',
  461. $builder->produce('entity_load_multiple')
  462. ->map('type', $builder->fromValue('node'))
  463. ->map('ids', $builder->fromArgument('ids'))
  464. );
  465. $registry->addFieldResolver('Query', 'creation',
  466. $builder->produce('entity_load')
  467. ->map('type', $builder->fromValue('node'))
  468. ->map('bundles', $builder->fromValue(['texte_prod']))
  469. ->map('id', $builder->fromArgument('id'))
  470. );
  471. $registry->addFieldResolver('Creation', 'id',
  472. $builder->produce('entity_id')
  473. ->map('entity', $builder->fromParent())
  474. );
  475. $registry->addFieldResolver('Creation', 'uuid',
  476. $builder->produce('entity_uuid')
  477. ->map('entity', $builder->fromParent())
  478. );
  479. $registry->addFieldResolver('Creation', 'path',
  480. $builder->compose(
  481. $builder->produce('entity_url')
  482. ->map('entity', $builder->fromParent()),
  483. $builder->produce('url_path')
  484. ->map('url', $builder->fromParent())
  485. )
  486. );
  487. $registry->addFieldResolver('Creation', 'title',
  488. $builder->compose(
  489. $builder->produce('entity_label')
  490. ->map('entity', $builder->fromParent())
  491. ));
  492. $registry->addFieldResolver('Creation', 'bundle',
  493. $builder->compose(
  494. $builder->produce('entity_bundle')
  495. ->map('entity', $builder->fromParent())
  496. ));
  497. $registry->addFieldResolver('Creation', 'texte',
  498. $builder->produce('property_path')
  499. ->map('type', $builder->fromValue('entity:node'))
  500. ->map('value', $builder->fromParent())
  501. ->map('path', $builder->fromValue('body.value'))
  502. );
  503. $registry->addFieldResolver('Creation', 'author',
  504. $builder->compose(
  505. $builder->produce('entity_owner')
  506. ->map('entity', $builder->fromParent()),
  507. $builder->produce('entity_label')
  508. ->map('entity', $builder->fromParent())
  509. ));
  510. $registry->addFieldResolver('Creation', 'auteurs',
  511. $builder->produce('entity_reference')
  512. ->map('entity', $builder->fromParent())
  513. ->map('field', $builder->fromValue('field_auteurs'))
  514. );
  515. $registry->addFieldResolver('Creation', 'oeuvre',
  516. $builder->produce('property_path')
  517. ->map('type', $builder->fromValue('entity:node'))
  518. ->map('value', $builder->fromParent())
  519. ->map('path', $builder->fromValue('field_oeuvre'))
  520. );
  521. }
  522. // ___ _
  523. // | \ __ _| |_ ___
  524. // | |) / _` | _/ -_)
  525. // |___/\__,_|\__\___|
  526. protected function addDate(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  527. $registry->addFieldResolver('Date', 'start',
  528. $builder->callback(function ($parent, $args) {
  529. return isset($parent[0]) ? $parent[0]['value'] : null;
  530. })
  531. );
  532. $registry->addFieldResolver('Date', 'end',
  533. $builder->callback(function ($parent, $args) {
  534. return isset($parent[0]) ? $parent[0]['end_value'] : null;
  535. })
  536. );
  537. }
  538. // ___ _ _ __ _ _ _
  539. // | __(_) |___ / _(_)___| |__| |
  540. // | _|| | / -_) _| / -_) / _` |
  541. // |_| |_|_\___|_| |_\___|_\__,_|
  542. protected function addFilefield(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  543. $registry->addFieldResolver('Filefield', 'description',
  544. $builder->callback(function ($parent, $args) {
  545. return $parent['description'];
  546. })
  547. );
  548. $registry->addFieldResolver('Filefield', 'file',
  549. $builder->callback(function ($parent, $args) {
  550. return \Drupal\file\Entity\File::load($parent['target_id']);
  551. })
  552. );
  553. }
  554. // ___ _ _
  555. // | __(_) |___
  556. // | _|| | / -_)
  557. // |_| |_|_\___|
  558. protected function addFile(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  559. $registry->addFieldResolver('File', 'url',
  560. $builder->callback(function ($parent, $args) {
  561. return $parent->createFileUrl();
  562. })
  563. );
  564. $registry->addFieldResolver('File', 'filesize',
  565. $builder->callback(function ($parent, $args) {
  566. return $parent->getSize();
  567. })
  568. );
  569. $registry->addFieldResolver('File', 'filemime',
  570. $builder->callback(function ($parent, $args) {
  571. return $parent->getMimeType();
  572. })
  573. );
  574. $registry->addFieldResolver('File', 'filename',
  575. $builder->callback(function ($parent, $args) {
  576. return $parent->getFilename();
  577. })
  578. );
  579. $registry->addFieldResolver('File', 'fid',
  580. $builder->callback(function ($parent, $args) {
  581. return $parent->id();
  582. })
  583. );
  584. $registry->addFieldResolver('File', 'uuid',
  585. $builder->callback(function ($parent, $args) {
  586. return $parent->uuid();
  587. })
  588. );
  589. }
  590. // ___
  591. // |_ _|_ __ __ _ __ _ ___
  592. // | || ' \/ _` / _` / -_)
  593. // |___|_|_|_\__,_\__, \___|
  594. // |___/
  595. protected function addImage(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  596. $registry->addFieldResolver('Image', 'id',
  597. $builder->produce('entity_id')
  598. ->map('entity', $builder->fromParent())
  599. );
  600. $registry->addFieldResolver('Image', 'url',
  601. $builder->produce('image_url')
  602. ->map('entity', $builder->fromParent())
  603. );
  604. $registry->addFieldResolver('Image', 'alt',
  605. $builder->produce('property_path')
  606. ->map('type', $builder->fromValue('entity:node'))
  607. ->map('value', $builder->fromParent())
  608. ->map('path', $builder->fromValue('field_image.alt'))
  609. );
  610. $registry->addFieldResolver('Image', 'style_minicard',
  611. $builder->produce('image_derivative')
  612. ->map('entity', $builder->fromParent())
  613. ->map('style', $builder->fromValue('card_medium_half'))
  614. );
  615. $registry->addFieldResolver('Image', 'style_minicard_url',
  616. $builder->compose(
  617. $builder->produce('image_derivative')
  618. ->map('entity', $builder->fromParent())
  619. ->map('style', $builder->fromValue('card_medium_half')),
  620. $builder->callback(function($parent, $args){
  621. return $parent['url'];
  622. })
  623. ));
  624. $registry->addFieldResolver('Image', 'style_linkedmaterialcard',
  625. $builder->produce('image_derivative')
  626. ->map('entity', $builder->fromParent())
  627. ->map('style', $builder->fromValue('linkedmaterial_card'))
  628. );
  629. $registry->addFieldResolver('Image', 'style_linkedmaterialcard_url',
  630. $builder->compose(
  631. $builder->produce('image_derivative')
  632. ->map('entity', $builder->fromParent())
  633. ->map('style', $builder->fromValue('linkedmaterial_card')),
  634. $builder->callback(function($parent, $args){
  635. return $parent['url'];
  636. })
  637. ));
  638. $registry->addFieldResolver('Image', 'style_cardmedium',
  639. $builder->produce('image_derivative')
  640. ->map('entity', $builder->fromParent())
  641. ->map('style', $builder->fromValue('card_medium'))
  642. );
  643. $registry->addFieldResolver('Image', 'style_cardmedium_url',
  644. $builder->compose(
  645. $builder->produce('image_derivative')
  646. ->map('entity', $builder->fromParent())
  647. ->map('style', $builder->fromValue('card_medium')),
  648. $builder->callback(function($parent, $args){
  649. return $parent['url'];
  650. })
  651. ));
  652. $registry->addFieldResolver('Image', 'style_cardfull',
  653. $builder->produce('image_derivative')
  654. ->map('entity', $builder->fromParent())
  655. ->map('style', $builder->fromValue('card_full'))
  656. );
  657. $registry->addFieldResolver('Image', 'style_cardfull_url',
  658. $builder->compose(
  659. $builder->produce('image_derivative')
  660. ->map('entity', $builder->fromParent())
  661. ->map('style', $builder->fromValue('card_full')),
  662. $builder->callback(function($parent, $args){
  663. return $parent['url'];
  664. })
  665. ));
  666. $registry->addFieldResolver('Image', 'style_articlecardmedium',
  667. $builder->produce('image_derivative')
  668. ->map('entity', $builder->fromParent())
  669. ->map('style', $builder->fromValue('article_card_medium'))
  670. );
  671. $registry->addFieldResolver('Image', 'style_articlecardmedium_url',
  672. $builder->compose(
  673. $builder->produce('image_derivative')
  674. ->map('entity', $builder->fromParent())
  675. ->map('style', $builder->fromValue('article_card_medium')),
  676. $builder->callback(function($parent, $args){
  677. return $parent['url'];
  678. })
  679. ));
  680. $registry->addFieldResolver('Image', 'style_hd',
  681. $builder->produce('image_derivative')
  682. ->map('entity', $builder->fromParent())
  683. ->map('style', $builder->fromValue('hd'))
  684. );
  685. $registry->addFieldResolver('Image', 'style_hd_url',
  686. $builder->compose(
  687. $builder->produce('image_derivative')
  688. ->map('entity', $builder->fromParent())
  689. ->map('style', $builder->fromValue('hd')),
  690. $builder->callback(function($parent, $args){
  691. return $parent['url'];
  692. })
  693. ));
  694. }
  695. // __ ___ _ _ _ _
  696. // \ \ / (_)__| |___ ___| | (_)_ _ | |__
  697. // \ V /| / _` / -_) _ \ |__| | ' \| / /
  698. // \_/ |_\__,_\___\___/____|_|_||_|_\_\
  699. protected function addVideolink(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  700. $registry->addFieldResolver('VideoLink', 'url',
  701. $builder->produce('property_path')
  702. ->map('type', $builder->fromValue('field_item:video_embed_field'))
  703. ->map('value', $builder->fromParent())
  704. ->map('path', $builder->fromValue('value'))
  705. );
  706. }
  707. // _____
  708. // |_ _|_ _ __ _
  709. // | |/ _` / _` |
  710. // |_|\__,_\__, |
  711. // |___/
  712. protected function addTaxoterm(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  713. $registry->addFieldResolver('Query', 'alltags',
  714. $builder->compose(
  715. $builder->callback(function($parent, $arg){
  716. $entity_storage = \Drupal::entityTypeManager()->getStorage('taxonomy_term');
  717. $query = $entity_storage->getQuery()
  718. ->condition('vid', ['tag','tag_prod'], 'IN')
  719. ->accessCheck(TRUE);
  720. $results = $query->execute();
  721. return $results;
  722. }),
  723. $builder->produce('entity_load_multiple')
  724. ->map('type', $builder->fromValue('taxonomy_term'))
  725. ->map('ids', $builder->fromParent())
  726. )
  727. );
  728. $registry->addFieldResolver('Query', 'tag',
  729. $builder->produce('entity_load')
  730. ->map('type', $builder->fromValue('taxonomy_term'))
  731. ->map('bundles', $builder->fromValue(['tag']))
  732. ->map('id', $builder->fromArgument('id'))
  733. );
  734. $registry->addFieldResolver('Query', 'famille',
  735. $builder->produce('entity_load')
  736. ->map('type', $builder->fromValue('taxonomy_term'))
  737. ->map('bundles', $builder->fromValue(['famille']))
  738. ->map('id', $builder->fromArgument('id'))
  739. );
  740. $registry->addFieldResolver('Query', 'tagprod',
  741. $builder->produce('entity_load')
  742. ->map('type', $builder->fromValue('taxonomy_term'))
  743. ->map('bundles', $builder->fromValue(['tag_prod']))
  744. ->map('id', $builder->fromArgument('id'))
  745. );
  746. $registry->addFieldResolver('Taxoterm', 'id',
  747. $builder->produce('entity_id')
  748. ->map('entity', $builder->fromParent())
  749. );
  750. $registry->addFieldResolver('Taxoterm', 'uuid',
  751. $builder->produce('entity_uuid')
  752. ->map('entity', $builder->fromParent())
  753. );
  754. $registry->addFieldResolver('Taxoterm', 'name',
  755. $builder->produce('entity_label')
  756. ->map('entity', $builder->fromParent())
  757. );
  758. $registry->addFieldResolver('Taxoterm', 'vocabulary',
  759. $builder->produce('entity_bundle')
  760. ->map('entity', $builder->fromParent())
  761. );
  762. }
  763. protected function addAuteur(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  764. $registry->addFieldResolver('Query', 'allauteurs',
  765. $builder->compose(
  766. $builder->callback(function($parent, $arg){
  767. $entity_storage = \Drupal::entityTypeManager()->getStorage('taxonomy_term');
  768. $query = $entity_storage->getQuery()
  769. ->condition('vid', 'auteurs')
  770. ->accessCheck(TRUE);
  771. $results = $query->execute();
  772. return $results;
  773. }),
  774. $builder->produce('entity_load_multiple')
  775. ->map('type', $builder->fromValue('taxonomy_term'))
  776. ->map('ids', $builder->fromParent())
  777. )
  778. );
  779. $registry->addFieldResolver('Query', 'auteur',
  780. $builder->produce('entity_load')
  781. ->map('type', $builder->fromValue('taxonomy_term'))
  782. ->map('bundles', $builder->fromValue(['auteurs']))
  783. ->map('id', $builder->fromArgument('id'))
  784. );
  785. $registry->addFieldResolver('Auteur', 'id',
  786. $builder->produce('entity_id')
  787. ->map('entity', $builder->fromParent())
  788. );
  789. $registry->addFieldResolver('Auteur', 'uuid',
  790. $builder->produce('entity_uuid')
  791. ->map('entity', $builder->fromParent())
  792. );
  793. $registry->addFieldResolver('Auteur', 'name',
  794. $builder->produce('entity_label')
  795. ->map('entity', $builder->fromParent())
  796. );
  797. $registry->addFieldResolver('Auteur', 'first_name',
  798. $builder->produce('property_path')
  799. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  800. ->map('value', $builder->fromParent())
  801. ->map('path', $builder->fromValue('field_prenom.value'))
  802. );
  803. $registry->addFieldResolver('Auteur', 'last_name',
  804. $builder->produce('property_path')
  805. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  806. ->map('value', $builder->fromParent())
  807. ->map('path', $builder->fromValue('field_nom.value'))
  808. );
  809. }
  810. // _ _ _
  811. // | | (_)_ _ | |__
  812. // | |__| | ' \| / /
  813. // |____|_|_||_|_\_\
  814. protected function addLink(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  815. $registry->addFieldResolver('Link', 'url',
  816. $builder->callback(function ($parent, $args) {
  817. return isset($parent[0]) ? $parent[0]['uri'] : null;
  818. })
  819. );
  820. $registry->addFieldResolver('Link', 'title',
  821. $builder->callback(function ($parent, $args) {
  822. return isset($parent[0]) ? $parent[0]['title'] : null;
  823. })
  824. );
  825. }
  826. }