MaterioDecoupledLanguageLinks.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace Drupal\materio_decoupled\Controller;
  3. use Drupal\Core\Controller\ControllerBase;
  4. use Symfony\Component\DependencyInjection\ContainerInterface;
  5. use Drupal\Core\Language\LanguageManagerInterface;
  6. use Drupal\Core\Url;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. /**
  10. * Class AjaxHomeController.
  11. */
  12. class MaterioDecoupledLanguageLinks extends ControllerBase {
  13. /*
  14. * @var \Drupal\Core\Entity\EntityTypeManagerInterface
  15. */
  16. protected $languageManager;
  17. /**
  18. * {@inheritdoc}
  19. */
  20. public static function create(ContainerInterface $container) {
  21. return new static(
  22. $container->get('language_manager')
  23. );
  24. }
  25. /**
  26. * Constructs a new MaterioDecoupledLanguageLinks object.
  27. *
  28. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
  29. * The language manager.
  30. */
  31. public function __construct(LanguageManagerInterface $language_manager) {
  32. $this->languageManager = $language_manager;
  33. }
  34. /**
  35. * getPathTranslationLinks
  36. *
  37. * @return string
  38. * Return translations links given a path.
  39. */
  40. public function getPathTranslationLinks(Request $request) {
  41. $post_data = json_decode( $request->getContent(),TRUE);
  42. $path = $post_data['path'];
  43. $data = [];
  44. // build the links
  45. $url_object = \Drupal::service('path.validator')->getUrlIfValid($path);
  46. if (!$url_object) {
  47. // if path does not exists
  48. $data["error"] = "path {$path} is not valid";
  49. $route_name = "<front>";
  50. $route_parameters = array();
  51. }else{
  52. $route_name = $url_object->getRouteName();
  53. $route_parameters = $url_object->getrouteParameters();
  54. }
  55. $languages = $this->languageManager->getNativeLanguages();
  56. foreach ($languages as $key => $language) {
  57. $url = Url::fromRoute($route_name, $route_parameters, ["language"=>$language]);
  58. $links[$key] = [
  59. "title" => $language->get('label'),
  60. "url" => $url->toString(),
  61. "sys_path" => $url->getInternalPath()
  62. ];
  63. }
  64. $data["links"] = $links;
  65. return new JsonResponse($data);
  66. }
  67. }