Browse Source

Minor code and doc enhancement

Laurent Destailleur 4 years ago
parent
commit
66f9f37f41

+ 89 - 0
dev/examples/mail/source_email_ticket_1_to_create.txt

@@ -0,0 +1,89 @@
+Delivered-To: testldrdev@gmail.com
+Received: by 2002:a2e:9b9a:0:0:0:0:0 with SMTP id z26csp1425223lji;
+        Thu, 20 Aug 2020 08:29:02 -0700 (PDT)
+X-Received: by 2002:a05:620a:1292:: with SMTP id w18mr2938234qki.158.1597937342304;
+        Thu, 20 Aug 2020 08:29:02 -0700 (PDT)
+ARC-Seal: i=1; a=rsa-sha256; t=1597937342; cv=none;
+        d=google.com; s=arc-20160816;
+        b=FhT/+rJ/zNYgVQ5Nt/rLZJycGd/Ntkhm6LwI16YUfmEmxeGrP/cXXQULrqQ1LhBr9B
+         oRKweltTdnpyA14gm0kzbs1vUkf5HxLUuGk8IqqJWAPMUZoN8oUPkzq2BuKNQGxPiE+y
+         Hsg/fnYp8WzcAlZOLsEP2kcFIdA95Dyy5LkM8HgphI1jSS1d6gkx6nDGIMIpDD9D+w4X
+         ISxRUXp5JlDwFCUMOPoAvHIBUdJ3jpLsjesbMEnU4ssFqhxU21pBq+Fc+csSPeY5DL0M
+         HR1o+ChEAXIdDOrDqa0ohHfqR216juGCzH8YuEQ88LT0Qbst9IkOYWiAQv4TIh7vHtvQ
+         TMvA==
+ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
+        h=to:subject:message-id:date:from:mime-version:dkim-signature;
+        bh=sojOjnIKAXmsZ9zvMk5MGvY3qyOaFgnpRe6YPMYutOI=;
+        b=CRlrRPfoGkfmz6iXKy4HdxKQ4SeJTiIxjC2jNkgQPSnIDFJgDkJcwASJVpcjTmlVmH
+         Z9WnHKVUPRIHGDEoMRlx6eUx9QfelWqPYu3BBQGFry9sgth0BR/1s6tmQ+P+bAj23ryo
+         aL3UkF6KCSx4GhEk3MfHA5Ex81YDFHvHL3BZ2kb3XCVSlPiBq2szw1ETmRAsDdS5Gbu+
+         ZlzBbl4pRtUWgi1fB5H4Wcv7e90F4Et1SBP8IKSCa23qu2nV9xefgjfMw2ndxCj1zgCL
+         c3l7Ul6pw32nqf6+vxfZTstwIwgu6dXZXCHDqJqesI2g8RGxeba+LfKZEDpBuSeINS9r
+         GMvw==
+ARC-Authentication-Results: i=1; mx.google.com;
+       dkim=pass header.i=@destailleur.fr header.s=google header.b=IPMz90Yj;
+       spf=pass (google.com: domain of contact@destailleur.fr designates 209.85.220.41 as permitted sender) smtp.mailfrom=contact@destailleur.fr;
+       dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=destailleur.fr
+Return-Path: <contact@destailleur.fr>
+Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41])
+        by mx.google.com with SMTPS id w14sor2138230qtb.9.2020.08.20.08.29.00
+        for <testldrdev@gmail.com>
+        (Google Transport Security);
+        Thu, 20 Aug 2020 08:29:01 -0700 (PDT)
+Received-SPF: pass (google.com: domain of contact@destailleur.fr designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41;
+Authentication-Results: mx.google.com;
+       dkim=pass header.i=@destailleur.fr header.s=google header.b=IPMz90Yj;
+       spf=pass (google.com: domain of contact@destailleur.fr designates 209.85.220.41 as permitted sender) smtp.mailfrom=contact@destailleur.fr;
+       dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=destailleur.fr
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+        d=destailleur.fr; s=google;
+        h=mime-version:from:date:message-id:subject:to;
+        bh=sojOjnIKAXmsZ9zvMk5MGvY3qyOaFgnpRe6YPMYutOI=;
+        b=IPMz90Yjw1Mf57/rYWUYGtpc+IazEWcy6/bqxf1j0h6rxDH/wjhxsCWzfARgqqlfVj
+         ACg4IbPpZZlKFIYDSCbfMlWF65rbKfNre56HldfQgy0Tq3LC434zHz2ZZMOVCM52w3J9
+         VGBpASUlSL1o+YRmzOpRtHVu7I9aNwGxHuA070Yka8XLV76vV3P0vdL8PcoHq0jUUEoi
+         +dCZ9NCPuAFtGK2IavNoM2qQrLdfYIi+RwgWBtqjTwzyvDEJR+p5fIPK142ynMbHgWYO
+         RVtMqAgxjvL4sfyKZ5KuzKXkQNM3zyzMinWK89scBl+QLFCcWA4Qqc0dJjqLCBhh8lmq
+         n67g==
+X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+        d=1e100.net; s=20161025;
+        h=x-gm-message-state:mime-version:from:date:message-id:subject:to;
+        bh=sojOjnIKAXmsZ9zvMk5MGvY3qyOaFgnpRe6YPMYutOI=;
+        b=H0GsrFAi9JmRTKQ2budtDeLBqCaTisHKYCVVziyxmv+/tIcrSZBA4tdKwm+wR80r50
+         zMJXmyVS2DMDWfnIlOv39wcwQjYN3WK1aRJfV0bVuEWrQuzt5MMWbskf6xbzo201nhr9
+         ZlqATsEV7v1u5EHmfYwRhR8+AOmENdnm0g9RXPJVrFS58WNEJUSotS5Y5rZPjnT943y0
+         62Kf4Bd6uWvXhPFXWQoZLtWrPpkbcYPWIBmpftKhD0PD9c6rKaVduV0WhbigYsDoxb3F
+         iIafGPOyq91hiHR2gTLHiMmTDm+IDQ4n6gSkS7HKpZlLQhHoBMnpqJZYoxMJTxdpAbSy
+         mY+A==
+X-Gm-Message-State: AOAM5325RcN4/ThWbYCO3vWRMFFBrfzJUHC1bd1Z9VB3/2Q3RuF9lmIJ +SjshEErhK68Of2pHDZQ3aPU4rzDfV8ozbvRsgChdfZg8aA=
+X-Google-Smtp-Source: ABdhPJxUOUdurKEQfLldtiQGRkgC/h8gKQG1zhS+8k93p6N1SsOn517+GeRyT3E+/Uw536pmReO29la3EIAS6VT33SE=
+X-Received: by 2002:aed:3e8e:: with SMTP id n14mr3191190qtf.67.1597937340509; Thu, 20 Aug 2020 08:29:00 -0700 (PDT)
+MIME-Version: 1.0
+From: John Tester <customer@customercompany.fr>
+Date: Thu, 20 Aug 2020 17:28:34 +0200
+Message-ID: <CALeEO_kij-ogXKzrjV_pTgqVbUB9j=287VkX34iVSWgDHFA8eg@mail.gmail.com>
+Subject: Support besoin
+To: testldrdev@gmail.com
+Content-Type: multipart/alternative; boundary="0000000000008e099705ad50c772"
+
+--0000000000008e099705ad50c772
+Content-Type: text/plain; charset="UTF-8"
+
+adfsdfsdfds
+
+-- 
+Laurent.
+------------------------------------------------------------------------------------
+Twitter: https://www.twitter.com/eldy10
+
+--0000000000008e099705ad50c772
+Content-Type: text/html; charset="UTF-8"
+Content-Transfer-Encoding: quoted-printable
+
+<div dir=3D"ltr">adfsdfsdfds<br clear=3D"all"><div><br></div>-- <br><div di=
+r=3D"ltr" class=3D"gmail_signature" data-smartmail=3D"gmail_signature">Laur=
+ent.<br>-------------------------------------------------------------------=
+-----------------<br>Twitter: <a href=3D"https://www.twitter.com/eldy10" ta=
+rget=3D"_blank">https://www.twitter.com/eldy10</a></div></div>
+
+--0000000000008e099705ad50c772--

+ 57 - 0
dev/examples/mail/source_email_ticket_2_answer_from_ticket.txt

@@ -0,0 +1,57 @@
+Return-Path: <testldrdev@gmail.com>
+Received: from smtp.gmail.com ([2a01:e0a:7e:4ae0:329c:23ff:feb8:dc8d])
+        by smtp.gmail.com with ESMTPSA id 32sm5811196wrh.18.2020.08.20.09.31.37
+        for <customer@customercompany.fr>
+        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
+        Thu, 20 Aug 2020 09:31:37 -0700 (PDT)
+From: testldrdev@gmail.com
+X-Google-Original-From: <aa@aa.comg>
+To: customer@customercompany.fr
+Subject: [MyBigCompany - Ticket #TS2008-0040] Nouveau message
+Date: Thu, 20 Aug 2020 18:31:37 +0200
+Message-ID: <1597941097.SMTPs-dolibarr-tic58@83b5bc91f83a56e458db71e0adac2b62>
+References: <1597941097.SMTPs-dolibarr-tic58@83b5bc91f83a56e458db71e0adac2b62>
+X-Dolibarr-TRACKID: tic58@83b5bc91f83a56e458db71e0adac2b62
+X-RemoteAddr: 127.0.0.1
+X-Mailer: Dolibarr version 13.0.0-alpha (using SMTPs Mailer)
+X-Dolibarr-Option: MAIN_MAIL_USE_MULTI_PART
+Mime-Version: 1.0
+Content-Type: multipart/mixed; boundary="multipart_x.1597941097.x_boundary"
+Content-Transfer-Encoding: 8bit
+
+--multipart_x.1597941097.x_boundary
+Content-Type: multipart/alternative; boundary="mul_872cdd6a64216735955664484832b075"
+
+--mul_872cdd6a64216735955664484832b075
+Content-Type: text/plain; charset=UTF-8
+
+Bonjour 
+
+ 
+Une nouvelle réponse a été ajoutée à un ticket que vous suivez. Voici
+le message :PredefinedMailContentTicket_send 
+ 
+ 
+Vous pouvez voir la progression du ticket en cliquant sur le lien
+ci-dessus. : fr5uw2yospypn2rz 
+ Cordialement, 
+ 
+--
+--mul_872cdd6a64216735955664484832b075
+Content-Type: text/html; charset=UTF-8
+
+<html><head><title></title></head><body>Bonjour<br>
+
+<br>
+Une nouvelle réponse a été ajoutée à un ticket que vous suivez. Voici
+le message :PredefinedMailContentTicket_send<br>
+<br>
+<br>
+Vous pouvez voir la progression du ticket en cliquant sur le lien
+ci-dessus. : <a
+href="http://localhostgit/dolibarr_dev/htdocs/public/ticket/view.php?track_id=fr5uw2yospypn2rz">fr5uw2yospypn2rz</a><br>
+<br>Cordialement,<br>
+<br>
+--</body></html>
+--mul_872cdd6a64216735955664484832b075--
+--multipart_x.1597941097.x_boundary--

+ 48 - 0
dev/examples/mail/source_email_ticket_3_answer_from_mailer.txt

@@ -0,0 +1,48 @@
+MIME-Version: 1.0
+Date: Thu, 20 Aug 2020 18:34:01 +0200
+References: <CALeEO_kij-ogXKzrjV_pTgqVbUB9j=287VkX34iVSWgDHFA8eg@mail.gmail.com>
+In-Reply-To: <CALeEO_kij-ogXKzrjV_pTgqVbUB9j=287VkX34iVSWgDHFA8eg@mail.gmail.com>
+Message-ID: <CAC8+=32ccpEo12RR-juT=FW6+gNV-DcvNjxs_0s6Wn40xmfhug@mail.gmail.com>
+Subject: Re: Support besoin
+From: John Tester <testldrdev@gmail.com>
+To: John Tester <customer@customercompany.fr>
+Content-Type: multipart/alternative; boundary="0000000000001620dd05ad51b075"
+
+--0000000000001620dd05ad51b075
+Content-Type: text/plain; charset="UTF-8"
+Content-Transfer-Encoding: quoted-printable
+
+Merci pour votre question.
+Voici la rep.
+
+Le jeu. 20 ao=C3=BBt 2020 =C3=A0 17:29, John Tester <laurent@destai=
+lleur.fr>
+a =C3=A9crit :
+
+> adfsdfsdfds
+>
+> --
+> Laurent.
+>
+> -------------------------------------------------------------------------=
+-----------
+> Twitter: https://www.twitter.com/eldy10
+>
+
+--0000000000001620dd05ad51b075
+Content-Type: text/html; charset="UTF-8"
+Content-Transfer-Encoding: quoted-printable
+
+<div dir=3D"ltr">Merci pour votre question.<div>Voici la rep.</div></div><b=
+r><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">Le=C2=A0=
+jeu. 20 ao=C3=BBt 2020 =C3=A0=C2=A017:29, John Tester &lt;<a href=
+=3D"mailto:customer@customercompany.fr">customer@customercompany.fr</a>&gt; a =C3=A9c=
+rit=C2=A0:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0=
+px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div =
+dir=3D"ltr">adfsdfsdfds<br clear=3D"all"><div><br></div>-- <br><div dir=3D"=
+ltr">Laurent.<br>----------------------------------------------------------=
+--------------------------<br>Twitter: <a href=3D"https://www.twitter.com/e=
+ldy10" target=3D"_blank">https://www.twitter.com/eldy10</a></div></div>
+</blockquote></div>
+
+--0000000000001620dd05ad51b075--

+ 134 - 0
dev/examples/mail/source_email_ticket_4_answer_of_answer_from_mailer.txt

@@ -0,0 +1,134 @@
+Delivered-To: testldrdev@gmail.com
+Received: by 2002:a2e:9b9a:0:0:0:0:0 with SMTP id z26csp1483607lji;
+        Thu, 20 Aug 2020 09:56:03 -0700 (PDT)
+X-Received: by 2002:ac8:3868:: with SMTP id r37mr3301993qtb.95.1597942563252;
+        Thu, 20 Aug 2020 09:56:03 -0700 (PDT)
+ARC-Seal: i=1; a=rsa-sha256; t=1597942563; cv=none;
+        d=google.com; s=arc-20160816;
+        b=skUGL+keim3FdNXfKGgQokCfj85gnhYhuLbMM61qY5W6ixSH9s8I6uoNh3gzVy89XM
+         NGbZiajjDiPMBryl87PhD+ACBjv8WoZAQiojAga0ELPPmVDnhrtWKANLbRrkUI3Xtfoj
+         b1o2iHP2Q12Vqs6xiAy86yxURlIKGM3tw91WryWiIPiAL7bRZPn49N3XbO2ULE0QKTBq
+         BI5YnOxt9NfTj0xhKaLLIJ9M1qa4e1QyOHl56WuEv3Gx6uHDAQDYz+C5G0VgdjBvwRzH
+         pJaiAulc1uW/V9TcRMwvwIWtI7eWygvU2PiuI/c05G1KVKibAubHE55IjOJCn2O2UaH4
+         WMNQ==
+ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
+        h=to:subject:message-id:date:from:in-reply-to:references:mime-version
+         :dkim-signature;
+        bh=j6+rsx5MBsg1/s7LIIfByV7u0jGK09n72bnK4XcN6ZQ=;
+        b=Ps5kk+tBGQzMP6ugDCwKf4hzn8fn3DU4AFz1dJvkHdDestLZWN99Qtr6iNMdslsHJm
+         ov378c+8oCfcV7shyBYjlAFfikFi7o4RM/evh3yqqjAnhyVfcYH7c9cexVvDo/AXUAZ7
+         N7Mh7EOvyDXXsaHK2l89XiAxZx/hZh/O+/HR2EoVEGre1eYRYwI/aEfPN8d4/fL2VtCD
+         0wzAwnUrINuXmcaUDT30Twjk9kwGjjTsM6Z531vKM6L3y48a7f3GTE7V+vo2QxHdUT54
+         fQVue9OO7b4VKTEj/x/dmNr+92sHRAMMS7dj/VXMmzM+WttUCAPNxZ27/bvt4bBc5oBp
+         QPEA==
+ARC-Authentication-Results: i=1; mx.google.com;
+       dkim=pass header.i=@destailleur.fr header.s=google header.b=SEYSmxbT;
+       spf=pass (google.com: domain of contact@destailleur.fr designates 209.85.220.41 as permitted sender) smtp.mailfrom=contact@destailleur.fr;
+       dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=destailleur.fr
+Return-Path: <contact@destailleur.fr>
+Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41])
+        by mx.google.com with SMTPS id q3sor2285165qtn.34.2020.08.20.09.56.02
+        for <testldrdev@gmail.com>
+        (Google Transport Security);
+        Thu, 20 Aug 2020 09:56:03 -0700 (PDT)
+Received-SPF: pass (google.com: domain of contact@destailleur.fr designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41;
+Authentication-Results: mx.google.com;
+       dkim=pass header.i=@destailleur.fr header.s=google header.b=SEYSmxbT;
+       spf=pass (google.com: domain of contact@destailleur.fr designates 209.85.220.41 as permitted sender) smtp.mailfrom=contact@destailleur.fr;
+       dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=destailleur.fr
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+        d=destailleur.fr; s=google;
+        h=mime-version:references:in-reply-to:from:date:message-id:subject:to;
+        bh=j6+rsx5MBsg1/s7LIIfByV7u0jGK09n72bnK4XcN6ZQ=;
+        b=SEYSmxbTKCuc1baQZzjIJwm7WXvgjt/nEGhMLqWxQCU3beM3qhH8wYlSeMyB8Z/9pi
+         tszZFZhZ3cjnIbbJnjzsMYJgBnYbkf6hz14+BsFwyPU030EkDjJy2i3DSXzYK7A+GbBn
+         G9I9foG/4+pcx0LnFsjchGsRhLFkTKJIsP2SVfOx0wlim3WHMIqIXvKsxY05PoPyf8Tp
+         IwQi7iNl/+nTyjNHl2DQh+ty3CRTmUw9uEbY+jRRvIg5i/7cfREekK98d7qi/5HQycr6
+         aptRDdCVHXpe47q+c7OPiMEEQWs+mFJhBqPXIlU54fwFApEEnLn/jwGbrPsrPYJaswgI
+         vd/g==
+X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+        d=1e100.net; s=20161025;
+        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
+         :message-id:subject:to;
+        bh=j6+rsx5MBsg1/s7LIIfByV7u0jGK09n72bnK4XcN6ZQ=;
+        b=M6a4k1gKc4e7TwKncuNPy0b3KxutR1FLFJGWxd4NyW84b7f3LfIR94IeInLQIWmY8C
+         Ddus0upZJI4+NN9XBGvXCdsiiYlwFGBJRWwjv82XFKVAKL5DD94RJNQZJUiE39hgJ2aa
+         6V9gasiP+nUAX4ZV9bZmw21CgKEZrZVXh5unmW2ABrfcx8lHjp/DUw5XEkym1J92Wo1l
+         g0H3XrC2FL+aQuj+WpCynMNkY9ljw71oqyv3SP9pjnVNHArAdZiPMHkNxiuPdq7q41fg
+         eIbdRCQXYZL5O48QsjDdiXwaQzx+NcYtrKAH0RIVD1lG6zc9pxqDJsbGxP9VLs8jGDTT
+         mSdQ==
+X-Gm-Message-State: AOAM532LuATWDKbo1HImMWshHVqb0kC0isehf3owfYUKq5J68o3juKbm kCgUMt25A2C7QoNMDXcjfJyteBNQD7ZhSh3yeYTGoLSvsD4=
+X-Google-Smtp-Source: ABdhPJyQYCpCHSwA87x030i8YChySZqcNXxT1qVlZyEA+XM6DTyPZusa8gtbDUVcMyx7Jma/7toh+4EEE2bWg0bG+2E=
+X-Received: by 2002:aed:3e8e:: with SMTP id n14mr3547383qtf.67.1597942562373; Thu, 20 Aug 2020 09:56:02 -0700 (PDT)
+MIME-Version: 1.0
+References: <CALeEO_kij-ogXKzrjV_pTgqVbUB9j=287VkX34iVSWgDHFA8eg@mail.gmail.com> <CAC8+=32ccpEo12RR-juT=FW6+gNV-DcvNjxs_0s6Wn40xmfhug@mail.gmail.com>
+In-Reply-To: <CAC8+=32ccpEo12RR-juT=FW6+gNV-DcvNjxs_0s6Wn40xmfhug@mail.gmail.com>
+From: John Tester <customer@customercompany.fr>
+Date: Thu, 20 Aug 2020 18:55:36 +0200
+Message-ID: <CALeEO_nLUY8Tk+o7WoaHtBkxvOy0dhvt+fL0MwPrApGty_AG_g@mail.gmail.com>
+Subject: Re: Support besoin
+To: John Tester <testldrdev@gmail.com>
+Content-Type: multipart/alternative; boundary="000000000000cd54be05ad51fe67"
+
+--000000000000cd54be05ad51fe67
+Content-Type: text/plain; charset="UTF-8"
+Content-Transfer-Encoding: quoted-printable
+
+Merci
+
+Le jeu. 20 ao=C3=BBt 2020 =C3=A0 18:34, John Tester <testldrdev@gma=
+il.com> a
+=C3=A9crit :
+
+> Merci pour votre question.
+> Voici la rep.
+>
+> Le jeu. 20 ao=C3=BBt 2020 =C3=A0 17:29, John Tester <laurent@dest=
+ailleur.fr>
+> a =C3=A9crit :
+>
+>> adfsdfsdfds
+>>
+>> --
+>> Laurent.
+>>
+>> ------------------------------------------------------------------------=
+------------
+>> Twitter: https://www.twitter.com/eldy10
+>>
+>
+
+--=20
+Laurent.
+---------------------------------------------------------------------------=
+---------
+Twitter: https://www.twitter.com/eldy10
+
+--000000000000cd54be05ad51fe67
+Content-Type: text/html; charset="UTF-8"
+Content-Transfer-Encoding: quoted-printable
+
+<div dir=3D"ltr">Merci</div><br><div class=3D"gmail_quote"><div dir=3D"ltr"=
+ class=3D"gmail_attr">Le=C2=A0jeu. 20 ao=C3=BBt 2020 =C3=A0=C2=A018:34, Lau=
+rent Destailleur &lt;<a href=3D"mailto:testldrdev@gmail.com">testldrdev@gma=
+il.com</a>&gt; a =C3=A9crit=C2=A0:<br></div><blockquote class=3D"gmail_quot=
+e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
+;padding-left:1ex"><div dir=3D"ltr">Merci pour votre question.<div>Voici la=
+ rep.</div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"g=
+mail_attr">Le=C2=A0jeu. 20 ao=C3=BBt 2020 =C3=A0=C2=A017:29, Laurent Destai=
+lleur &lt;<a href=3D"mailto:customer@customercompany.fr" target=3D"_blank">laure=
+nt@destailleur.fr</a>&gt; a =C3=A9crit=C2=A0:<br></div><blockquote class=3D=
+"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2=
+04,204,204);padding-left:1ex"><div dir=3D"ltr">adfsdfsdfds<br clear=3D"all"=
+><div><br></div>-- <br><div dir=3D"ltr">Laurent.<br>-----------------------=
+-------------------------------------------------------------<br>Twitter: <=
+a href=3D"https://www.twitter.com/eldy10" target=3D"_blank">https://www.twi=
+tter.com/eldy10</a></div></div>
+</blockquote></div>
+</blockquote></div><br clear=3D"all"><div><br></div>-- <br><div dir=3D"ltr"=
+ class=3D"gmail_signature">Laurent.<br>------------------------------------=
+------------------------------------------------<br>Twitter: <a href=3D"htt=
+ps://www.twitter.com/eldy10" target=3D"_blank">https://www.twitter.com/eldy=
+10</a></div>
+
+--000000000000cd54be05ad51fe67--

+ 1 - 1
htdocs/core/class/html.formticket.class.php

@@ -209,7 +209,7 @@ class FormTicket
 		print '</td></tr>';
 
 		// Group
-		print '<tr><td><span class="fieldrequired"><label for="selectcategory_code">'.$langs->trans("TicketGroup").'</span></label></td><td>';
+		print '<tr><td><span class="fieldrequired"><label for="selectcategory_code">'.$langs->trans("TicketCategory").'</span></label></td><td>';
 		$this->selectGroupTickets((GETPOST('category_code') ? GETPOST('category_code') : $this->category_code), 'category_code', '', '2');
 		print '</td></tr>';
 

+ 20 - 0
htdocs/core/modules/modEmailCollector.class.php

@@ -299,6 +299,26 @@ class modEmailCollector extends DolibarrModules
 			}
 		} else dol_print_error($this->db);
 
+		$tmpsql = "SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Ticket_Answers' and entity = ".$conf->entity;
+		$tmpresql = $this->db->query($tmpsql);
+		if ($tmpresql) {
+			if ($this->db->num_rows($tmpresql) == 0) {
+
+				$descriptionA1 = 'This collector will scan your mailbox "Sent" directory to find emails that was sent as an answer of a Ticket (Module Ticket must be enabled) directly from your email browser instead of from Dolibarr. If such an email is found, the event of answer is recorded into Dolibarr.';
+				$sqlforexampleA1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollector (entity, ref, label, description, source_directory, date_creation, fk_user_creat, status)";
+				$sqlforexampleA1 .= " VALUES (".$conf->entity.", 'Collect_Ticket_Answers', 'Example to collect answers to tickets', '".$this->db->escape($descriptionA1)."', 'Sent', '".$this->db->idate(dol_now())."', ".$user->id.", 0)";
+				/*
+				 $sqlforexampleA2 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, date_creation, fk_user_creat, status)";
+				 $sqlforexampleA2 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Ticket_Requets' and entity = ".$conf->entity."), 'withouttrackingid', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
+				 $sqlforexampleA3 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, rulevalue, date_creation, fk_user_creat, status)";
+				 $sqlforexampleA3 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Ticket_Requets' and entity = ".$conf->entity."), 'to', 'support@example.com', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
+				 $sqlforexampleA4 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectoraction (fk_emailcollector, type, date_creation, fk_user_creat, status)";
+				 $sqlforexampleA4 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Ticket_Requets' and entity = ".$conf->entity."), 'ticket', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
+				 */
+				$sql[] = $sqlforexampleA1;
+			}
+		}
+
 		$tmpsql = "SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Responses' and entity = ".$conf->entity;
 		$tmpresql = $this->db->query($tmpsql);
 		if ($tmpresql) {

+ 3 - 3
htdocs/emailcollector/class/emailcollector.class.php

@@ -1685,6 +1685,7 @@ class EmailCollector extends CommonObject
                         if ($thirdpartystatic->id > 0)
                         {
                             $tickettocreate->socid = $thirdpartystatic->id;
+                            $tickettocreate->fk_soc = $thirdpartystatic->id;
                             if ($thirdpartyfoundby) $descriptionmeta = dol_concatdesc($descriptionmeta, 'Third party found from '.$thirdpartyfoundby);
                         }
                         if ($contactstatic->id > 0)
@@ -1706,13 +1707,12 @@ class EmailCollector extends CommonObject
                         $tickettocreate->subject = $subject;
                         $tickettocreate->message = $description;
                         $tickettocreate->type_code = 0;
-                        $tickettocreate->category_code = 0;
-                        $tickettocreate->severity_code = 0;
+                        $tickettocreate->category_code = null;
+                        $tickettocreate->severity_code = null;
                         $tickettocreate->origin_email = $from;
                         $tickettocreate->fk_user_create = $user->id;
                         $tickettocreate->datec = $date;
                         $tickettocreate->fk_project = $projectstatic->id;
-                        $tickettocreate->fk_soc = $thirdpartystatic->id;
                         $tickettocreate->notify_tiers_at_create = 0;
                         $tickettocreate->note_private = $descriptionfull;
                         $tickettocreate->entity = $conf->entity;

+ 1 - 1
htdocs/langs/en_US/admin.lang

@@ -1943,7 +1943,7 @@ NothingProcessed=Nothing done
 XEmailsDoneYActionsDone=%s emails qualified, %s emails successfully processed (for %s record/actions done)
 RecordEvent=Record email event
 CreateLeadAndThirdParty=Create lead (and third party if necessary)
-CreateTicketAndThirdParty=Create ticket (and third party if necessary)
+CreateTicketAndThirdParty=Create ticket (and link to third party if it was loaded by a previous operation)
 CodeLastResult=Latest result code
 NbOfEmailsInInbox=Number of emails in source directory
 LoadThirdPartyFromName=Load third party searching on %s (load only)

+ 1 - 3
htdocs/langs/en_US/ticket.lang

@@ -72,7 +72,6 @@ Deleted=Deleted
 
 # Dict
 Type=Type
-Category=Analytic code
 Severity=Severity
 
 # Email templates
@@ -128,7 +127,6 @@ TicketsAutoAssignTicket=Automatically assign the user who created the ticket
 TicketsAutoAssignTicketHelp=When creating a ticket, the user can be automatically assigned to the ticket.
 TicketNumberingModules=Tickets numbering module
 TicketNotifyTiersAtCreation=Notify third party at creation
-TicketGroup=Group
 TicketsDisableCustomerEmail=Always disable emails when a ticket is created from public interface
 TicketsPublicNotificationNewMessage=Send email(s) when a new message is added
 TicketsPublicNotificationNewMessageHelp=Send email(s) when a new message is added from public interface (to assigned user or the notifications email to (update) and/or the notifications email to)
@@ -162,7 +160,7 @@ CreatedBy=Created by
 NewTicket=New Ticket
 SubjectAnswerToTicket=Ticket answer
 TicketTypeRequest=Request type
-TicketCategory=Analytic code
+TicketCategory=Group
 SeeTicket=See ticket
 TicketMarkedAsRead=Ticket has been marked as read
 TicketReadOn=Read on

+ 4 - 5
htdocs/ticket/card.php

@@ -894,8 +894,6 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd
 		if ($object->fk_user_assign > 0) {
 			$userstat->fetch($object->fk_user_assign);
 			print $userstat->getNomUrl(1);
-		} else {
-			print $langs->trans('None');
 		}
 
 		// Show user list to assignate one if status is "read"
@@ -1027,7 +1025,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd
 			print $langs->getLabelFromKey($db, $object->type_code, 'c_ticket_type', 'code', 'label');
 			print '</td></tr>';
 			// Group
-			print '<tr><td>'.$langs->trans("TicketGroup").'</td><td>';
+			print '<tr><td>'.$langs->trans("TicketCategory").'</td><td>';
 			print $langs->getLabelFromKey($db, $object->category_code, 'c_ticket_category', 'code', 'label');
 			print '</td></tr>';
 			// Severity
@@ -1178,7 +1176,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd
 			{
 				// Show link to add a message (if read and not closed)
 				if ($object->fk_statut < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage") {
-					print '<div class="inline-block divButAction"><a class="butAction" href="card.php?track_id='.$object->track_id.'&action=presend_addmessage&mode=init">'.$langs->trans('TicketAddMessage').'</a></div>';
+					print '<div class="inline-block divButAction"><a class="butAction reposition" href="card.php?track_id='.$object->track_id.'&action=presend_addmessage&mode=init">'.$langs->trans('TicketAddMessage').'</a></div>';
 				}
 
 				// Link to create an intervention
@@ -1207,7 +1205,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd
 			}
 			print '</div>'."\n";
 		} else {
-			print '<br>';
+			//print '<br>';
 		}
 
 		// Select mail models is same action as presend
@@ -1256,6 +1254,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd
 			$morehtmlright .= $form->textwithpicto('<span class="opacitymedium">'.$langs->trans("TicketMessageSubstitutionReplacedByGenericValues").'</span>', $help, 1, 'helpclickable', '', 0, 3, 'helpsubstitution');
 
 			print '<div>';
+
 			print load_fiche_titre($langs->trans('TicketAddMessage'), $morehtmlright, 'messages@ticket');
 
 			print '<hr>';

+ 41 - 13
htdocs/ticket/class/ticket.class.php

@@ -178,6 +178,45 @@ class Ticket extends CommonObject
 	 */
 	public $regeximgext = '\.jpg|\.jpeg|\.bmp|\.gif|\.png|\.tiff';
 
+	/**
+	 * Status
+	 */
+	const STATUS_NOT_READ = 0;
+	const STATUS_READ = 1;
+	const STATUS_ASSIGNED = 2;
+	const STATUS_IN_PROGRESS = 3;
+	const STATUS_NEED_MORE_INFO = 5;
+	const STATUS_WAITING = 7;
+	const STATUS_CLOSED = 8;
+	const STATUS_CANCELED = 9;
+
+
+	/**
+	 *  'type' if the field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', 'html', 'date', 'datetime', 'timestamp', 'duration', 'mail', 'phone', 'url', 'password')
+	 *         Note: Filter can be a string like "(t.ref:like:'SO-%') or (t.date_creation:<:'20160101') or (t.nature:is:NULL)"
+	 *  'label' the translation key.
+	 *  'enabled' is a condition when the field must be managed (Example: 1 or '$conf->global->MY_SETUP_PARAM)
+	 *  'position' is the sort order of field.
+	 *  'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0).
+	 *  'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). 5=Visible on list and view only (not create/not update). Using a negative value means field is not shown by default on list but can be selected for viewing)
+	 *  'noteditable' says if field is not editable (1 or 0)
+	 *  'default' is a default value for creation (can still be overwrote by the Setup of Default Values if field is editable in creation form). Note: If default is set to '(PROV)' and field is 'ref', the default value will be set to '(PROVid)' where id is rowid when a new record is created.
+	 *  'index' if we want an index in database.
+	 *  'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...).
+	 *  'searchall' is 1 if we want to search in this field when making a search from the quick search button.
+	 *  'isameasure' must be set to 1 if you want to have a total on list for this field. Field type must be summable like integer or double(24,8).
+	 *  'css' is the CSS style to use on field. For example: 'maxwidth200'
+	 *  'help' is a string visible as a tooltip on field
+	 *  'showoncombobox' if value of the field must be visible into the label of the combobox that list record
+	 *  'disabled' is 1 if we want to have the field locked by a 'disabled' attribute. In most cases, this is never set into the definition of $fields into class, but is set dynamically by some part of code.
+	 *  'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel")
+	 *  'autofocusoncreate' to have field having the focus on a create form. Only 1 field should have this property set to 1.
+	 *  'comment' is not used. You can store here any text of your choice. It is not used by application.
+	 *
+	 *  Note: To have value dynamic, you can set value to 0 in definition and edit the value on the fly into the constructor.
+	 */
+
+	// BEGIN MODULEBUILDER PROPERTIES
 	public $fields = array(
 		'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'position'=>1, 'visible'=>-2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id"),
 		'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>5, 'notnull'=>1, 'index'=>1),
@@ -187,7 +226,7 @@ class Ticket extends CommonObject
 		'origin_email' => array('type'=>'mail', 'label'=>'OriginEmail', 'visible'=>-2, 'enabled'=>1, 'position'=>16, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'css'=>'tdoverflowmax150'),
 		'subject' => array('type'=>'varchar(255)', 'label'=>'Subject', 'visible'=>1, 'enabled'=>1, 'position'=>18, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth200', 'autofocusoncreate'=>1),
 		'type_code' => array('type'=>'varchar(32)', 'label'=>'Type', 'visible'=>1, 'enabled'=>1, 'position'=>20, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth150'),
-		'category_code' => array('type'=>'varchar(32)', 'label'=>'TicketGroup', 'visible'=>-1, 'enabled'=>1, 'position'=>21, 'notnull'=>-1, 'help'=>"", 'css'=>'maxwidth100'),
+		'category_code' => array('type'=>'varchar(32)', 'label'=>'TicketCategory', 'visible'=>-1, 'enabled'=>1, 'position'=>21, 'notnull'=>-1, 'help'=>"", 'css'=>'maxwidth100'),
 		'severity_code' => array('type'=>'varchar(32)', 'label'=>'Severity', 'visible'=>1, 'enabled'=>1, 'position'=>22, 'notnull'=>-1, 'help'=>"", 'css'=>'maxwidth100'),
 		'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'visible'=>1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'searchall'=>1, 'help'=>"LinkToThirparty", 'css'=>'tdoverflowmax150 maxwidth150onsmartphone'),
 		'notify_tiers_at_create' => array('type'=>'integer', 'label'=>'NotifyThirdparty', 'visible'=>-1, 'enabled'=>0, 'position'=>51, 'notnull'=>1, 'index'=>1),
@@ -204,18 +243,7 @@ class Ticket extends CommonObject
 		'fk_statut' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>600, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array(0 => 'Unread', 1 => 'Read', 3 => 'Answered', 4 => 'Assigned', 5 => 'InProgress', 6 => 'Waiting', 8 => 'Closed', 9 => 'Deleted')),
 		'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>900),
 	);
-
-	/**
-	 * Status
-	 */
-	const STATUS_NOT_READ = 0;
-	const STATUS_READ = 1;
-	const STATUS_ASSIGNED = 2;
-	const STATUS_IN_PROGRESS = 3;
-	const STATUS_NEED_MORE_INFO = 5;
-	const STATUS_WAITING = 7;
-	const STATUS_CLOSED = 8;
-	const STATUS_CANCELED = 9;
+	// END MODULEBUILDER PROPERTIES
 
 
 	/**