Un générateur de codes QR en PHP pour le Web. https://qr.antopie.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

301 lines
14KB

  1. <?php require "config.inc.php"; ?>
  2. <!--
  3. _ _ _ ___ ____
  4. | | (_| |__ _ __ ___ / _ \| _ \
  5. | | | | '_ \| '__/ _ | | | | |_) |
  6. | |___| | |_) | | | __| |_| | _ <
  7. |_____|_|_.__/|_| \___|\__\_|_| \_\
  8. LibreQR version 1.2.0
  9. Créé par Miraty et diffusé sous AGPLv3+
  10. Code source : https://code.antopie.org/miraty/libreqr
  11. Ce fichier fait partie de LibreQR.
  12. LibreQR est un logiciel libre ; vous pouvez le redistribuer ou le modifier
  13. suivant les termes de la GNU Affero General Public License
  14. telle que publiée par la Free Software Foundation ; soit la version 3
  15. de la licence, soit (à votre gré) toute version ultérieure.
  16. LibreQR est distribué dans l'espoir qu'il sera utile,
  17. mais SANS AUCUNE GARANTIE ; sans même la garantie tacite de
  18. QUALITÉ MARCHANDE ou d'ADÉQUATION à UN BUT PARTICULIER.
  19. Consultez la GNU Affero General Public License pour plus de détails.
  20. Vous devez avoir reçu une copie de la GNU Affero General Public License
  21. en même temps que LibreQR ; si ce n'est pas le cas,
  22. consultez <https://www.gnu.org/licenses/>.
  23. -->
  24. <?php
  25. function badQuery() { // Check if browser must be redirected
  26. // Check if parameters are set
  27. if (!isset($_GET['txt']))
  28. return true;
  29. else if (!isset($_GET['size']))
  30. return true;
  31. else if (!isset($_GET['redondancy']))
  32. return true;
  33. else if (!isset($_GET['margin']))
  34. return true;
  35. else if (!isset($_GET['bgColor']))
  36. return true;
  37. else if (!isset($_GET['mainColor']))
  38. return true;
  39. // Check parameters's types
  40. else if (!is_numeric($_GET['size']))
  41. return true;
  42. else if (!is_string($_GET['redondancy']))
  43. return true;
  44. else if (!is_numeric($_GET['margin']))
  45. return true;
  46. else if (!is_string($_GET['bgColor']))
  47. return true;
  48. else if (!is_string($_GET['mainColor']))
  49. return true;
  50. // Check if redondancy value is correct
  51. else if ($_GET['redondancy'] != "L" AND $_GET['redondancy'] != "M" AND $_GET['redondancy'] != "Q" AND $_GET['redondancy'] != "H")
  52. return true;
  53. else
  54. return false;
  55. }
  56. if (badQuery()) {
  57. parse_str(parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY), $params);
  58. if (!isset($params['txt']))
  59. $params['txt'] = "";
  60. if (!isset($params['redondancy']) OR !is_string($params['redondancy']) OR ($params['redondancy'] != "L" AND $params['redondancy'] != "M" AND $params['redondancy'] != "Q" AND $params['redondancy'] != "H"))
  61. $params['redondancy'] = "H";
  62. if (!isset($params['margin']) OR !is_numeric($params['margin']))
  63. $params['margin'] = 2;
  64. if (!isset($params['size']) OR !is_numeric($params['size']))
  65. $params['size'] = 4;
  66. if (!isset($params['bgColor']) OR !is_string($params['bgColor']))
  67. $params['bgColor'] = "#FFFFFF";
  68. if (!isset($params['mainColor']) OR !is_string($params['mainColor']))
  69. $params['mainColor'] = "#000000";
  70. header('Location: ' . $instPath . "?" . http_build_query($params));
  71. exit;
  72. }
  73. ?>
  74. <!DOCTYPE html>
  75. <html lang="fr">
  76. <head>
  77. <meta charset="UTF-8">
  78. <title>Générateur de codes QR</title>
  79. <meta name="description" content="Générez des codes QR librement. Choisissez le contenu, la taille, la couleur...">
  80. <meta name="theme-color" content="<?php echo $variablesTheme['bg']; ?>">
  81. <meta name="viewport" content="width=device-width, initial-scale=1">
  82. <link rel="manifest" href="manifest.php">
  83. <link rel="search" type="application/opensearchdescription+xml" title="Générer un code QR" href="opensearch.php&#63;redondancy=<?= $_GET['redondancy'] ?>&amp;margin=<?= $_GET['margin'] ?>&amp;size=<?= $_GET['size'] ?>&amp;bgColor=<?= urlencode($_GET['bgColor']) ?>&amp;mainColor=<?= urlencode($_GET['mainColor']) ?>">
  84. <?php
  85. // If style.min.css exists
  86. if (file_exists("style.min.css"))
  87. // And if it's older than theme.php or config.inc.php (so not up to date)
  88. if (filemtime("themes/" . $theme . "/theme.php") > filemtime("style.min.css") OR filemtime("config.inc.php") > filemtime("style.min.css"))
  89. // Then delete it
  90. unlink("style.min.css");
  91. require "lessphp/lessc.inc.php";
  92. $less = new lessc;
  93. $less->setVariables($variablesTheme); // Rends ces couleurs utilisables dans style.less
  94. $less->setFormatter("compressed");
  95. $less->checkedCompile("style.less", "style.min.css"); // Compile, minimise et met en cache style.less dans style.min.css
  96. ?>
  97. <link type="text/css" rel="stylesheet" href="style.min.css">
  98. <link type="text/css" rel="stylesheet" href="ubuntu/ubuntu.min.css">
  99. <?php
  100. foreach($themeDimensionsIcons as $dimFav) { // Indique toutes les dimensions d'icones
  101. echo ' <link rel="icon" type="image/png" href="themes/' . $theme . '/icons/' . $dimFav . '.png" sizes="' . $dimFav . 'x' . $dimFav . '">' . "\n";
  102. } ?>
  103. </head>
  104. <body>
  105. <div class="center">
  106. <header>
  107. <a id="lienTitres" href="./">
  108. <img id="logo" src="themes/<?php echo $theme; ?>/icons/128.png" alt="Code QR stylisé">
  109. <div id="titres">
  110. <h1>LibreQR</h1>
  111. <h2>Générateur de codes QR</h2>
  112. </div>
  113. </a>
  114. </header>
  115. <form method="get" action="./">
  116. <div id="firstWrapper">
  117. <div class="param">
  118. <label for="txt">Texte à encoder</label>
  119. <span class="conteneurAide">
  120. <span class="boutonAide" tabindex="0"><img id="helpImg" src="help.svg.php?clr=<?= urlencode($variablesTheme["text"]) ?>" alt="Aide"></span>
  121. <span class="contenuAide">
  122. Vous pouvez encoder ce que vous voulez sous forme de texte.<br>
  123. Les logiciels qui décodent ces codes QR pourraient proposer de les ouvrir avec un logiciel dédié, en fonction de leur <a href="https://fr.wikipedia.org/wiki/Sch%C3%A9ma_d%27URI">schéma d'URI</a>.<br><br>
  124. Par exemple, pour ouvrir une page Web :<br>
  125. https://www.domaine.tld/<br><br>
  126. Pour envoyer un mail :<br>
  127. mailto:contact@domaine.tld<br><br>
  128. Pour partager des coordonnées géographique :<br>
  129. geo:48.867564,2.364057<br><br>
  130. Pour appeler un numéro de téléphone :<br>
  131. tel:0639981871
  132. </span>
  133. </span>
  134. <br>
  135. <textarea rows="8" required="" id="txt" placeholder="Entrez le texte à encoder dans le code QR" name="txt"><?php
  136. if (isset($_GET['txt'])) {
  137. echo htmlspecialchars($_GET['txt']);
  138. }
  139. ?></textarea>
  140. </div>
  141. <div id="menusDeroulants">
  142. <div class="param">
  143. <label for="redondancy">Taux de redondance</label>
  144. <span class="conteneurAide">
  145. <span class="boutonAide" tabindex="0"><img id="helpImg" src="help.svg.php?clr=<?= urlencode($variablesTheme["text"]) ?>" alt="Aide"></span>
  146. <span class="contenuAide">La redondance est le "doublement" des informations dans le code QR afin de corriger les erreurs lors du décodage. Un taux plus élevé produira un code QR plus grand, mais aura plus de chance d'être décodé correctement.</span>
  147. </span>
  148. <br>
  149. <select id="redondancy" name="redondancy">
  150. <option <?php if (isset($_GET['redondancy']) AND ($_GET['redondancy'] == "L")) {echo 'selected="" ';} ?>value="L">L - 7% de redondance</option>
  151. <option <?php if (isset($_GET['redondancy']) AND ($_GET['redondancy'] == "M")) {echo 'selected="" ';} ?>value="M">M - 15% de redondance</option>
  152. <option <?php if (isset($_GET['redondancy']) AND ($_GET['redondancy'] == "Q")) {echo 'selected="" ';} ?>value="Q">Q - 25% de redondance</option>
  153. <option <?php if ((isset($_GET['redondancy']) AND ($_GET['redondancy'] == "H")) OR (!isset($_GET['redondancy']) OR empty($_GET['redondancy']))) {echo 'selected="" ';} ?>value="H">H - 30% de redondance</option>
  154. </select>
  155. </div>
  156. <div class="param">
  157. <label for="margin">Taille de la marge</label>
  158. <span class="conteneurAide">
  159. <span class="boutonAide" tabindex="0"><img id="helpImg" src="help.svg.php?clr=<?= urlencode($variablesTheme["text"]) ?>" alt="Aide"></span>
  160. <span class="contenuAide">Nombre de pixels des bandes blanches autour du code QR.</span>
  161. </span>
  162. <br>
  163. <select id="margin" name="margin">
  164. <option <?php if (isset($_GET['margin']) AND ($_GET['margin'] == "0")) {echo 'selected="" ';} ?>value="0">0</option>
  165. <option <?php if (isset($_GET['margin']) AND ($_GET['margin'] == "1")) {echo 'selected="" ';} ?>value="1">1</option>
  166. <option <?php if ((isset($_GET['margin']) AND ($_GET['margin'] == "2")) OR (!isset($_GET['margin']) OR empty($_GET['margin']))) {echo 'selected="" ';} ?>value="2">2 - par défaut</option>
  167. <option <?php if (isset($_GET['margin']) AND ($_GET['margin'] == "3")) {echo 'selected="" ';} ?>value="3">3</option>
  168. <option <?php if (isset($_GET['margin']) AND ($_GET['margin'] == "4")) {echo 'selected="" ';} ?>value="4">4</option>
  169. <option <?php if (isset($_GET['margin']) AND ($_GET['margin'] == "5")) {echo 'selected="" ';} ?>value="5">5</option>
  170. <option <?php if (isset($_GET['margin']) AND ($_GET['margin'] == "8")) {echo 'selected="" ';} ?>value="8">8</option>
  171. <option <?php if (isset($_GET['margin']) AND ($_GET['margin'] == "10")) {echo 'selected="" ';} ?>value="10">10</option>
  172. </select>
  173. </div>
  174. <div class="param">
  175. <label for="size">Taille de l'image</label>
  176. <span class="conteneurAide">
  177. <span class="boutonAide" tabindex="0"><img id="helpImg" src="help.svg.php?clr=<?= urlencode($variablesTheme["text"]) ?>" alt="Aide"></span>
  178. <span class="contenuAide">Par combien les dimensions de l'image seront-elles multipliées ?</span>
  179. </span>
  180. <br>
  181. <select id="size" name="size">
  182. <option <?php if (isset($_GET['size']) AND ($_GET['size'] == 1)) {echo 'selected="" ';} ?>value="1">1</option>
  183. <option <?php if (isset($_GET['size']) AND ($_GET['size'] == 2)) {echo 'selected="" ';} ?>value="2">2</option>
  184. <option <?php if (isset($_GET['size']) AND ($_GET['size'] == 3)) {echo 'selected="" ';} ?>value="3">3</option>
  185. <option <?php if ((isset($_GET['size']) AND ($_GET['size'] == 4)) OR (!isset($_GET['size']) OR empty($_GET['size']))) {echo 'selected="" ';} ?>value="4">4 - par défaut</option>
  186. <option <?php if (isset($_GET['size']) AND ($_GET['size'] == 5)) {echo 'selected="" ';} ?>value="5">5</option>
  187. <option <?php if (isset($_GET['size']) AND ($_GET['size'] == 6)) {echo 'selected="" ';} ?>value="6">6</option>
  188. <option <?php if (isset($_GET['size']) AND ($_GET['size'] == 8)) {echo 'selected="" ';} ?>value="8">8</option>
  189. <option <?php if (isset($_GET['size']) AND ($_GET['size'] == 10)) {echo 'selected="" ';} ?>value="10">10</option>
  190. <option <?php if (isset($_GET['size']) AND ($_GET['size'] == 15)) {echo 'selected="" ';} ?>value="15">15</option>
  191. <option <?php if (isset($_GET['size']) AND ($_GET['size'] == 20)) {echo 'selected="" ';} ?>value="20">20</option>
  192. </select>
  193. </div>
  194. </div>
  195. </div>
  196. <div id="colors">
  197. <div class="param">
  198. <label for="bgColor">Couleur de fond</label>
  199. <div class="conteneurInputColor">
  200. <input type="color" name="bgColor" id="bgColor" value="<?php if (!empty($_GET['bgColor'])) {echo htmlspecialchars($_GET['bgColor']);} else {echo "#FFFFFF";} ?>">
  201. </div>
  202. </div>
  203. <div class="param">
  204. <label for="mainColor">Couleur de premier plan</label>
  205. <div class="conteneurInputColor">
  206. <input type="color" name="mainColor" id="mainColor" value="<?php if (!empty($_GET['mainColor'])) {echo htmlspecialchars($_GET['mainColor']);} else {echo "#000000";} ?>">
  207. </div>
  208. </div>
  209. </div>
  210. <div class="centrer">
  211. <input class="bouton" type="submit" value="Générer" />
  212. </div>
  213. </form>
  214. <?php
  215. if (!empty($_GET['txt']) AND !empty($_GET['size']) AND !empty($_GET['redondancy']) AND !empty($_GET['margin']) AND !empty($_GET['bgColor']) AND !empty($_GET['mainColor'])) {
  216. if (isset($_GET['txt']) AND isset($_GET['size']) AND isset($_GET['redondancy']) AND isset($_GET['margin']) AND isset($_GET['bgColor']) AND isset($_GET['mainColor'])) {
  217. require "phpqrcode.php";
  218. $cheminImage = "temp/" . generateRandomString($fileNameLenght) . ".png";
  219. QRcode::png($_GET['txt'], $cheminImage, $_GET['redondancy'], $_GET['size'], $_GET['margin'], false, hexdec($_GET['bgColor']), hexdec($_GET['mainColor']));
  220. ?>
  221. <div class="centrer">
  222. <a href="<?php echo $cheminImage; ?>" class="bouton" download="<?php echo htmlspecialchars($_GET['txt']); ?>.png">Télécharger ce code QR</a>
  223. </div>
  224. <div class="centrer" id="showOnlyQR">
  225. <a title="Cliquez pour afficher uniquement ce code QR" href="<?php echo $cheminImage; ?>"><img alt='Un code QR contenant "<?php echo htmlspecialchars($_GET['txt']); ?>"' id="qrCode" src="<?php echo $cheminImage; ?>"/></a>
  226. </div>
  227. <?php
  228. }
  229. }
  230. ?>
  231. </div>
  232. <div id="metaTexts">
  233. <section id="info" class="metaText">
  234. <h3>Qu'est-ce qu'un code QR ?</h3>
  235. Un code QR est un code-barres en 2 dimensions dans lequel est inscrit en binaire du texte. Il peut être décodé avec un appareil muni d'un capteur photo et d'un logiciel adéquat.
  236. <a href="https://fr.wikipedia.org/wiki/Code_QR">Code QR sur Wikipédia</a>
  237. </section>
  238. <footer class="metaText">
  239. LibreQR 1.2.0 est un logiciel libre dont le <a href="https://code.antopie.org/miraty/libreqr/">code source</a> est disponible
  240. selon les termes de l'<abbr title="GNU Affero General Public License version 3 ou toute version ultérieure"><a href="LICENSE.html">AGPLv3</a>+</abbr>.
  241. </footer>
  242. </div>
  243. </body>
  244. </html>