From 5658e5d05b9454f151a4f48efc2ec0b494a7981a Mon Sep 17 00:00:00 2001 From: poka Date: Mon, 30 Sep 2019 01:34:26 +0200 Subject: [PATCH 01/12] Add field pubkey in signup form --- src/Account/views/signup.twig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Account/views/signup.twig b/src/Account/views/signup.twig index 2cafe48..8106e3f 100644 --- a/src/Account/views/signup.twig +++ b/src/Account/views/signup.twig @@ -5,6 +5,7 @@
{{ csrf_input() }} {{ field('username', user.username, "Pseudo") }} + {{ field('pubkey', user.pubkey, "Clé publique") }} {{ field('firstname', user.firstname, "Prénom") }} {{ field('lastname', user.lastname, "Nom") }} {{ field('email', user.email, "Email", {type: 'email'}) }} {{ field('password', null, "Mot de passe", {type: 'password'}) }} @@ -13,4 +14,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} From f7730784134d327667aad8a6c63ea4f361209075 Mon Sep 17 00:00:00 2001 From: poka Date: Mon, 4 Nov 2019 01:35:08 +0100 Subject: [PATCH 02/12] =?UTF-8?q?Obtenir=20la=20cl=C3=A9=20publique=20avec?= =?UTF-8?q?=20pseudo=20=C3=A0=20l'inscription=20en=20AJAX=20V1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/ajax/getG1PubKey.php | 24 +++++++++++++++ src/Account/views/signup.twig | 55 +++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 public/ajax/getG1PubKey.php diff --git a/public/ajax/getG1PubKey.php b/public/ajax/getG1PubKey.php new file mode 100644 index 0000000..6c29bce --- /dev/null +++ b/public/ajax/getG1PubKey.php @@ -0,0 +1,24 @@ + 0\''); + putenv("silkPubKeyUser=$silkPubKeyUser"); + $silkUser = system('echo "$silkPubKeyUser" | tail -n2 | head -n1'); + if ($silkUser == $parseUser) + { + $silkPubKey = system('echo "$silkPubKeyUser" | head -n1'); + } + } + + +// echo $silkPubKey + +// } +?> diff --git a/src/Account/views/signup.twig b/src/Account/views/signup.twig index 8106e3f..7eff096 100644 --- a/src/Account/views/signup.twig +++ b/src/Account/views/signup.twig @@ -6,6 +6,13 @@ {{ csrf_input() }} {{ field('username', user.username, "Pseudo") }} {{ field('pubkey', user.pubkey, "Clé publique") }} + + + + + +
+ {{ field('firstname', user.firstname, "Prénom") }} {{ field('lastname', user.lastname, "Nom") }} {{ field('email', user.email, "Email", {type: 'email'}) }} {{ field('password', null, "Mot de passe", {type: 'password'}) }} @@ -14,4 +21,52 @@ + + + + + + {% endblock %} + From 0e8ea2628b43f06ad6353e68b5740671ed7cfa18 Mon Sep 17 00:00:00 2001 From: poka Date: Mon, 4 Nov 2019 05:05:59 +0100 Subject: [PATCH 03/12] =?UTF-8?q?Obtenir=20la=20cl=C3=A9=20publique=20avec?= =?UTF-8?q?=20pseudo=20=C3=A0=20l'inscription=20en=20AJAX=20V2=20+=20Voir?= =?UTF-8?q?=20la=20cl=C3=A9=20des=20vendeurs=20dans=20la=20liste=20des=20p?= =?UTF-8?q?roduits=20V1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/ajax/getG1PubKey.php | 41 ++++++++-------- public/ajax/readRecords.php | 4 +- public/js/script.js | 1 + src/Account/Action/SignupAction.php | 5 +- src/Account/views/signup.twig | 75 ++++++++++++----------------- 5 files changed, 58 insertions(+), 68 deletions(-) diff --git a/public/ajax/getG1PubKey.php b/public/ajax/getG1PubKey.php index 6c29bce..862b7a9 100644 --- a/public/ajax/getG1PubKey.php +++ b/public/ajax/getG1PubKey.php @@ -1,24 +1,25 @@ 0\''); - putenv("silkPubKeyUser=$silkPubKeyUser"); - $silkUser = system('echo "$silkPubKeyUser" | tail -n2 | head -n1'); - if ($silkUser == $parseUser) - { - $silkPubKey = system('echo "$silkPubKeyUser" | head -n1'); - } - } + if (empty($silkPubKey)) + { + $silkPubKeyUser = shell_exec('curl -s https:\/\/duniter-g1.p2p.legal/wot/lookup/$parseUser | head | grep -i -w -A 3 "pubkey" | awk -F \'"\' \'{ print $4 }\' | awk \'NF > 0\''); + putenv("silkPubKeyUser=$silkPubKeyUser"); + $silkUser = system('echo "$silkPubKeyUser" | tail -n2 | head -n1'); + if ($silkUser == $parseUser) + { + $silkPubKey = system('echo "$silkPubKeyUser" | head -n1'); + } + } - -// echo $silkPubKey - -// } + if (empty($silkPubKey)) + { + echo "Aucune clé n'a été trouvé à partir de ce pseudo"; + } +} ?> diff --git a/public/ajax/readRecords.php b/public/ajax/readRecords.php index f0f485f..d7e9c86 100644 --- a/public/ajax/readRecords.php +++ b/public/ajax/readRecords.php @@ -19,7 +19,7 @@ $bdd = new \PDO("mysql:host=$host;dbname=$database_name", $username, $password); '; $params["antenne_slug"] = $antenne_slug; - $requete = "SELECT products.*, users.username + $requete = "SELECT products.*, users.username, users.pubkey FROM products LEFT JOIN antennes ON antennes.id = products.antenne_id @@ -41,7 +41,7 @@ $bdd = new \PDO("mysql:host=$host;dbname=$database_name", $username, $password); $data .= ''.$row['name'].''; $data .= ''; $data .= ''.$row['username'].''; - $data .= ''; + $data .= ''.$row['pubkey'].''; $data .= ''.$row['quantite'].''; $data .= ''.$row['prix'].''; $data .= ''; diff --git a/public/js/script.js b/public/js/script.js index 1e6f07c..cf2df3e 100644 --- a/public/js/script.js +++ b/public/js/script.js @@ -1,4 +1,5 @@ // Add Record + function addRecord(antenne_slug, antenne_id, nom_connecte, id_user) { var produit = $("#produit").val(); diff --git a/src/Account/Action/SignupAction.php b/src/Account/Action/SignupAction.php index 1338700..7d633d2 100644 --- a/src/Account/Action/SignupAction.php +++ b/src/Account/Action/SignupAction.php @@ -58,8 +58,9 @@ class SignupAction } $params = $request->getParsedBody(); $validator = (new Validator($params)) - ->required('username', 'email', 'password', 'password_confirm', 'firstname', 'lastname', 'created_at') + ->required('username', 'pubkey', 'email', 'password', 'password_confirm', 'created_at') ->length('username', 3) + ->length('pubkey', 44) ->length('firstname', 2) ->length('lastname', 2) ->email('email') @@ -70,6 +71,7 @@ class SignupAction if ($validator->isValid()) { $userParams = [ 'username' => $params['username'], + 'pubkey' => $params['pubkey'], 'firstname'=> $params['firstname'], 'lastname'=> $params['lastname'], 'email' => $params['email'], @@ -89,6 +91,7 @@ class SignupAction 'errors' => $errors, 'user' => [ 'username' => $params['username'], + 'pubkey' => $params['pubkey'], 'email' => $params['email'], 'firstname'=> $params['firstname'], 'lastname'=> $params['lastname'], diff --git a/src/Account/views/signup.twig b/src/Account/views/signup.twig index 7eff096..5d13cbc 100644 --- a/src/Account/views/signup.twig +++ b/src/Account/views/signup.twig @@ -1,18 +1,13 @@ {% extends 'layout.twig' %} {% block body %} +
{{ csrf_input() }} {{ field('username', user.username, "Pseudo") }} - {{ field('pubkey', user.pubkey, "Clé publique") }} - - - - - -
- +
+
{{ field('pubkey', user.pubkey, "Clé publique") }}
{{ field('firstname', user.firstname, "Prénom") }} {{ field('lastname', user.lastname, "Nom") }} {{ field('email', user.email, "Email", {type: 'email'}) }} {{ field('password', null, "Mot de passe", {type: 'password'}) }} @@ -24,49 +19,39 @@ - {% endblock %} - From 30ecfb23c8c913a5e9e23c49f6a4be0d5dd7272b Mon Sep 17 00:00:00 2001 From: poka Date: Mon, 4 Nov 2019 05:18:05 +0100 Subject: [PATCH 04/12] =?UTF-8?q?Voir=20la=20cl=C3=A9=20des=20vendeurs=20d?= =?UTF-8?q?ans=20la=20liste=20des=20produits=20recherch=C3=A9s=20V1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/ajax/readRecords2.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/ajax/readRecords2.php b/public/ajax/readRecords2.php index 45f48a9..585addc 100644 --- a/public/ajax/readRecords2.php +++ b/public/ajax/readRecords2.php @@ -20,7 +20,7 @@ $data = ' $params["antenne_slug"] = $antenne_slug; -$requete = "SELECT souhaits.*, users.username +$requete = "SELECT souhaits.*, users.username, users.pubkey FROM souhaits LEFT JOIN antennes ON antennes.id = souhaits.antenne_id @@ -42,7 +42,7 @@ if ($count > 0) $data .= ''; $data .= ''; $data .= ''; - $data .= ''; + $data .= ''; $data .= ''; $data .= ''; $data .= '"; - $data .= ''; + $prix = $row['prix']; + $vendeur = $row['username']; + $produit = $row['name']; + $pubkey = $row['pubkey']; + $pubkeyShort = substr($pubkey, 0, 8); + $format_cle_pub = " $pubkeyShort... "; + $data .= ''; $data .= ''; - $data .= ''; - $data .= ''; + $data .= ''; + $data .= ''; $data .= ''; - $data .= ''; + $data .= ''; $data .= '"; - $data .= ''; - $data .= ''; - $data .= ''; - $data .= ''; - $data .= ''; - $data .= ''; + $prix = $row['prix']; + $vendeur = $row['username']; + $produit = $row['name']; + $pubkey = $row['pubkey']; + $pubkeyShort = substr($pubkey, 0, 8); + $data .= ''; + $data .= ''; + $data .= ''; + $data .= ''; + $data .= ''; + $data .= ''; $data .= ''; $data .= ''; - $data .= ''; - $data .= ''; + $data .= ''; + $data .= ''; $data .= ''; $data .= ''; $data .= ''; $data .= ''; - $data .= ''; + $data .= ''; $data .= ''; $data .= ''; $data .= ''; From 980148e2bb14c36178e3fb3316e392a6407a2260 Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 8 Nov 2019 02:55:37 +0100 Subject: [PATCH 09/12] Improve signup css --- public/css/style.css | 45 ++++++++++++++++++++--------- src/Account/Action/SignupAction.php | 6 ++-- src/Account/views/signup.twig | 24 ++++++++------- 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/public/css/style.css b/public/css/style.css index e273b67..478e8fe 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -104,23 +104,42 @@ header.header img { text-align: center; } +#signupContain { + background-color: lightgray; + opacity: 0.9; + margin: auto; + margin-top: 1rem; + padding:1rem; + width: 500px; +} + +#firstnameDiv { + width: 49%; + display: inline-block; +} + +#lastnameDiv { + width: 50%; + display: inline-block; +} + +#champsOgligatoire { + float: right; + font-size: 0.8em; +} + +#validSignup { + display: block; + margin: auto; +} + /******************************************************************/ /* LOADING PUBKEY */ /******************************************************************/ -/*.loadingPubkey { -// display: none; - position: fixed; - z-index: 1000; - top: 0; - left: 0; - height: 100%; - width: 100%; - background: rgba( 255, 255, 255, .8 ) - url('http://i.stack.imgur.com/FhHRx.gif') - 50% 50% - no-repeat; -}*/ +#cle_pub { + display: none; +} .loadingPubkey { display: none; diff --git a/src/Account/Action/SignupAction.php b/src/Account/Action/SignupAction.php index 7d633d2..c97cef6 100644 --- a/src/Account/Action/SignupAction.php +++ b/src/Account/Action/SignupAction.php @@ -60,9 +60,9 @@ class SignupAction $validator = (new Validator($params)) ->required('username', 'pubkey', 'email', 'password', 'password_confirm', 'created_at') ->length('username', 3) - ->length('pubkey', 44) - ->length('firstname', 2) - ->length('lastname', 2) + ->length('pubkey', 43) + ->length('firstname', 0) + ->length('lastname', 0) ->email('email') ->confirm('password') ->length('password', 4) diff --git a/src/Account/views/signup.twig b/src/Account/views/signup.twig index 463c88c..bcdc960 100644 --- a/src/Account/views/signup.twig +++ b/src/Account/views/signup.twig @@ -2,19 +2,21 @@ {% block body %} -
+
{{ csrf_input() }} - {{ field('username', user.username, "Pseudo") }} + {{ field('username', user.username, "Pseudo *") }}
-
{{ field('pubkey', user.pubkey, "Clé publique") }}
- {{ field('firstname', user.firstname, "Prénom") }} {{ field('lastname', user.lastname, "Nom") }} - {{ field('email', user.email, "Email", {type: 'email'}) }} - {{ field('password', null, "Mot de passe", {type: 'password'}) }} - {{ field('password_confirm', null, "Confirmez le mot de passe", {type: 'password'}) }} +
{{ field('pubkey', user.pubkey, "Clé publique*") }}
+
{{ field('lastname', user.lastname, "Nom") }}
+
{{ field('firstname', user.firstname, "Prénom") }}
+ {{ field('email', user.email, "Email *", {type: 'email'}) }} + {{ field('password', null, "Mot de passe *", {type: 'password'}) }} + {{ field('password_confirm', null, "Confirmez le mot de passe *", {type: 'password'}) }} +
* Champs obligatoires
{{ field('created_at', date(), null, {type: 'hidden'}) }} - +
@@ -24,7 +26,7 @@ var textInput = document.getElementById('username'); var timeout = null; $body = $("body"); -noPubKey("hide") +(document.getElementById("pubkey").value) ? noPubKey("block") : true ; textInput.onkeyup = function (e) { clearTimeout(timeout); @@ -36,9 +38,9 @@ textInput.onkeyup = function (e) { pubkeyIsNull = pubkeyAnswer.includes("Aucune clé n'a été trouvé à partir de ce pseudo"); // (pubkeyIsNull) ? sentenceAnswer=this.responseText : sentenceAnswer="j'ai trouvé ta clé publique Ḡ1 !"; // sentenceAnswer=this.responseText; - document.getElementById("livesearch-pubkey").innerHTML=pubkeyAnswer; + (pubkeyIsNull) ? document.getElementById("livesearch-pubkey").innerHTML=pubkeyAnswer : document.getElementById("livesearch-pubkey").innerHTML='ḠTrouvé une clé ! =)
Clé publique: ' + pubkeyAnswer; (pubkeyIsNull) ? document.getElementById("pubkey").value="" : document.getElementById("pubkey").value=pubkeyAnswer; - document.getElementById("livesearch-pubkey").style.border="1px solid #A5ACB2"; + document.getElementById("livesearch-pubkey").style.border="2px solid #A5ACB2"; (pubkeyIsNull) ? noPubKey("block") : noPubKey("hide"); } } From ac0ae0f2ef69219adf44592ec4c8134ea42b68a7 Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 8 Nov 2019 02:58:13 +0100 Subject: [PATCH 10/12] Improve signup css --- public/css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/css/style.css b/public/css/style.css index 478e8fe..089fa1d 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -110,7 +110,7 @@ header.header img { margin: auto; margin-top: 1rem; padding:1rem; - width: 500px; + width: 550px; } #firstnameDiv { From 7dd186b47cd3623cd8291e5a7a9161fbf803629f Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 8 Nov 2019 03:17:28 +0100 Subject: [PATCH 11/12] Add prefere node for cesium api --- public/ajax/readRecords.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/ajax/readRecords.php b/public/ajax/readRecords.php index 6429212..f186acf 100644 --- a/public/ajax/readRecords.php +++ b/public/ajax/readRecords.php @@ -44,7 +44,7 @@ $bdd = new \PDO("mysql:host=$host;dbname=$database_name", $username, $password); $pubkey = $row['pubkey']; $pubkeyShort = substr($pubkey, 0, 8); $vendeur_format = "$vendeur"; - $cle_pub_format = " $pubkeyShort... "; + $cle_pub_format = " $pubkeyShort... "; $data .= '
'; $data .= ''; $data .= ''; From 0ad78697ac5d30ea9b3bf4a6990c895b3cd4086f Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 8 Nov 2019 04:06:39 +0100 Subject: [PATCH 12/12] Add title on pubkey hover, fix css for breadcrumbs navigation --- public/ajax/readRecords.php | 2 +- public/css/style.css | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/public/ajax/readRecords.php b/public/ajax/readRecords.php index f186acf..206abc6 100644 --- a/public/ajax/readRecords.php +++ b/public/ajax/readRecords.php @@ -44,7 +44,7 @@ $bdd = new \PDO("mysql:host=$host;dbname=$database_name", $username, $password); $pubkey = $row['pubkey']; $pubkeyShort = substr($pubkey, 0, 8); $vendeur_format = "$vendeur"; - $cle_pub_format = " $pubkeyShort... "; + $cle_pub_format = " $pubkeyShort... "; $data .= ''; $data .= ''; $data .= ''; diff --git a/public/css/style.css b/public/css/style.css index 089fa1d..c793356 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -24,8 +24,13 @@ img { height: auto; } -a :hover { - background-color: lightgreen; +#la_page a { + color: #5B5EA6; +} + +.breadcrumbs a:hover { +/* background-color: lightgreen; */ + font-size: 1.03em; text-decoration: none; }
'.$row['name'].''.$row['username'].''.$row['pubkey'].''.$row['quantite'].''.$row['prix'].''; From 659a86eba44f4e3a886f9e7aa380e8afb2e6e4d6 Mon Sep 17 00:00:00 2001 From: poka Date: Thu, 7 Nov 2019 23:39:33 +0100 Subject: [PATCH 05/12] Add loading animation when searching pubkey --- public/css/style.css | 32 ++++++++++++++++++++++++++++++++ public/images/ajax-loader.gif | Bin 0 -> 673 bytes src/Account/views/signup.twig | 7 +++++++ 3 files changed, 39 insertions(+) create mode 100644 public/images/ajax-loader.gif diff --git a/public/css/style.css b/public/css/style.css index 47952b5..e273b67 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -103,6 +103,38 @@ header.header img { margin: 5px auto; text-align: center; } + +/******************************************************************/ +/* LOADING PUBKEY */ +/******************************************************************/ + +/*.loadingPubkey { +// display: none; + position: fixed; + z-index: 1000; + top: 0; + left: 0; + height: 100%; + width: 100%; + background: rgba( 255, 255, 255, .8 ) + url('http://i.stack.imgur.com/FhHRx.gif') + 50% 50% + no-repeat; +}*/ + +.loadingPubkey { + display: none; + height: 20px; + width: 20px; + content:url('../images/ajax-loader.gif') +} + +body.loading .loadingPubkey { + overflow: hidden; + display: block; +} + + /******************************************************************/ /* POUR MOBILES */ /******************************************************************/ diff --git a/public/images/ajax-loader.gif b/public/images/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..5bf51937b6e0ede9d6447709e92126d135127ae1 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6|ay7QZYV|>D#i>3*!K!!u!46oYN0j*mV|8x7fh6Fo12DlpO z889<4Ffb_olX5OfO)N=GQ7F$W$xuklO03AqPfXFv%uCB>Q2fcl$puuU1H?e11sE8Z zjX8GR`Dbv-Gg~;B!-_+44!hrsG)~uzhKF{E%sjYFFX70c!V9|55|($Dv0F;;uzO`c z_W;_0X^siV9KRk#1?d)^-5Z{DxfD7Dh9nqDDkS*0MoX=zk=a^$|81fKdxOGtiAQbD zlABajw1lu3WX7?}NLl-oXl^srqNeY?L+OktFBhpFp z{3! {{ csrf_input() }} {{ field('username', user.username, "Pseudo") }} +
{{ field('pubkey', user.pubkey, "Clé publique") }}
{{ field('firstname', user.firstname, "Prénom") }} {{ field('lastname', user.lastname, "Nom") }} @@ -22,6 +23,9 @@ var textInput = document.getElementById('username'); var timeout = null; +$body = $("body"); +noPubKey("hide") + textInput.onkeyup = function (e) { clearTimeout(timeout); timeout = setTimeout(function () { @@ -38,12 +42,14 @@ textInput.onkeyup = function (e) { (pubkeyIsNull) ? noPubKey("block") : noPubKey("hide"); } } + $body.addClass("loading"); xmlhttp.open("GET","/ajax/getG1PubKey.php?vendeur="+textInput.value,true); xmlhttp.send(); }, 800); }; function noPubKey(state) { + $body.removeClass("loading"); var textMbr = document.getElementById("cle_pub"); if (state == "hide"){ textMbr.style.display = "none"; @@ -52,6 +58,7 @@ function noPubKey(state) { } } + {% endblock %} From 09737870d0af6ac1000c05438fdc50b6c9debc7b Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 8 Nov 2019 00:43:00 +0100 Subject: [PATCH 06/12] Add link in pubkey to pay via Cesium in readRecords.php --- public/ajax/readRecords.php | 14 ++++++++++---- src/Product/views/admin/products/index.twig | 4 ---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/public/ajax/readRecords.php b/public/ajax/readRecords.php index d7e9c86..5fa1c79 100644 --- a/public/ajax/readRecords.php +++ b/public/ajax/readRecords.php @@ -38,12 +38,18 @@ $bdd = new \PDO("mysql:host=$host;dbname=$database_name", $username, $password); $data .= "
$number'.$row['name'].''.$produit.''.$row['username'].''.$row['pubkey'].''.$vendeur.''.$format_cle_pub.''.$row['quantite'].''.$row['prix'].''.$prix.''; $data .= '
$number'.$row['name'].''.$row['username'].''.$row['pubkey'].''.$row['quantite'].''.$row['prix'].''.$produit.''.$vendeur.''.$pubkeyShort.'...'.$row['quantite'].''.$prix.''; $data .= ''.$produit.''.$vendeur.''.$format_cle_pub.''.$vendeur_format.''.$cle_pub_format.''.$row['quantite'].''.$prix.''; diff --git a/public/ajax/readRecords2.php b/public/ajax/readRecords2.php index 73a6413..e38c693 100644 --- a/public/ajax/readRecords2.php +++ b/public/ajax/readRecords2.php @@ -43,10 +43,12 @@ if ($count > 0) $vendeur = $row['username']; $produit = $row['name']; $pubkey = $row['pubkey']; + $vendeur_format = "$vendeur"; + $pubkeyShort = substr($pubkey, 0, 8); $data .= ''.$produit.''.$vendeur.''.$vendeur_format.''.$pubkeyShort.'...'.$row['quantite'].''.$prix.''.$produit.''.$vendeur_format.''.$produit.''.$vendeur_format.'