diff --git a/src/Controller/AddonsController.php b/src/Controller/AddonsController.php new file mode 100644 index 0000000..2b1314f --- /dev/null +++ b/src/Controller/AddonsController.php @@ -0,0 +1,27 @@ +render('addons/flags.html.twig', [ + 'flags' => $tablerService->flags(), + ]); + } +} diff --git a/src/EventSubscriber/MenuBuilderSubscriber.php b/src/EventSubscriber/MenuBuilderSubscriber.php index ef74d72..6652e42 100644 --- a/src/EventSubscriber/MenuBuilderSubscriber.php +++ b/src/EventSubscriber/MenuBuilderSubscriber.php @@ -106,6 +106,12 @@ public function onSetupNavbar(MenuEvent $event): void $docu->setBadgeColor('blue'); $event->addItem($docu); + $addons = new MenuItemModel('addons', 'Addons'); + $addons->addChild( + new MenuItemModel('flags', 'Flags', 'addons_flags') + ); + $event->addItem($addons); + if (!$this->security->isGranted('IS_AUTHENTICATED')) { $event->addItem( new MenuItemModel('login', 'login', 'security_login', [], 'fas fa-sign-in-alt') diff --git a/src/Model/TablerFlag.php b/src/Model/TablerFlag.php new file mode 100644 index 0000000..1bda92d --- /dev/null +++ b/src/Model/TablerFlag.php @@ -0,0 +1,34 @@ +name; + } + + public function getFlag(): string + { + return $this->flag; + } +} diff --git a/src/Resources/Tabler/data/flags.json b/src/Resources/Tabler/data/flags.json new file mode 100644 index 0000000..c1e704a --- /dev/null +++ b/src/Resources/Tabler/data/flags.json @@ -0,0 +1,1002 @@ +[ + { + "name": "Andorra", + "flag": "ad" + }, + { + "name": "United Arab Emirates", + "flag": "ae" + }, + { + "name": "Afghanistan", + "flag": "af" + }, + { + "name": "Antigua", + "flag": "ag" + }, + { + "name": "Anguilla", + "flag": "ai" + }, + { + "name": "Armenia", + "flag": "am" + }, + { + "name": "Angolan", + "flag": "ao" + }, + { + "name": "Antarctica", + "flag": "aq" + }, + { + "name": "Argentina", + "flag": "ar" + }, + { + "name": "American Samoa", + "flag": "as" + }, + { + "name": "Austria", + "flag": "at" + }, + { + "name": "Australia", + "flag": "au" + }, + { + "name": "Aruba", + "flag": "aw" + }, + { + "name": "Aslan Islands", + "flag": "ax" + }, + { + "name": "Azerbaijan", + "flag": "az" + }, + { + "name": "Bosnian", + "flag": "ba" + }, + { + "name": "Barbados", + "flag": "bb" + }, + { + "name": "Belgium", + "flag": "be" + }, + { + "name": "Burkina Faso", + "flag": "bf" + }, + { + "name": "Bulgaria", + "flag": "bg" + }, + { + "name": "Bahrain", + "flag": "bh" + }, + { + "name": "Burundi", + "flag": "bi" + }, + { + "name": "Benin", + "flag": "bj" + }, + { + "name": "Saint-Barthélemy", + "flag": "bl" + }, + { + "name": "Bermuda", + "flag": "bm" + }, + { + "name": "Bruneian", + "flag": "bn" + }, + { + "name": "Bolivia", + "flag": "bo" + }, + { + "name": "Bonaire", + "flag": "bq-bo" + }, + { + "name": "Brazil", + "flag": "br" + }, + { + "name": "Bahamas", + "flag": "bs" + }, + { + "name": "Bhutan", + "flag": "bt" + }, + { + "name": "Bouvet Island", + "flag": "bv" + }, + { + "name": "Batswana", + "flag": "bw" + }, + { + "name": "Belarus", + "flag": "by" + }, + { + "name": "Belize", + "flag": "bz" + }, + { + "name": "Canada", + "flag": "ca" + }, + { + "name": "Cocos Island", + "flag": "cc" + }, + { + "name": "Democratic Republic of Congo", + "flag": "cd" + }, + { + "name": "Central African Republic", + "flag": "cf" + }, + { + "name": "Republic of the Congo", + "flag": "cg" + }, + { + "name": "Switzerland", + "flag": "ch" + }, + { + "name": "Ivory Coast", + "flag": "ci" + }, + { + "name": "Cook Island", + "flag": "ck" + }, + { + "name": "Chile", + "flag": "cl" + }, + { + "name": "Cameroon", + "flag": "cm" + }, + { + "name": "China", + "flag": "cn" + }, + { + "name": "Colombia", + "flag": "co" + }, + { + "name": "Costa Rica", + "flag": "cr" + }, + { + "name": "Cuba", + "flag": "cu" + }, + { + "name": "Cape Verde", + "flag": "cv" + }, + { + "name": "Curacao", + "flag": "cw" + }, + { + "name": "Christmas Island", + "flag": "cx" + }, + { + "name": "Cyprus", + "flag": "cy" + }, + { + "name": "Czech Republic", + "flag": "cz" + }, + { + "name": "Germany", + "flag": "de" + }, + { + "name": "Djibouti", + "flag": "dj" + }, + { + "name": "Denmark", + "flag": "dk" + }, + { + "name": "Dominica", + "flag": "dm" + }, + { + "name": "Dominican Republic", + "flag": "do" + }, + { + "name": "Algeria", + "flag": "dz" + }, + { + "name": "Ecuador", + "flag": "ec" + }, + { + "name": "Estonia", + "flag": "ee" + }, + { + "name": "Egypt", + "flag": "eg" + }, + { + "name": "Sahrawi", + "flag": "eh" + }, + { + "name": "Eritrea", + "flag": "er" + }, + { + "name": "Spain", + "flag": "es" + }, + { + "name": "Ethiopia", + "flag": "et" + }, + { + "name": "European Union", + "flag": "eu" + }, + { + "name": "Finland", + "flag": "fi" + }, + { + "name": "Fiji", + "flag": "fj" + }, + { + "name": "Falkland Islands", + "flag": "fk" + }, + { + "name": "Federate States of Micronesia", + "flag": "fm" + }, + { + "name": "Faroe Islands", + "flag": "fo" + }, + { + "name": "France", + "flag": "fr" + }, + { + "name": "Gabon", + "flag": "ga" + }, + { + "name": "Great Britain", + "flag": "gb" + }, + { + "name": "England", + "flag": "gb-eng" + }, + { + "name": "Nothern Ireland", + "flag": "gb-nir" + }, + { + "name": "Scotland", + "flag": "gb-sct" + }, + { + "name": "Wales", + "flag": "gb-wls" + }, + { + "name": "Grenada", + "flag": "gd" + }, + { + "name": "Georgia", + "flag": "ge" + }, + { + "name": "Guyana", + "flag": "gf" + }, + { + "name": "Guernsey", + "flag": "gg" + }, + { + "name": "Ghana", + "flag": "gh" + }, + { + "name": "Gibraltar", + "flag": "gi" + }, + { + "name": "Greenland", + "flag": "gl" + }, + { + "name": "Gambia", + "flag": "gm" + }, + { + "name": "Guinea", + "flag": "gn" + }, + { + "name": "Guadeloupe", + "flag": "gp" + }, + { + "name": "Equatorial Guinea", + "flag": "gq" + }, + { + "name": "Greece", + "flag": "gr" + }, + { + "name": "South Georgia", + "flag": "gs" + }, + { + "name": "Guatemala", + "flag": "gt" + }, + { + "name": "Guam", + "flag": "gu" + }, + { + "name": "Guinea-Bissau", + "flag": "gw" + }, + { + "name": "Guyana", + "flag": "gy" + }, + { + "name": "Hong Kong", + "flag": "hk" + }, + { + "name": "Heard and McDonald Islands", + "flag": "hm" + }, + { + "name": "Honduras", + "flag": "hn" + }, + { + "name": "Croatia", + "flag": "hr" + }, + { + "name": "Haiti", + "flag": "ht" + }, + { + "name": "Hungary", + "flag": "hu" + }, + { + "name": "Indonesia", + "flag": "id" + }, + { + "name": "Ireland", + "flag": "ie" + }, + { + "name": "Israel", + "flag": "il" + }, + { + "name": "Isle of Man", + "flag": "im" + }, + { + "name": "India", + "flag": "in" + }, + { + "name": "British Indian Ocean Territory", + "flag": "io" + }, + { + "name": "Iraq", + "flag": "iq" + }, + { + "name": "Iran", + "flag": "ir" + }, + { + "name": "Iceland", + "flag": "is" + }, + { + "name": "Italy", + "flag": "it" + }, + { + "name": "Jersey", + "flag": "je" + }, + { + "name": "Jamaica", + "flag": "jm" + }, + { + "name": "Jordan", + "flag": "jo" + }, + { + "name": "Japan", + "flag": "jp" + }, + { + "name": "Kenya", + "flag": "ke" + }, + { + "name": "Kyrgyzstan", + "flag": "kg" + }, + { + "name": "Cambodia", + "flag": "kh" + }, + { + "name": "Kiribati", + "flag": "ki" + }, + { + "name": "Comoros", + "flag": "km" + }, + { + "name": "Saint Kitts and Nevis", + "flag": "kn" + }, + { + "name": "North Korea", + "flag": "kp" + }, + { + "name": "South Korea", + "flag": "kr" + }, + { + "name": "Kuwait", + "flag": "kw" + }, + { + "name": "Cayman Islands", + "flag": "ky" + }, + { + "name": "Kazakhstan", + "flag": "kz" + }, + { + "name": "Laos", + "flag": "la" + }, + { + "name": "Lebanese", + "flag": "lb" + }, + { + "name": "Saint Lucia", + "flag": "lc" + }, + { + "name": "Liechtenstein", + "flag": "li" + }, + { + "name": "Sri Lanka", + "flag": "lk" + }, + { + "name": "Liberia", + "flag": "lr" + }, + { + "name": "Lesotho", + "flag": "ls" + }, + { + "name": "Lithuania", + "flag": "lt" + }, + { + "name": "Luxembourg", + "flag": "lu" + }, + { + "name": "Latvia", + "flag": "lv" + }, + { + "name": "Libya", + "flag": "ly" + }, + { + "name": "Morocco", + "flag": "ma" + }, + { + "name": "Monaco", + "flag": "mc" + }, + { + "name": "Moldova", + "flag": "md" + }, + { + "name": "Montenegro", + "flag": "me" + }, + { + "name": "Saint Martin", + "flag": "mf" + }, + { + "name": "Madagascar", + "flag": "mg" + }, + { + "name": "Marshall Islands", + "flag": "mh" + }, + { + "name": "Macedonia", + "flag": "mk" + }, + { + "name": "Mali", + "flag": "ml" + }, + { + "name": "Myanmar", + "flag": "mm" + }, + { + "name": "Mongolia", + "flag": "mn" + }, + { + "name": "Macao", + "flag": "mo" + }, + { + "name": "Nothern Mariana Islands", + "flag": "mp" + }, + { + "name": "Martinique", + "flag": "mq" + }, + { + "name": "Mauritania", + "flag": "mr" + }, + { + "name": "Montserrat", + "flag": "ms" + }, + { + "name": "Malta", + "flag": "mt" + }, + { + "name": "Mauritius", + "flag": "mu" + }, + { + "name": "Maldives", + "flag": "mv" + }, + { + "name": "Malawi", + "flag": "mw" + }, + { + "name": "Mexico", + "flag": "mx" + }, + { + "name": "Malaysia", + "flag": "my" + }, + { + "name": "Mozambique", + "flag": "mz" + }, + { + "name": "Namibia", + "flag": "na" + }, + { + "name": "New Caledonia", + "flag": "nc" + }, + { + "name": "Niger", + "flag": "ne" + }, + { + "name": "Norfolk Island", + "flag": "nf" + }, + { + "name": "Nigeria", + "flag": "ng" + }, + { + "name": "Nicaragua", + "flag": "ni" + }, + { + "name": "Norway", + "flag": "no" + }, + { + "name": "Nepal", + "flag": "np" + }, + { + "name": "Nauruan", + "flag": "nr" + }, + { + "name": "Niger", + "flag": "nu" + }, + { + "name": "New Zealand", + "flag": "nz" + }, + { + "name": "Oman", + "flag": "om" + }, + { + "name": "Panama", + "flag": "pa" + }, + { + "name": "Peru", + "flag": "pe" + }, + { + "name": "French Polynesia", + "flag": "pf" + }, + { + "name": "Papua New Guinea", + "flag": "pg" + }, + { + "name": "Philippines", + "flag": "ph" + }, + { + "name": "Pakistan", + "flag": "pk" + }, + { + "name": "Poland", + "flag": "pl" + }, + { + "name": "Saint Pierre", + "flag": "pm" + }, + { + "name": "Pitcairn Islands", + "flag": "pn" + }, + { + "name": "Puerto Rico", + "flag": "pr" + }, + { + "name": "Palestine", + "flag": "ps" + }, + { + "name": "Portugal", + "flag": "pt" + }, + { + "name": "Palau", + "flag": "pw" + }, + { + "name": "Paraguay", + "flag": "py" + }, + { + "name": "Qatar", + "flag": "qa" + }, + { + "name": "Reunion Island", + "flag": "re" + }, + { + "name": "Romania", + "flag": "ro" + }, + { + "name": "Serbia", + "flag": "rs" + }, + { + "name": "Russia", + "flag": "ru" + }, + { + "name": "Rwanda", + "flag": "rw" + }, + { + "name": "Saudi Arabia", + "flag": "sa" + }, + { + "name": "Solomon Islands", + "flag": "sb" + }, + { + "name": "Seychelles", + "flag": "sc" + }, + { + "name": "Sudan", + "flag": "sd" + }, + { + "name": "Sweden", + "flag": "se" + }, + { + "name": "Singapore", + "flag": "sg" + }, + { + "name": "Saint Helena", + "flag": "sh" + }, + { + "name": "Slovenia", + "flag": "si" + }, + { + "name": "Svalbard Island", + "flag": "sj" + }, + { + "name": "Slovakia", + "flag": "sk" + }, + { + "name": "Sierra Leone", + "flag": "sl" + }, + { + "name": "San Marino", + "flag": "sm" + }, + { + "name": "Senegal", + "flag": "sn" + }, + { + "name": "Somalia", + "flag": "so" + }, + { + "name": "Suriname", + "flag": "sr" + }, + { + "name": "South Sudan", + "flag": "ss" + }, + { + "name": "Sao Tome", + "flag": "st" + }, + { + "name": "El Salvador", + "flag": "sv" + }, + { + "name": "Sint Maarten", + "flag": "sx" + }, + { + "name": "Syria", + "flag": "sy" + }, + { + "name": "Swaziland", + "flag": "sz" + }, + { + "name": "Turks and Caicos", + "flag": "tc" + }, + { + "name": "Chad", + "flag": "td" + }, + { + "name": "French Southern and Antarctic Lands", + "flag": "tf" + }, + { + "name": "Togo", + "flag": "tg" + }, + { + "name": "Thailand", + "flag": "th" + }, + { + "name": "Tajikistan", + "flag": "tj" + }, + { + "name": "Tokelau", + "flag": "tk" + }, + { + "name": "Timor Leste", + "flag": "tl" + }, + { + "name": "Turkmenistan", + "flag": "tm" + }, + { + "name": "Tunisia", + "flag": "tn" + }, + { + "name": "Tonga", + "flag": "to" + }, + { + "name": "Turkey", + "flag": "tr" + }, + { + "name": "Trinidad and Tobago", + "flag": "tt" + }, + { + "name": "Tuvalu", + "flag": "tv" + }, + { + "name": "Taiwan", + "flag": "tw" + }, + { + "name": "Tanzania", + "flag": "tz" + }, + { + "name": "Ukraine", + "flag": "ua" + }, + { + "name": "Uganda", + "flag": "ug" + }, + { + "name": "United States Minor Islands", + "flag": "um" + }, + { + "name": "United States of America", + "flag": "us" + }, + { + "name": "Uruguay", + "flag": "uy" + }, + { + "name": "Uzbekistan", + "flag": "uz" + }, + { + "name": "Vatican City", + "flag": "va" + }, + { + "name": "Saint Vincent", + "flag": "vc" + }, + { + "name": "Venezuela", + "flag": "ve" + }, + { + "name": "British Virgin Islands", + "flag": "vg" + }, + { + "name": "Virgiin Islands", + "flag": "vi" + }, + { + "name": "Vietnam", + "flag": "vn" + }, + { + "name": "Vanuatu", + "flag": "vu" + }, + { + "name": "Wallis and Futuna", + "flag": "wf" + }, + { + "name": "Samoa", + "flag": "ws" + }, + { + "name": "Yemen", + "flag": "ye" + }, + { + "name": "South Africa", + "flag": "za" + }, + { + "name": "Zambia", + "flag": "zm" + }, + { + "name": "Zimbabwe", + "flag": "zw" + } +] diff --git a/src/Service/GithubService.php b/src/Service/GithubService.php index 5ca2b49..42e311c 100644 --- a/src/Service/GithubService.php +++ b/src/Service/GithubService.php @@ -23,7 +23,7 @@ class GithubService public function __construct( private readonly ParameterBagInterface $parameterBag, private readonly HttpClientInterface $httpClient, - private readonly DenormalizerInterface $serializer, + private readonly DenormalizerInterface $denormalizer, ) { } @@ -46,13 +46,13 @@ public function fetchContributors( ), ); - return $this->serializer->denormalize( + return $this->denormalizer->denormalize( $contributorsResponse->toArray(), GithubUser::class . '[]', 'array' ); } catch (\Throwable) { - return $this->serializer->denormalize( + return $this->denormalizer->denormalize( json_decode(file_get_contents($this->resourceDir() . DIRECTORY_SEPARATOR . 'contributors.json')), GithubUser::class . '[]', 'json' @@ -89,13 +89,13 @@ public function fetchCommits( ), ); - return $this->serializer->denormalize( + return $this->denormalizer->denormalize( $contributorsResponse->toArray(), GithubCommit::class . '[]', 'array' ); } catch (\Throwable) { - return $this->serializer->denormalize( + return $this->denormalizer->denormalize( json_decode(file_get_contents($this->resourceDir() . DIRECTORY_SEPARATOR . 'commits.json')), GithubCommit::class . '[]', 'json' diff --git a/src/Service/TablerService.php b/src/Service/TablerService.php new file mode 100644 index 0000000..3af1fc4 --- /dev/null +++ b/src/Service/TablerService.php @@ -0,0 +1,50 @@ +denormalizer->denormalize( + json_decode(file_get_contents($this->dataDir() . DIRECTORY_SEPARATOR . 'flags.json')), + TablerFlag::class . '[]', + 'json' + ); + } + + private function dataDir(): string + { + return $this->resourceDir() + . DIRECTORY_SEPARATOR . 'data'; + } + + private function resourceDir(): string + { + return $this->parameterBag->get('kernel.project_dir') + . DIRECTORY_SEPARATOR . 'src' + . DIRECTORY_SEPARATOR . 'Resources' + . DIRECTORY_SEPARATOR . 'Tabler'; + } +} diff --git a/templates/addons/flags.html.twig b/templates/addons/flags.html.twig new file mode 100644 index 0000000..bee70b3 --- /dev/null +++ b/templates/addons/flags.html.twig @@ -0,0 +1,32 @@ +{% extends 'layout.html.twig' %} + +{% block page_title %}Flags{% endblock %} +{% block page_subtitle %}{% endblock %} +{% block page_actions %}{% endblock %} + +{% block stylesheets %} + {{ parent() }} + +{% endblock %} + +{% block page_content %} + {% embed '@Tabler/embeds/card.html.twig' with {fullsize : true} %} + {% block box_title %}List of all flags{% endblock %} + {% block box_body %} +
+
+ {% for flag in flags %} + + + + {% endfor %} +
+
+
+
+ {% endblock %} + {% endembed %} +{% endblock %} diff --git a/templates/layout.html.twig b/templates/layout.html.twig index 46e57a6..2b99dc2 100644 --- a/templates/layout.html.twig +++ b/templates/layout.html.twig @@ -40,6 +40,7 @@ @import url("https://rsms.me/inter/inter.css"); + {% endblock %} {% block javascripts %}