From 3356db65558c08e04824240cb332895afd8797d4 Mon Sep 17 00:00:00 2001 From: Miraty Date: Wed, 1 Jul 2020 20:47:02 +0200 Subject: [PATCH 01/13] Adds i18n, english l10n, CHANGELOG and lesserphp instead of lessphp --- CHANGELOG.md | 49 + README.md | 5 +- config.inc.php | 53 +- inc.php | 48 + index.php | 96 +- {lessphp => lesserphp}/LICENSE | 5 +- {lessphp => lesserphp}/README.md | 13 +- lesserphp/docs/docs.md | 1400 +++++++++++ lesserphp/lessc.inc.php | 4019 ++++++++++++++++++++++++++++++ lessphp/lessc.inc.php | 3880 ---------------------------- locales/en.php | 47 + locales/fr.php | 47 + locales/template.php | 27 + manifest.php | 24 +- opensearch.php | 6 +- style.less | 10 +- style.min.css | 2 +- 17 files changed, 5732 insertions(+), 3999 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 inc.php rename {lessphp => lesserphp}/LICENSE (99%) mode change 100755 => 100644 rename {lessphp => lesserphp}/README.md (86%) mode change 100755 => 100644 create mode 100644 lesserphp/docs/docs.md create mode 100644 lesserphp/lessc.inc.php delete mode 100755 lessphp/lessc.inc.php create mode 100644 locales/en.php create mode 100644 locales/fr.php create mode 100644 locales/template.php diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..09a833b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,49 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## Unreleased + +### Added + +* i18n system +* English l10n +* Changelog + +### Changed + +* Use lesserphp instead of lessphp + +## 1.2.0 - 2020-03-23 + +### Added + +* Ability to chooses QR code colors + +### Changed + +* The software is now named LibreQR +* Parameters now uses GET instead of POST +* The OpenSearch plugin now generate QR codes with arguments used when added + +## 1.1.0 - 2019-03-29 + +### Added + +* OpenSearch +* WebManifest + +### Changed + +* Server-side LESS compilation +* Icons are now themed and in multiple dimensions + +### Fixed + +* Placeholder font + +## 1.0.0 - 2019-02-13 + +Initial release diff --git a/README.md b/README.md index 048aabf..b818c22 100755 --- a/README.md +++ b/README.md @@ -59,8 +59,7 @@ Par défaut, trois thèmes sont proposés : php themes/resize.php [nom de votre thème] ``` -Cela nécessitera d'avoir installé [ImageMagick](https://imagemagick.org) et -[pngquant](https://pngquant.org). +Cela nécessitera d'avoir installé [ImageMagick](https://imagemagick.org) et [pngquant](https://pngquant.org). ## Contribuer @@ -80,7 +79,7 @@ Ce code source inclus : * [phpqrcode](https://github.com/t0k4rt/phpqrcode) pour générer les codes QR * [La police Ubuntu packagée pour le Web](https://github.com/earaujoassis/ubuntu-fontface) -* [lessphp](http://leafo.net/lessphp) pour compiler le [Less](http://lesscss.org) +* [lesserphp](https://github.com/MarcusSchwarz/lesserphp) pour compiler le [Less](http://lesscss.org) ## Licence diff --git a/config.inc.php b/config.inc.php index 8e68363..9d73ace 100755 --- a/config.inc.php +++ b/config.inc.php @@ -1,47 +1,22 @@ getFilename() != "." AND $listeCodesQR->getFilename() != ".." AND $listeCodesQR->getFilename() != ".gitkeep") { - if ((time() - filemtime("temp/" . $listeCodesQR->getFilename())) > $tempsDeSuppression) { // Si le temps actuel (en heure Posix) moins la date de dernière modification de l'image est supérieur à la durée de vie demandée de l'image - unlink("temp/" . $listeCodesQR->getFilename()); // Alors supprimer cette image - } - } - } -} +//$additionalText = "This LibreQR instance is hosted by foo."; diff --git a/inc.php b/inc.php new file mode 100644 index 0000000..04d911d --- /dev/null +++ b/inc.php @@ -0,0 +1,48 @@ + $deleteAfter) { + unlink("temp/" . $file); // Deletes this image + } + } +} diff --git a/index.php b/index.php index e72a97a..3835de6 100755 --- a/index.php +++ b/index.php @@ -1,4 +1,4 @@ - + - - @@ -149,7 +138,7 @@ if (badQuery()) {
- " alt="Aide"> + " alt="Aide"> @@ -169,7 +158,7 @@ if (badQuery()) {
- " alt="Aide"> + " alt="Aide">
@@ -184,7 +173,7 @@ if (badQuery()) {
- " alt="Aide"> + " alt="Aide">
@@ -203,7 +192,7 @@ if (badQuery()) {
- " alt="Aide"> + " alt="Aide">
@@ -270,27 +259,26 @@ if (badQuery()) { } ?> +
+ +
+ +
+ +
+

+ +

+ +
+

+ +

+ +
+ +
-
- -
- -
- -
-

- -

- -
-

- -

- -
- -
- diff --git a/style.less b/style.less index 95524c9..5b23384 100755 --- a/style.less +++ b/style.less @@ -61,17 +61,17 @@ p { } form { - display: block; + flex-grow: 1; margin-bottom: 30px; } main { display: flex; flex-direction: column; - justify-content: center; margin-left: auto; margin-right: auto; width: 814px; + height: 99%; } body { @@ -80,16 +80,11 @@ body { color: @text; font-weight: normal; font-size: 20px; - - & h1 { - color: @text; - text-decoration: none; - } - + height: 99%; } -label { - font-size: 20px; +html { + height: 97%; } header { @@ -180,8 +175,6 @@ label[for=txt] { color: @secondaryText; text-align: left; transition: color 0.12s cubic-bezier(0.42, 0.0, 1.0, 1.0); - position: fixed; - width: 400px; & a:link { transition: color 0.12s cubic-bezier(0.42, 0.0, 1.0, 1.0); @@ -195,10 +188,18 @@ label[for=txt] { } +#metaTexts { + padding-top: 50px; +} + +header, #metaTexts { + flex-shrink: 0; +} + footer { font-size: 14px; - bottom: 20px; - left: 20px; + padding-top: 20px; + } #info { @@ -275,9 +276,9 @@ input[type=color] { border: 2px @border solid; } -/* Infobulle */ +/* Help message */ -#helpImg { +.helpImg { width: 20px; height: 20px; margin-bottom: -3px; @@ -323,25 +324,8 @@ input[type=color] { /* Media queries */ -@media (max-width: 1400px) { - .metaText { - width: 250px; - } -} - @media (max-width: 1050px) { - #metaTexts { - display: flex; - flex-direction: row; - } - - .metaText { - width: 100%; - position: static; - font-size: 20px; - } - #info { color: @text; margin-bottom: 20px; @@ -356,14 +340,6 @@ input[type=color] { @media (max-width: 850px) { - #metaTexts { - flex-direction: column; - width: 480px; - justify-content: center; - margin-left: auto; - margin-right: auto; - } - main { width: auto; } @@ -382,11 +358,7 @@ input[type=color] { } -@media (max-width: 500px) { // Version mobile - - #metaTexts { - width: auto; - } +@media (max-width: 500px) { // Mobile version #colors { flex-direction: column; diff --git a/style.min.css b/style.min.css index 75856e6..949919f 100644 --- a/style.min.css +++ b/style.min.css @@ -1 +1 @@ -*{font-family:"Ubuntu", sans-serif;scrollbar-color:white #2a2a2a;scrollbar-width:auto;}a{color:white;text-decoration:underline;}a:hover{text-decoration:none;}p{margin:0px;}#firstWrapper{display:flex;flex-direction:row;}#menusDeroulants{text-align:center;margin-left:20px;}#qrCode{max-width:480px;}.centered{text-align:center;}.bouton{padding:3px 10px 3px 10px;text-decoration:none;}form{display:block;margin-bottom:30px;}main{display:flex;flex-direction:column;justify-content:center;margin-left:auto;margin-right:auto;width:814px;}body{margin:18px;background-color:#2a2a2a;color:white;font-weight:normal;font-size:20px;}body h1{color:white;text-decoration:none;}label{font-size:20px;}header{text-align:center;padding:0px;margin:0px;height:64px;}#logo{width:64px;height:64px;}#titres{margin-left:20px;}h1,h2,h3,h4,h5,h6{margin:0px;font-weight:normal;}h1{font-size:33px;}h2{font-size:22px;}#lienTitres{text-align:left;justify-content:center;text-decoration:none;display:flex;flex-direction:row;}#showOnlyQR{margin-top:30px;}#titre{text-align:center;justify-content:center;}.param{padding:10px;padding-left:0px;margin-left:0px;padding-right:0px;margin-right:0px;}.conteneurInputColor{display:flex;flex-direction:row;justify-content:center;}::selection{color:#2a2a2a;background-color:white;}label[for=txt]{padding-left:22px;}#colors{display:flex;flex-direction:row;justify-content:space-between;text-align:center;}#colors .param{text-align:center;display:flex;justify-content:center;flex-direction:column;width:100%;}.metaText{color:#868686;text-align:left;transition:color 0.12s cubic-bezier(0.42,0.0,1.0,1.0);position:fixed;width:400px;}.metaText a:link{transition:color 0.12s cubic-bezier(0.42,0.0,1.0,1.0);color:#868686;text-decoration:underline;}.metaText:hover,.metaText:hover a:link{color:white;}footer{font-size:14px;bottom:20px;left:20px;}#info{font-size:16px;bottom:20px;right:20px;margin:0px;}#info h3{font-size:20px;font-weight:normal;padding-bottom:10px;}#redondancy,#margin,#txt,#size,input[type=color],input[type=submit],.bouton{border:2px #5f5f5f solid;border-radius:10px;font-size:20px;padding-left:10px;font-weight:normal;color:white;transition:border 0.1s linear;background-color:#31363b;margin-top:8px;}#redondancy:hover,#margin:hover,#txt:hover,#size:hover,input[type=color]:hover,input[type=submit]:hover,.bouton:hover{border:2px #808080 solid;}#redondancy:focus,#margin:focus,#txt:focus,#size:focus,input[type=color]:focus,input[type=submit]:focus,.bouton:focus{border:2px white solid;outline:none;}#redondancy,#size,#margin{background-color:#31363b;width:250px;height:40px;}#txt{background-color:#232629;color:white;padding:10px;margin:10px;width:500px;scrollbar-color:white #232629;scrollbar-width:auto;}input[type=submit]{font-size:28px;padding:10px;padding-left:14px;padding-right:14px;}#txt::placeholder{color:#868686;opacity:1;font-family:"Ubuntu", sans-serif;font-weight:normal;font-size:1em;}input[type=color]{height:60px;width:84px;padding:5px;border:2px #5f5f5f solid;}#helpImg{width:20px;height:20px;margin-bottom:-3px;margin-left:5px;}.boutonAide{height:0px;width:0px;color:#868686;cursor:help;font-size:0.8em;}.conteneurAide .contenuAide{position:absolute;transform:scale(0) rotate(-12deg);color:white;background:#151616;padding:15px;border-radius:10px;box-shadow:0 0 10px rgba(0,0,0,0.5);margin-top:23px;margin-left:-35px;transition:all .25s;opacity:0;max-width:500px;font-size:20px;text-align:left;}@media (max-width: 500px){.conteneurAide .contenuAide{position:fixed;margin:5px;left:0px;top:0px;}}.conteneurAide:hover .contenuAide,.conteneurAide:focus-within .contenuAide{transform:scale(1) rotate(0);opacity:1;}@media (max-width: 1400px){.metaText{width:250px;}}@media (max-width: 1050px){#metaTexts{display:flex;flex-direction:row;}.metaText{width:100%;position:static;font-size:20px;}#info{color:white;margin-bottom:20px;padding-top:30px;font-size:20px;}#info a:link{color:white;}}@media (max-width: 850px){#metaTexts{flex-direction:column;width:480px;justify-content:center;margin-left:auto;margin-right:auto;}main{width:auto;}#firstWrapper{flex-direction:column;}body{margin:10px;}#txt{width:92%;}}@media (max-width: 500px){#metaTexts{width:auto;}#colors{flex-direction:column;}h1{font-size:28px;padding-top:6px;}#txt{width:85%;}#qrCode{max-width:94%;}}@media (max-width: 415px){h1{padding:0px;}} \ No newline at end of file +*{font-family:"Ubuntu", sans-serif;scrollbar-color:white #2a2a2a;scrollbar-width:auto;}a{color:white;text-decoration:underline;}a:hover{text-decoration:none;}p{margin:0px;}#firstWrapper{display:flex;flex-direction:row;}#menusDeroulants{text-align:center;margin-left:20px;}#qrCode{max-width:480px;}.centered{text-align:center;}.bouton{padding:3px 10px 3px 10px;text-decoration:none;}form{flex-grow:1;margin-bottom:30px;}main{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;width:814px;height:99%;}body{margin:18px;background-color:#2a2a2a;color:white;font-weight:normal;font-size:20px;height:99%;}html{height:97%;}header{text-align:center;padding:0px;margin:0px;height:64px;}#logo{width:64px;height:64px;}#titres{margin-left:20px;}h1,h2,h3,h4,h5,h6{margin:0px;font-weight:normal;}h1{font-size:33px;}h2{font-size:22px;}#lienTitres{text-align:left;justify-content:center;text-decoration:none;display:flex;flex-direction:row;}#showOnlyQR{margin-top:30px;}#titre{text-align:center;justify-content:center;}.param{padding:10px;padding-left:0px;margin-left:0px;padding-right:0px;margin-right:0px;}.conteneurInputColor{display:flex;flex-direction:row;justify-content:center;}::selection{color:#2a2a2a;background-color:white;}label[for=txt]{padding-left:22px;}#colors{display:flex;flex-direction:row;justify-content:space-between;text-align:center;}#colors .param{text-align:center;display:flex;justify-content:center;flex-direction:column;width:100%;}.metaText{color:#bababa;text-align:left;transition:color 0.12s cubic-bezier(0.42,0.0,1.0,1.0);}.metaText a:link{transition:color 0.12s cubic-bezier(0.42,0.0,1.0,1.0);color:#bababa;text-decoration:underline;}.metaText:hover,.metaText:hover a:link{color:white;}#metaTexts{padding-top:50px;}header,#metaTexts{flex-shrink:0;}footer{font-size:14px;padding-top:20px;}#info{font-size:16px;bottom:20px;right:20px;margin:0px;}#info h3{font-size:20px;font-weight:normal;padding-bottom:10px;}#redondancy,#margin,#txt,#size,input[type=color],input[type=submit],.bouton{border:2px #5f5f5f solid;border-radius:10px;font-size:20px;padding-left:10px;font-weight:normal;color:white;transition:border 0.1s linear;background-color:#31363b;margin-top:8px;}#redondancy:hover,#margin:hover,#txt:hover,#size:hover,input[type=color]:hover,input[type=submit]:hover,.bouton:hover{border:2px #808080 solid;}#redondancy:focus,#margin:focus,#txt:focus,#size:focus,input[type=color]:focus,input[type=submit]:focus,.bouton:focus{border:2px white solid;outline:none;}#redondancy,#size,#margin{background-color:#31363b;width:250px;height:40px;}#txt{background-color:#232629;color:white;padding:10px;margin:10px;width:500px;scrollbar-color:white #232629;scrollbar-width:auto;}input[type=submit]{font-size:28px;padding:10px;padding-left:14px;padding-right:14px;}#txt::placeholder{color:#bababa;opacity:1;font-family:"Ubuntu", sans-serif;font-weight:normal;font-size:1em;}input[type=color]{height:60px;width:84px;padding:5px;border:2px #5f5f5f solid;}.helpImg{width:20px;height:20px;margin-bottom:-3px;margin-left:5px;}.boutonAide{height:0px;width:0px;color:#bababa;cursor:help;font-size:0.8em;}.conteneurAide .contenuAide{position:absolute;transform:scale(0) rotate(-12deg);color:white;background:#151616;padding:15px;border-radius:10px;box-shadow:0 0 10px rgba(0,0,0,0.5);margin-top:23px;margin-left:-35px;transition:all .25s;opacity:0;max-width:500px;font-size:20px;text-align:left;}@media (max-width: 500px){.conteneurAide .contenuAide{position:fixed;margin:5px;left:0px;top:0px;}}.conteneurAide:hover .contenuAide,.conteneurAide:focus-within .contenuAide{transform:scale(1) rotate(0);opacity:1;}@media (max-width: 1050px){#info{color:white;margin-bottom:20px;padding-top:30px;font-size:20px;}#info a:link{color:white;}}@media (max-width: 850px){main{width:auto;}#firstWrapper{flex-direction:column;}body{margin:10px;}#txt{width:92%;}}@media (max-width: 500px){#colors{flex-direction:column;}h1{font-size:28px;padding-top:6px;}#txt{width:85%;}#qrCode{max-width:94%;}}@media (max-width: 415px){h1{padding:0px;}} \ No newline at end of file From bca48487c2a363c3127f3b2031087d2f7452d0ac Mon Sep 17 00:00:00 2001 From: Miraty Date: Mon, 12 Oct 2020 18:55:58 +0200 Subject: [PATCH 04/13] More contrast with secondary texts --- themes/dark/theme.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/dark/theme.php b/themes/dark/theme.php index aec59e3..a10332f 100755 --- a/themes/dark/theme.php +++ b/themes/dark/theme.php @@ -11,5 +11,5 @@ $variablesTheme = array( "borderHover" => "#808080", "borderFocus" => "white", "text" => "white", - "secondaryText" => "#868686" + "secondaryText" => "#bababa" ); // Définit les couleurs du thème From 38f2edd4fba05b92ad4df1e116cf895f61dc3fd0 Mon Sep 17 00:00:00 2001 From: Miraty Date: Mon, 12 Oct 2020 18:57:02 +0200 Subject: [PATCH 05/13] Fix some translations --- locales/en.php | 12 ++++++------ locales/fr.php | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/locales/en.php b/locales/en.php index 350860b..43b2abf 100644 --- a/locales/en.php +++ b/locales/en.php @@ -15,8 +15,8 @@ $loc = array( 'value_default' => "default", 'help_content' => " - You can encode what you want as text.
- Softwares which decodes these QR codes could suggest to open them with dedicated software, depending on their URI scheme.

+ You can only encode whatever text you want.
+ Softwares which decode these QR codes could suggest to open them with dedicated software, depending on their URI scheme.

For instance, to open a webpage:
https://www.domain.tld/

To send an email:
@@ -33,14 +33,14 @@ $loc = array( 'button_create' => "Generate", 'button_download' => "Download this QR code", - 'title_showOnlyQR' => "Show only this QR code", + 'title_showOnlyQR' => "Show this QR code only", 'metaText_qr' => " -

What's a QR code ?

- A QR code is a 2 dimensions barcode in which is written in binary text. It can be decoded with a device equipped with a photo sensor and an adequate software. +

What's a QR code?

+ A QR code is a 2 dimensions barcode in which a text is written in binary. It can be decoded with a device equipped with a photo sensor and an adequate software. QR code on Wikipedia ", - 'metaText_legal' => "LibreQR 1.2.0 is a free software whose source code is available under the terms of the AGPLv3+.", + 'metaText_legal' => "LibreQR 1.2.0 is a free software whose source code is available under the terms of the AGPLv3+.", 'opensearch_description' => "Generate QR codes from your search or address bar", 'opensearch_actionName' => "Generate QR codes from your search or address bar", diff --git a/locales/fr.php b/locales/fr.php index bb04b5d..680aadc 100644 --- a/locales/fr.php +++ b/locales/fr.php @@ -37,11 +37,11 @@ $loc = array( 'metaText_qr' => "

Qu'est-ce qu'un code QR ?

- 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. + Un code QR est un code-barres en 2 dimensions dans lequel du texte est inscrit en binaire. Il peut être décodé avec un appareil muni d'un capteur photo et d'un logiciel adéquat. Code QR sur Wikipédia ", 'metaText_legal' => "LibreQR 1.2.0 est un logiciel libre dont le code source est disponible selon les termes de l'AGPLv3+.", 'opensearch_description' => "Générez des codes QR depuis votre barre de recherche ou d'adresse", - 'opensearch_actionName' => "Generate QR codes from your search or address bar", + 'opensearch_actionName' => "Générez des codes QR depuis votre barre de recherche ou d'adresse", ); From 405e073d9f8d9daa5a69e03fb84dab4d74e8e499 Mon Sep 17 00:00:00 2001 From: Miraty Date: Sun, 25 Oct 2020 18:02:57 +0100 Subject: [PATCH 06/13] Add config.yaml.php and translate some strings of code in english --- config.inc.php | 11 +++++--- config.yaml.php | 11 ++++++++ help.svg.php | 2 +- inc.php | 16 +++++------ index.php | 66 ++++++++++++++++++++++---------------------- locales/en.php | 6 +++- locales/fr.php | 6 +++- locales/template.php | 9 ++++++ style.less | 41 +++++++++++---------------- style.min.css | 2 +- 10 files changed, 96 insertions(+), 74 deletions(-) create mode 100644 config.yaml.php diff --git a/config.inc.php b/config.inc.php index e315db4..b4b42f8 100755 --- a/config.inc.php +++ b/config.inc.php @@ -5,9 +5,9 @@ // EN: Time in seconds after which the QR code will be deleted when a page loads. // Default: 60 * 60 * 24 * 7 (one week) -// FR : Temps en secondes après lequel le code QR sera supprimé lors du chargement d'un page. +// FR : Temps en secondes après lequel le code QR sera supprimé lors du chargement d'une page. // Par défaut : 60 * 60 * 24 * 7 (une semaine) -deleteOldQR(60 * 60 * 24 * 7); +$timeBeforeDeletion = 60 * 60 * 24 * 7; // EN: Theme's name (must be in the themes directory) // FR : Nom du thème (doit être dans le dossier themes) @@ -15,7 +15,7 @@ $theme = "dark"; // EN: Language used if those requested by the user are not available // FR : Langue utilisée si celles demandées par l'utilisateurice ne sont pas disponibles -$locale = "en"; // en || fr +$locale = "en"; // EN: Should the locales requested by the user be ignored? // FR : Faut-il ignorer les langues demandées par l'utilisateurice ? @@ -25,4 +25,7 @@ $forceLocale = false; // FR : Longueur du nom du fichier du code QR $fileNameLenght = 32; -//$customText = "This LibreQR instance is hosted by foo."; +// EN: Will be printed at the bottom of the interface +// FR : Sera affiché en bas de l'interface +$customTextEnabled = false; +$customText = "This LibreQR instance is hosted by foo."; diff --git a/config.yaml.php b/config.yaml.php new file mode 100644 index 0000000..8d5dea1 --- /dev/null +++ b/config.yaml.php @@ -0,0 +1,11 @@ + +libreqrVersion: "" +timeBeforeDeletion: +theme: "" +locale: "" +forceLocale: "" +fileNameLenght: diff --git a/help.svg.php b/help.svg.php index 992a115..c725879 100755 --- a/help.svg.php +++ b/help.svg.php @@ -3,7 +3,7 @@ - + diff --git a/inc.php b/inc.php index cfca77f..af193a6 100644 --- a/inc.php +++ b/inc.php @@ -2,7 +2,9 @@ require "config.inc.php"; -// Defines the locale used +$libreqrVersion = "1.3.0-dev"; + +// Defines the locale to be used if ($forceLocale == false) { $clientLocales = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $clientLocales = preg_replace("#[A-Z0-9]|q=|;|-|\.#", "", $clientLocales); @@ -40,12 +42,10 @@ function generateRandomString($length) { } // Deletes images in temp/ older than the specified time in seconds -function deleteOldQR($deleteAfter) { - $files = array_diff(scandir("temp"), array('..', '.', '.gitkeep')); - foreach($files as $file) { - // If this actual time (in Posix time) less last modification image date is greater than time asked - if ((time() - filemtime("temp/" . $file)) > $deleteAfter) { - unlink("temp/" . $file); // Deletes this image - } +$files = array_diff(scandir("temp"), array('..', '.', '.gitkeep')); +foreach($files as $file) { + // If the current time (in Posix time) minus the date of last modification of the file is higher than specified time + if ((time() - filemtime("temp/" . $file)) > $timeBeforeDeletion) { + unlink("temp/" . $file); // Deletes this image } } diff --git a/index.php b/index.php index c93c8af..b3e9d4f 100755 --- a/index.php +++ b/index.php @@ -122,9 +122,9 @@ if (badQuery()) {
- - -
+ + +

LibreQR

@@ -137,9 +137,9 @@ if (badQuery()) {
- - " alt="Aide"> - + + " alt=""> + @@ -157,9 +157,9 @@ if (badQuery()) {
- - " alt="Aide"> - + + " alt=""> +
@@ -191,9 +191,9 @@ if (badQuery()) {
- - " alt="Aide"> - + + " alt=""> +
">
-
+
">
- +
@@ -248,33 +248,33 @@ if (badQuery()) { QRcode::png($_GET['txt'], $cheminImage, $_GET['redondancy'], $_GET['size'], $_GET['margin'], false, hexdec($_GET['bgColor']), hexdec($_GET['mainColor'])); ?>
- +
-
+
-
- -
+
+ +
-
-

- -

- -
-

- -

+ +
+ +
+ +
+ +
+
diff --git a/locales/en.php b/locales/en.php index 43b2abf..8c84e83 100644 --- a/locales/en.php +++ b/locales/en.php @@ -35,12 +35,16 @@ $loc = array( 'title_showOnlyQR' => "Show this QR code only", + 'alt_help' => "Help", + 'alt_QR_before' => 'QR code meaning "', + 'alt_QR_after' => '"', + 'metaText_qr' => "

What's a QR code?

A QR code is a 2 dimensions barcode in which a text is written in binary. It can be decoded with a device equipped with a photo sensor and an adequate software. QR code on Wikipedia ", - 'metaText_legal' => "LibreQR 1.2.0 is a free software whose source code is available under the terms of the AGPLv3+.", + 'metaText_legal' => "LibreQR " . $libreqrVersion . " is a free software whose source code is available under the terms of the AGPLv3+.", 'opensearch_description' => "Generate QR codes from your search or address bar", 'opensearch_actionName' => "Generate QR codes from your search or address bar", diff --git a/locales/fr.php b/locales/fr.php index 680aadc..3ff10ca 100644 --- a/locales/fr.php +++ b/locales/fr.php @@ -35,12 +35,16 @@ $loc = array( 'title_showOnlyQR' => "Afficher uniquement ce code QR", + 'alt_help' => "Aide", + 'alt_QR_before' => "Code QR signifiant « ", + 'alt_QR_after' => " »", + 'metaText_qr' => "

Qu'est-ce qu'un code QR ?

Un code QR est un code-barres en 2 dimensions dans lequel du texte est inscrit en binaire. Il peut être décodé avec un appareil muni d'un capteur photo et d'un logiciel adéquat. Code QR sur Wikipédia ", - 'metaText_legal' => "LibreQR 1.2.0 est un logiciel libre dont le code source est disponible selon les termes de l'AGPLv3+.", + 'metaText_legal' => "LibreQR " . $libreqrVersion . " est un logiciel libre dont le code source est disponible selon les termes de l'AGPLv3+.", 'opensearch_description' => "Générez des codes QR depuis votre barre de recherche ou d'adresse", 'opensearch_actionName' => "Générez des codes QR depuis votre barre de recherche ou d'adresse", diff --git a/locales/template.php b/locales/template.php index 9082c92..05e1f10 100644 --- a/locales/template.php +++ b/locales/template.php @@ -1,6 +1,8 @@ "subtitle", + 'description' => "description", + 'label_content' => "label_content", 'label_redondancy' => "label_redondancy", 'label_margin' => "label_margin", @@ -22,6 +24,13 @@ $loc = array( 'title_showOnlyQR' => "title_showOnlyQR", + 'alt_help' => "alt_help", + 'alt_QR_before' => "alt_QR_before", + 'alt_QR_after' => "alt_QR_after", + 'metaText_qr' => "metaText_qr", 'metaText_legal' => "metaText_legal", + + 'opensearch_description' => "opensearch_description", + 'opensearch_actionName' => "opensearch_actionName", ); diff --git a/style.less b/style.less index 5b23384..fafe26a 100755 --- a/style.less +++ b/style.less @@ -34,7 +34,7 @@ a { } p { - margin: 0px; + margin: 10px; } #firstWrapper { @@ -55,7 +55,7 @@ p { text-align: center; } -.bouton { +.button { padding: 3px 10px 3px 10px; text-decoration: none; } @@ -99,7 +99,7 @@ header { height: 64px; } -#titres { +#titles { margin-left: 20px; } @@ -116,7 +116,7 @@ h2 { font-size: 22px; } -#lienTitres { +#linkTitles { text-align: left; justify-content: center; text-decoration: none; @@ -128,11 +128,6 @@ h2 { margin-top: 30px; } -#titre { - text-align: center; - justify-content: center; -} - .param { padding: 10px; padding-left: 0px; @@ -141,7 +136,7 @@ h2 { margin-right: 0px; } -.conteneurInputColor { +.inputColorContainer { display: flex; flex-direction: row; justify-content: center; @@ -173,33 +168,29 @@ label[for=txt] { .metaText { color: @secondaryText; - text-align: left; transition: color 0.12s cubic-bezier(0.42, 0.0, 1.0, 1.0); + padding: 6px; - & a:link { + & a, a:visited { transition: color 0.12s cubic-bezier(0.42, 0.0, 1.0, 1.0); color: @secondaryText; text-decoration: underline; } - &:hover, &:hover a:link { + &:hover, &:hover a { color: @text; } } -#metaTexts { - padding-top: 50px; -} - -header, #metaTexts { - flex-shrink: 0; -} - footer { font-size: 14px; padding-top: 20px; + text-align: left; +} +header, footer { + flex-shrink: 0; } #info { @@ -217,7 +208,7 @@ footer { /* Inputs */ -#redondancy, #margin, #txt, #size, input[type=color], input[type=submit], .bouton { +#redondancy, #margin, #txt, #size, input[type=color], input[type=submit], .button { border: 2px @border solid; border-radius: 10px; font-size: 20px; @@ -285,7 +276,7 @@ input[type=color] { margin-left: 5px; } -.boutonAide { +.helpButton { height: 0px; width: 0px; color: @secondaryText; @@ -293,7 +284,7 @@ input[type=color] { font-size: 0.8em; } -.conteneurAide .contenuAide { +.helpContainer .helpContent { position: absolute; transform: scale(0) rotate(-12deg); color: @text; @@ -317,7 +308,7 @@ input[type=color] { } } -.conteneurAide:hover .contenuAide, .conteneurAide:focus-within .contenuAide { +.helpContainer:hover .helpContent, .helpContainer:focus-within .helpContent { transform: scale(1) rotate(0); opacity: 1; } diff --git a/style.min.css b/style.min.css index 949919f..9c9c027 100644 --- a/style.min.css +++ b/style.min.css @@ -1 +1 @@ -*{font-family:"Ubuntu", sans-serif;scrollbar-color:white #2a2a2a;scrollbar-width:auto;}a{color:white;text-decoration:underline;}a:hover{text-decoration:none;}p{margin:0px;}#firstWrapper{display:flex;flex-direction:row;}#menusDeroulants{text-align:center;margin-left:20px;}#qrCode{max-width:480px;}.centered{text-align:center;}.bouton{padding:3px 10px 3px 10px;text-decoration:none;}form{flex-grow:1;margin-bottom:30px;}main{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;width:814px;height:99%;}body{margin:18px;background-color:#2a2a2a;color:white;font-weight:normal;font-size:20px;height:99%;}html{height:97%;}header{text-align:center;padding:0px;margin:0px;height:64px;}#logo{width:64px;height:64px;}#titres{margin-left:20px;}h1,h2,h3,h4,h5,h6{margin:0px;font-weight:normal;}h1{font-size:33px;}h2{font-size:22px;}#lienTitres{text-align:left;justify-content:center;text-decoration:none;display:flex;flex-direction:row;}#showOnlyQR{margin-top:30px;}#titre{text-align:center;justify-content:center;}.param{padding:10px;padding-left:0px;margin-left:0px;padding-right:0px;margin-right:0px;}.conteneurInputColor{display:flex;flex-direction:row;justify-content:center;}::selection{color:#2a2a2a;background-color:white;}label[for=txt]{padding-left:22px;}#colors{display:flex;flex-direction:row;justify-content:space-between;text-align:center;}#colors .param{text-align:center;display:flex;justify-content:center;flex-direction:column;width:100%;}.metaText{color:#bababa;text-align:left;transition:color 0.12s cubic-bezier(0.42,0.0,1.0,1.0);}.metaText a:link{transition:color 0.12s cubic-bezier(0.42,0.0,1.0,1.0);color:#bababa;text-decoration:underline;}.metaText:hover,.metaText:hover a:link{color:white;}#metaTexts{padding-top:50px;}header,#metaTexts{flex-shrink:0;}footer{font-size:14px;padding-top:20px;}#info{font-size:16px;bottom:20px;right:20px;margin:0px;}#info h3{font-size:20px;font-weight:normal;padding-bottom:10px;}#redondancy,#margin,#txt,#size,input[type=color],input[type=submit],.bouton{border:2px #5f5f5f solid;border-radius:10px;font-size:20px;padding-left:10px;font-weight:normal;color:white;transition:border 0.1s linear;background-color:#31363b;margin-top:8px;}#redondancy:hover,#margin:hover,#txt:hover,#size:hover,input[type=color]:hover,input[type=submit]:hover,.bouton:hover{border:2px #808080 solid;}#redondancy:focus,#margin:focus,#txt:focus,#size:focus,input[type=color]:focus,input[type=submit]:focus,.bouton:focus{border:2px white solid;outline:none;}#redondancy,#size,#margin{background-color:#31363b;width:250px;height:40px;}#txt{background-color:#232629;color:white;padding:10px;margin:10px;width:500px;scrollbar-color:white #232629;scrollbar-width:auto;}input[type=submit]{font-size:28px;padding:10px;padding-left:14px;padding-right:14px;}#txt::placeholder{color:#bababa;opacity:1;font-family:"Ubuntu", sans-serif;font-weight:normal;font-size:1em;}input[type=color]{height:60px;width:84px;padding:5px;border:2px #5f5f5f solid;}.helpImg{width:20px;height:20px;margin-bottom:-3px;margin-left:5px;}.boutonAide{height:0px;width:0px;color:#bababa;cursor:help;font-size:0.8em;}.conteneurAide .contenuAide{position:absolute;transform:scale(0) rotate(-12deg);color:white;background:#151616;padding:15px;border-radius:10px;box-shadow:0 0 10px rgba(0,0,0,0.5);margin-top:23px;margin-left:-35px;transition:all .25s;opacity:0;max-width:500px;font-size:20px;text-align:left;}@media (max-width: 500px){.conteneurAide .contenuAide{position:fixed;margin:5px;left:0px;top:0px;}}.conteneurAide:hover .contenuAide,.conteneurAide:focus-within .contenuAide{transform:scale(1) rotate(0);opacity:1;}@media (max-width: 1050px){#info{color:white;margin-bottom:20px;padding-top:30px;font-size:20px;}#info a:link{color:white;}}@media (max-width: 850px){main{width:auto;}#firstWrapper{flex-direction:column;}body{margin:10px;}#txt{width:92%;}}@media (max-width: 500px){#colors{flex-direction:column;}h1{font-size:28px;padding-top:6px;}#txt{width:85%;}#qrCode{max-width:94%;}}@media (max-width: 415px){h1{padding:0px;}} \ No newline at end of file +*{font-family:"Ubuntu", sans-serif;scrollbar-color:white #2a2a2a;scrollbar-width:auto;}a{color:white;text-decoration:underline;}a:hover{text-decoration:none;}p{margin:10px;}#firstWrapper{display:flex;flex-direction:row;}#menusDeroulants{text-align:center;margin-left:20px;}#qrCode{max-width:480px;}.centered{text-align:center;}.button{padding:3px 10px 3px 10px;text-decoration:none;}form{flex-grow:1;margin-bottom:30px;}main{display:flex;flex-direction:column;margin-left:auto;margin-right:auto;width:814px;height:99%;}body{margin:18px;background-color:#2a2a2a;color:white;font-weight:normal;font-size:20px;height:99%;}html{height:97%;}header{text-align:center;padding:0px;margin:0px;height:64px;}#logo{width:64px;height:64px;}#titles{margin-left:20px;}h1,h2,h3,h4,h5,h6{margin:0px;font-weight:normal;}h1{font-size:33px;}h2{font-size:22px;}#linkTitles{text-align:left;justify-content:center;text-decoration:none;display:flex;flex-direction:row;}#showOnlyQR{margin-top:30px;}.param{padding:10px;padding-left:0px;margin-left:0px;padding-right:0px;margin-right:0px;}.inputColorContainer{display:flex;flex-direction:row;justify-content:center;}::selection{color:#2a2a2a;background-color:white;}label[for=txt]{padding-left:22px;}#colors{display:flex;flex-direction:row;justify-content:space-between;text-align:center;}#colors .param{text-align:center;display:flex;justify-content:center;flex-direction:column;width:100%;}.metaText{color:#bababa;transition:color 0.12s cubic-bezier(0.42,0.0,1.0,1.0);padding:6px;}.metaText a,.metaText a:visited{transition:color 0.12s cubic-bezier(0.42,0.0,1.0,1.0);color:#bababa;text-decoration:underline;}.metaText:hover,.metaText:hover a{color:white;}footer{font-size:14px;padding-top:20px;text-align:left;}header,footer{flex-shrink:0;}#info{font-size:16px;bottom:20px;right:20px;margin:0px;}#info h3{font-size:20px;font-weight:normal;padding-bottom:10px;}#redondancy,#margin,#txt,#size,input[type=color],input[type=submit],.button{border:2px #5f5f5f solid;border-radius:10px;font-size:20px;padding-left:10px;font-weight:normal;color:white;transition:border 0.1s linear;background-color:#31363b;margin-top:8px;}#redondancy:hover,#margin:hover,#txt:hover,#size:hover,input[type=color]:hover,input[type=submit]:hover,.button:hover{border:2px #808080 solid;}#redondancy:focus,#margin:focus,#txt:focus,#size:focus,input[type=color]:focus,input[type=submit]:focus,.button:focus{border:2px white solid;outline:none;}#redondancy,#size,#margin{background-color:#31363b;width:250px;height:40px;}#txt{background-color:#232629;color:white;padding:10px;margin:10px;width:500px;scrollbar-color:white #232629;scrollbar-width:auto;}input[type=submit]{font-size:28px;padding:10px;padding-left:14px;padding-right:14px;}#txt::placeholder{color:#bababa;opacity:1;font-family:"Ubuntu", sans-serif;font-weight:normal;font-size:1em;}input[type=color]{height:60px;width:84px;padding:5px;border:2px #5f5f5f solid;}.helpImg{width:20px;height:20px;margin-bottom:-3px;margin-left:5px;}.helpButton{height:0px;width:0px;color:#bababa;cursor:help;font-size:0.8em;}.helpContainer .helpContent{position:absolute;transform:scale(0) rotate(-12deg);color:white;background:#151616;padding:15px;border-radius:10px;box-shadow:0 0 10px rgba(0,0,0,0.5);margin-top:23px;margin-left:-35px;transition:all .25s;opacity:0;max-width:500px;font-size:20px;text-align:left;}@media (max-width: 500px){.helpContainer .helpContent{position:fixed;margin:5px;left:0px;top:0px;}}.helpContainer:hover .helpContent,.helpContainer:focus-within .helpContent{transform:scale(1) rotate(0);opacity:1;}@media (max-width: 1050px){#info{color:white;margin-bottom:20px;padding-top:30px;font-size:20px;}#info a:link{color:white;}}@media (max-width: 850px){main{width:auto;}#firstWrapper{flex-direction:column;}body{margin:10px;}#txt{width:92%;}}@media (max-width: 500px){#colors{flex-direction:column;}h1{font-size:28px;padding-top:6px;}#txt{width:85%;}#qrCode{max-width:94%;}}@media (max-width: 415px){h1{padding:0px;}} \ No newline at end of file From 57c8594818f63db7ae879d7dd56210efe2bcf191 Mon Sep 17 00:00:00 2001 From: Miraty Date: Sat, 31 Oct 2020 16:46:31 +0100 Subject: [PATCH 07/13] Move style.min.css to temp/style.min.css --- index.php | 10 +++++----- style.min.css | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) delete mode 100644 style.min.css diff --git a/index.php b/index.php index b3e9d4f..a32d1ca 100755 --- a/index.php +++ b/index.php @@ -95,19 +95,19 @@ if (badQuery()) { filemtime("style.min.css") OR filemtime("config.inc.php") > filemtime("style.min.css")) + if (filemtime("themes/" . $theme . "/theme.php") > filemtime("temp/style.min.css") OR filemtime("config.inc.php") > filemtime("temp/style.min.css")) // Then delete it - unlink("style.min.css"); + unlink("temp/style.min.css"); require "lesserphp/lessc.inc.php"; $less = new lessc; $less->setVariables($variablesTheme); // Make these colors available in style.less $less->setFormatter("compressed"); - $less->checkedCompile("style.less", "style.min.css"); // Compile, minimise and cache style.less into style.min.css + $less->checkedCompile("style.less", "temp/style.min.css"); // Compile, minimise and cache style.less into style.min.css ?> - + Date: Sat, 31 Oct 2020 16:49:27 +0100 Subject: [PATCH 08/13] Fix meta text with small resolutions --- CHANGELOG.md | 1 + style.less | 14 -------------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09a833b..b116a1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed * Use lesserphp instead of lessphp +* Move license info and "What's a QR code" at to bottom of the page ## 1.2.0 - 2020-03-23 diff --git a/style.less b/style.less index fafe26a..1eccd2c 100755 --- a/style.less +++ b/style.less @@ -315,20 +315,6 @@ input[type=color] { /* Media queries */ -@media (max-width: 1050px) { - - #info { - color: @text; - margin-bottom: 20px; - padding-top: 30px; - font-size: 20px; - - & a:link { - color: @text; - } - } -} - @media (max-width: 850px) { main { From a3f5f353b2d48fdaeca76849d2e9a460e8b5fe03 Mon Sep 17 00:00:00 2001 From: Miraty Date: Sat, 31 Oct 2020 16:51:05 +0100 Subject: [PATCH 09/13] Simplify touching help text with touch-screen --- style.less | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/style.less b/style.less index 1eccd2c..1373a1a 100755 --- a/style.less +++ b/style.less @@ -270,21 +270,27 @@ input[type=color] { /* Help message */ .helpImg { - width: 20px; - height: 20px; + width: 22px; + height: 22px; margin-bottom: -3px; - margin-left: 5px; + display: inline-block; } .helpButton { - height: 0px; - width: 0px; + height: 22px; + width: 22px; color: @secondaryText; cursor: help; font-size: 0.8em; + display: inline-block; } -.helpContainer .helpContent { +.helpContainer { + display: inline-block; + margin-left: 5px; +} + +.helpContent { position: absolute; transform: scale(0) rotate(-12deg); color: @text; From b59827821e7a097a12035e47239bcdd008ab4890 Mon Sep 17 00:00:00 2001 From: Miraty Date: Sat, 31 Oct 2020 16:51:50 +0100 Subject: [PATCH 10/13] Translate the README --- README.md | 103 ++++++++++++++++++++++++++++----------------------- README_fr.md | 100 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+), 47 deletions(-) create mode 100644 README_fr.md diff --git a/README.md b/README.md index b818c22..9f56190 100755 --- a/README.md +++ b/README.md @@ -1,92 +1,101 @@ # ![](themes/dark/icons/32.png) LibreQR -## Présentation +[Lire ceci en français](README_fr.md) -Une interface Web pour générer des codes QR en PHP. +A PHP Web interface for generating QR codes. -## Démo +## Demo -Une instance de ce service est disponible à l'adresse [https://qr.antopie.org](https://qr.antopie.org). +A LibreQR instance is available at . -## Fonctionnement +## How it works -LibreQR inclus un plugin [OpenSearch](https://developer.mozilla.org/docs/Web/OpenSearch), ce qui permet de l'ajouter comme moteur de recherche dans Firefox et de sauvegarder vos paramètres. -Vous pouvez ainsi générer un code QR directement depuis la barre de recherche avec les réglages de LibreQR utilisés lors de l'ajout comme moteur de recherche. +LibreQR includes an [OpenSearch](https://developer.mozilla.org/docs/Web/OpenSearch) plugin, which allows to add it as a search engine in Firefox and to save settings. +You can thus generate a QR code directly from your search bar with the LibreQR's settings used at the time of adding as search engine. -Un [WebManifest](https://developer.mozilla.org/docs/Web/Manifest) est également inclus, ce qui permet de mieux l'intégrer au système via Fennec (Firefox Android) ou Chromium. +A [WebManifest](https://developer.mozilla.org/docs/Web/Manifest) is also included, which allows better system integration using Fennec (Firefox Android) ou Chromium. -Les codes QR générés sont placés dans le dossier temp/, nommés avec le nombre de caractères aléatoires indiqué dans config.inc.php (32 par défaut), puis supprimés après le temps indiqué dans config.inc.php (7 jours par défaut). +QR codes generated are located in the temp/ directory, named with the number of random characters set in config.inc.php (32 by default), and then deleted after the time set in config.inc.php (7 days by default). + +See `config.inc.php` for more settings. ## Installation -### Générique +### Generic -Je développe directement dans master, donc en production téléchargez plutôt une version stable dans [l'onglet Versions](https://code.antopie.org/miraty/libreqr/releases). +Just place this source code in a Web server with PHP. -Placez ce code source dans un serveur Web avec PHP, tout simplement. +`wget https://code.antopie.org/miraty/libreqr/archive/1.2.0.zip` + +GD extension is required. + +`apt install php7.3-gd` + +LibreQR need writing rights on the `temp/` directory. + +``` +chown -R www-data:www-data /var/www/libreqr/temp +chmod -R 600 /var/www/libreqr/temp +``` ### YunoHost -J'ai créé [un paquet](https://code.antopie.org/miraty/qr_ynh/) pour [YunoHost](https://yunohost.org/). +There is [a package](https://code.antopie.org/miraty/qr_ynh/) for [YunoHost](https://yunohost.org/). -Vous pouvez l'installer depuis l'interface Web d'administration ou avec cette commande : +For historical reasons, LibreQR is technically named `qr` in YunoHost. + +You can install it from the WebAdmin or with this command : ``` sudo yunohost app install qr ``` -## Thèmes +## Themes -### Changer de thème +### Change theme -Dans config.inc.php, donnez à $theme le nom du thème voulu. +In config.inc.php, set $theme to the wanted theme. -Par défaut, trois thèmes sont proposés : +By default, 3 themes are offered: -* dark, le thème par défaut, sombre. Il est utilisé ici : -* light, thème clair -* parinux, un thème bleu, créé pour [Bastet](https://bastet.parinux.org), le CHATON de [Parinux](https://parinux.org). Il est utilisé ici : +* dark, the default dark theme. Used here: +* light, the light theme. +* parinux, a blue theme, made for [Bastet](https://bastet.parinux.org), the [Parinux](https://parinux.org)'s CHATON. Used here: -### Créer un thème +### Make a theme -* Copiez themes/dark vers themes/[nom de votre thème] -* Complétez theme.php en fonction des couleurs CSS voulues dans l'interface -* Modifiez l'image source.png en fonction de votre thème +* Copy themes/dark to themes/[new theme's name] +* Fill theme.php according to CSS colors you want +* Change the source.png image according to your theme +* To automatically generate favicons with the rights sizes, use `php themes/resize.php [theme's name]` -* Pour générer automatiquement les icônes aux tailles correctes, utilisez +This last step will need [ImageMagick](https://imagemagick.org) and [pngquant](https://pngquant.org) to be installed. -``` -php themes/resize.php [nom de votre thème] -``` +```apt install imagemagick pngquant``` -Cela nécessitera d'avoir installé [ImageMagick](https://imagemagick.org) et [pngquant](https://pngquant.org). +## Contribute -## Contribuer - -Si vous souhaitez rapporter un bug, vous pouvez ouvrir un ticket sur après vous être créé un compte (méthode préférée) ou me contacter d'une autre manière. +If you want to report a bug, you can open an issue at after creating an account (prefered method) or contact me in another way. ## Contact -Si vous voulez me contacter, par exemple pour demander un éclaircissement sur le fonctionnement de LibreQR ou pour signaler un bug, vous pouvez le faire par : +If you want to contact me, for instance to report a bug or ask me a question about installing or using LibreQR, you can get my contact details on . -* Matrix : @miraty:matrix.antopie.org -* courriel : [miraty+libreqr@antopie.org](mailto:miraty+libreqr@antopie.org) (GPG : [B16B 12A8 957B 2EC7 9659 04A6 B82D 15F0 3E67 B2B5](https://miraty.antopie.org/B16B12A8957B2EC7965904A6B82D15F03E67B2B5.asc)) -* le Fédiverse : [@Miraty@oc.todon.fr](https://oc.todon.fr/@Miraty) +## Libraries -## Bibliothèques tierces +This source code includes: -Ce code source inclus : +* [phpqrcode](https://github.com/t0k4rt/phpqrcode) to generate QR codes +* [Ubuntu font for the Web](https://github.com/earaujoassis/ubuntu-fontface) +* [lesserphp](https://github.com/MarcusSchwarz/lesserphp) to compile [Less](http://lesscss.org) -* [phpqrcode](https://github.com/t0k4rt/phpqrcode) pour générer les codes QR -* [La police Ubuntu packagée pour le Web](https://github.com/earaujoassis/ubuntu-fontface) -* [lesserphp](https://github.com/MarcusSchwarz/lesserphp) pour compiler le [Less](http://lesscss.org) - -## Licence +## License [AGPLv3+](https://code.antopie.org/miraty/libreqr/src/branch/master/LICENSE) -LibreQR est un logiciel libre ; vous pouvez le diffuser et le modifier suivant les termes de la GNU Affero General Public License telle que publiée par la Free Software Foundation ; soit la version 3 de cette licence, soit (à votre convenance) une version ultérieure. +LibreQR is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. -LibreQR est diffusé dans l’espoir qu’il sera utile, mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIALISATION ou d’ADÉQUATION À UN USAGE PARTICULIER. Voyez la GNU Affero General Public License pour plus de détails. +LibreQR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. -Vous devriez avoir reçu une copie de la GNU Affero General Public License avec ce code. Sinon, consultez +You should have received a copy of the GNU Affero General Public License along with this program. If not, see . diff --git a/README_fr.md b/README_fr.md new file mode 100644 index 0000000..50553d5 --- /dev/null +++ b/README_fr.md @@ -0,0 +1,100 @@ +# ![](themes/dark/icons/32.png) LibreQR + +[Read this in english](README.md) + +Une interface Web en PHP pour générer des codes QR. + +## Démo + +Une instance de LibreQR est disponible sur . + +## Fonctionnement + +LibreQR inclus un plugin [OpenSearch](https://developer.mozilla.org/docs/Web/OpenSearch), ce qui permet de l'ajouter comme moteur de recherche dans Firefox et de sauvegarder vos paramètres. +Vous pouvez ainsi générer un code QR directement depuis la barre de recherche avec les réglages de LibreQR utilisés lors de l'ajout comme moteur de recherche. + +Un [WebManifest](https://developer.mozilla.org/docs/Web/Manifest) est également inclus, ce qui permet de mieux l'intégrer au système via Fennec (Firefox Android) ou Chromium. + +Les codes QR générés sont placés dans le dossier temp/, nommés avec le nombre de caractères aléatoires indiqué dans config.inc.php (32 par défaut), puis supprimés après le temps indiqué dans config.inc.php (7 jours par défaut). + +Voir `config.inc.php` pour plus de paramètres. + +## Installation + +### Générique + +Placez simplement ce code source dans un serveur Web avec PHP. + +`wget https://code.antopie.org/miraty/libreqr/archive/1.2.0.zip` + +L'extension GD est requise. + +`apt install php7.3-gd` + +LibreQR a besoin des permissions d'écriture dans le dossier `temp/`. + +``` +chown -R www-data:www-data /var/www/libreqr/temp +chmod -R 600 /var/www/libreqr/temp +``` + +### YunoHost + +Il y a [un paquet](https://code.antopie.org/miraty/qr_ynh/) pour [YunoHost](https://yunohost.org/). + +Pour des raisons historiques, LibreQR est techniquement nommée `qr` dans YunoHost. + +Vous pouvez l'installer depuis l'interface Web d'administration ou avec cette commande : + +``` +sudo yunohost app install qr +``` + +## Thèmes + +### Changer de thème + +Dans config.inc.php, donnez à $theme le nom du thème voulu. + +Par défaut, trois thèmes sont proposés : + +* dark, le thème par défaut, sombre. Il est utilisé ici : +* light, thème clair +* parinux, un thème bleu, créé pour [Bastet](https://bastet.parinux.org), le CHATON de [Parinux](https://parinux.org). Il est utilisé ici : + +### Créer un thème + +* Copiez themes/dark vers themes/[nom de votre thème] +* Complétez theme.php en fonction des couleurs CSS voulues dans l'interface +* Modifiez l'image source.png en fonction de votre thème +* Pour générer automatiquement les icônes aux tailles correctes, utilisez `php themes/resize.php [nom du thème]` + +Cette dernière étape nécessite d'avoir installé [ImageMagick](https://imagemagick.org) et [pngquant](https://pngquant.org). + +```apt install imagemagick pngquant``` + +## Contribuer + +Si vous souhaitez rapporter un bug, vous pouvez ouvrir un ticket sur après vous être créé un compte (méthode préférée) ou me contacter d'une autre manière. + +## Contact + +Si vous voulez me contacter, par exemple pour signaler un bug ou me poser une question sur l'installation ou l'utilisation de LibreQR, vous trouverez des moyens de me contacter sur . + +## Bibliothèques tierces + +Ce code source inclus : + +* [phpqrcode](https://github.com/t0k4rt/phpqrcode) pour générer les codes QR +* [La police Ubuntu pour le Web](https://github.com/earaujoassis/ubuntu-fontface) +* [lesserphp](https://github.com/MarcusSchwarz/lesserphp) pour compiler le [Less](http://lesscss.org) + +## Licence + +[AGPLv3+](https://code.antopie.org/miraty/libreqr/src/branch/master/LICENSE) + +LibreQR est un logiciel libre ; vous pouvez le diffuser et le modifier suivant les termes de la GNU Affero General Public License telle que publiée par la Free Software Foundation ; soit la version 3 de cette licence, soit (à votre convenance) une version ultérieure. + +LibreQR est diffusé dans l’espoir qu’il sera utile, mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIALISATION ou d’ADÉQUATION À UN USAGE PARTICULIER. Voyez la GNU Affero General Public License pour plus de détails. + +Vous devriez avoir reçu une copie de la GNU Affero General Public License avec ce code. Sinon, consultez From fe8f347b3d3832477668b394b20e21c49fb3e252 Mon Sep 17 00:00:00 2001 From: Miraty Date: Sat, 31 Oct 2020 17:23:32 +0100 Subject: [PATCH 11/13] Fix small typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b116a1c..9141e4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed * Use lesserphp instead of lessphp -* Move license info and "What's a QR code" at to bottom of the page +* Move license info and "What's a QR code" at bottom of the page ## 1.2.0 - 2020-03-23 From de6f3fd1c1a28666a82933d4fd0ddb3fa3fe8366 Mon Sep 17 00:00:00 2001 From: Miraty Date: Sat, 31 Oct 2020 17:54:08 +0100 Subject: [PATCH 12/13] Remove an isolated
--- index.php | 1 - 1 file changed, 1 deletion(-) diff --git a/index.php b/index.php index a32d1ca..73b6142 100755 --- a/index.php +++ b/index.php @@ -277,7 +277,6 @@ if (badQuery()) { -
From 5fc66c64d42d45ccb13b02ea849e6ba7b2aa1e94 Mon Sep 17 00:00:00 2001 From: Miraty Date: Sat, 31 Oct 2020 18:52:24 +0100 Subject: [PATCH 13/13] Release 1.3.0 --- inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc.php b/inc.php index af193a6..26e1f2d 100644 --- a/inc.php +++ b/inc.php @@ -2,7 +2,7 @@ require "config.inc.php"; -$libreqrVersion = "1.3.0-dev"; +$libreqrVersion = "1.3.0"; // Defines the locale to be used if ($forceLocale == false) {