modEmailCollector.class.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. <?php
  2. /* Copyright (C) 2004-2018 Laurent Destailleur <eldy@users.sourceforge.net>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  16. */
  17. /**
  18. * \defgroup emailcollector Module emailcollector
  19. * \brief emailcollector module descriptor.
  20. *
  21. * \file htdocs/core/modules/modEmailCollector.class.php
  22. * \ingroup emailcollector
  23. * \brief Description and activation file for the module emailcollector
  24. */
  25. include_once DOL_DOCUMENT_ROOT.'/core/modules/DolibarrModules.class.php';
  26. /**
  27. * Description and activation class for module emailcollector
  28. */
  29. class modEmailCollector extends DolibarrModules
  30. {
  31. /**
  32. * Constructor. Define names, constants, directories, boxes, permissions
  33. *
  34. * @param DoliDB $db Database handler
  35. */
  36. public function __construct($db)
  37. {
  38. global $langs, $conf;
  39. $this->db = $db;
  40. // Id for module (must be unique).
  41. // Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id).
  42. $this->numero = 50320;
  43. // Key text used to identify module (for permissions, menus, etc...)
  44. $this->rights_class = 'emailcollector';
  45. // Family can be 'base' (core modules),'crm','financial','hr','projects','products','ecm','technic' (transverse modules),'interface' (link with external tools),'other','...'
  46. // It is used to group modules by family in module setup page
  47. $this->family = "interface";
  48. // Module position in the family on 2 digits ('01', '10', '20', ...)
  49. $this->module_position = '23';
  50. // Gives the possibility to the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this)
  51. //$this->familyinfo = array('myownfamily' => array('position' => '01', 'label' => $langs->trans("MyOwnFamily")));
  52. // Module label (no space allowed), used if translation string 'ModuledavName' not found (MyModue is name of module).
  53. $this->name = preg_replace('/^mod/i', '', get_class($this));
  54. // Module description, used if translation string 'ModuledavDesc' not found (MyModue is name of module).
  55. $this->description = "EmailCollectorDescription";
  56. // Used only if file README.md and README-LL.md not found.
  57. $this->descriptionlong = "EmailCollectorDescription";
  58. // Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z'
  59. $this->version = 'dolibarr';
  60. // Key used in llx_const table to save module status enabled/disabled (where DAV is value of property name of module in uppercase)
  61. $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
  62. // Name of image file used for this module.
  63. // If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue'
  64. // If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module'
  65. $this->picto = 'email';
  66. // Defined all module parts (triggers, login, substitutions, menus, css, etc...)
  67. // for default path (eg: /dav/core/xxxxx) (0=disable, 1=enable)
  68. // for specific path of parts (eg: /dav/core/modules/barcode)
  69. // for specific css file (eg: /dav/css/dav.css.php)
  70. $this->module_parts = array();
  71. // Data directories to create when module is enabled.
  72. // Example: this->dirs = array("/dav/temp","/dav/subdir");
  73. $this->dirs = array();
  74. // Config pages. Put here list of php page, stored into dav/admin directory, to use to setup module.
  75. $this->config_page_url = array("emailcollector_list.php");
  76. // Dependencies
  77. $this->hidden = false; // A condition to hide module
  78. $this->depends = array('always'=>'modCron'); // List of module class names as string that must be enabled if this module is enabled
  79. $this->requiredby = array(); // List of module ids to disable if this one is disabled
  80. $this->conflictwith = array(); // List of module class names as string this module is in conflict with
  81. $this->langfiles = array("admin");
  82. $this->phpmin = array(5, 6); // Minimum version of PHP required by module
  83. $this->need_dolibarr_version = array(7, 0); // Minimum version of Dolibarr required by module
  84. $this->warnings_activation = array(); // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
  85. $this->warnings_activation_ext = array(); // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
  86. //$this->automatic_activation = array('FR'=>'davWasAutomaticallyActivatedBecauseOfYourCountryChoice');
  87. //$this->always_enabled = true; // If true, can't be disabled
  88. // Constants
  89. // List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive)
  90. // Example: $this->const=array(0=>array('DAV_MYNEWCONST1','chaine','myvalue','This is a constant to add',1),
  91. // 1=>array('DAV_MYNEWCONST2','chaine','myvalue','This is another constant to add',0, 'current', 1)
  92. // );
  93. $this->const = array(
  94. //1=>array('DAV_MYCONSTANT', 'chaine', 'avalue', 'This is a constant to add', 1, 'allentities', 1)
  95. );
  96. if (!isset($conf->emailcollector) || !isset($conf->emailcollector->enabled)) {
  97. $conf->emailcollector = new stdClass();
  98. $conf->emailcollector->enabled = 0;
  99. }
  100. // Array to add new pages in new tabs
  101. $this->tabs = array();
  102. // Example:
  103. // $this->tabs[] = array('data'=>'objecttype:+tabname1:Title1:mylangfile@dav:$user->rights->dav->read:/dav/mynewtab1.php?id=__ID__'); // To add a new tab identified by code tabname1
  104. // $this->tabs[] = array('data'=>'objecttype:+tabname2:SUBSTITUTION_Title2:mylangfile@dav:$user->rights->othermodule->read:/dav/mynewtab2.php?id=__ID__', // To add another new tab identified by code tabname2. Label will be result of calling all substitution functions on 'Title2' key.
  105. // $this->tabs[] = array('data'=>'objecttype:-tabname:NU:conditiontoremove'); // To remove an existing tab identified by code tabname
  106. //
  107. // Where objecttype can be
  108. // 'categories_x' to add a tab in category view (replace 'x' by type of category (0=product, 1=supplier, 2=customer, 3=member)
  109. // 'contact' to add a tab in contact view
  110. // 'contract' to add a tab in contract view
  111. // 'group' to add a tab in group view
  112. // 'intervention' to add a tab in intervention view
  113. // 'invoice' to add a tab in customer invoice view
  114. // 'invoice_supplier' to add a tab in supplier invoice view
  115. // 'member' to add a tab in fundation member view
  116. // 'opensurveypoll' to add a tab in opensurvey poll view
  117. // 'order' to add a tab in customer order view
  118. // 'order_supplier' to add a tab in supplier order view
  119. // 'payment' to add a tab in payment view
  120. // 'payment_supplier' to add a tab in supplier payment view
  121. // 'product' to add a tab in product view
  122. // 'propal' to add a tab in propal view
  123. // 'project' to add a tab in project view
  124. // 'stock' to add a tab in stock view
  125. // 'thirdparty' to add a tab in third party view
  126. // 'user' to add a tab in user view
  127. // Dictionaries
  128. $this->dictionaries = array();
  129. /* Example:
  130. $this->dictionaries=array(
  131. 'langs'=>'mylangfile@dav',
  132. 'tabname'=>array(MAIN_DB_PREFIX."table1",MAIN_DB_PREFIX."table2",MAIN_DB_PREFIX."table3"), // List of tables we want to see into dictonnary editor
  133. 'tablib'=>array("Table1","Table2","Table3"), // Label of tables
  134. 'tabsql'=>array('SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table1 as f','SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table2 as f','SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table3 as f'), // Request to select fields
  135. 'tabsqlsort'=>array("label ASC","label ASC","label ASC"), // Sort order
  136. 'tabfield'=>array("code,label","code,label","code,label"), // List of fields (result of select to show dictionary)
  137. 'tabfieldvalue'=>array("code,label","code,label","code,label"), // List of fields (list of fields to edit a record)
  138. 'tabfieldinsert'=>array("code,label","code,label","code,label"), // List of fields (list of fields for insert)
  139. 'tabrowid'=>array("rowid","rowid","rowid"), // Name of columns with primary key (try to always name it 'rowid')
  140. 'tabcond'=>array($conf->dav->enabled,$conf->dav->enabled,$conf->dav->enabled) // Condition to show each dictionary
  141. );
  142. */
  143. // Boxes/Widgets
  144. // Add here list of php file(s) stored in dav/core/boxes that contains class to show a widget.
  145. $this->boxes = array(
  146. //0=>array('file'=>'davwidget1.php@dav','note'=>'Widget provided by dav','enabledbydefaulton'=>'Home'),
  147. //1=>array('file'=>'davwidget2.php@dav','note'=>'Widget provided by dav'),
  148. //2=>array('file'=>'davwidget3.php@dav','note'=>'Widget provided by dav')
  149. );
  150. // Cronjobs (List of cron jobs entries to add when module is enabled)
  151. // unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week
  152. $this->cronjobs = array(
  153. 0=>array('label'=>'Email collector', 'priority'=>50, 'jobtype'=>'method', 'class'=>'/emailcollector/class/emailcollector.class.php', 'objectname'=>'EmailCollector', 'method'=>'doCollect', 'parameters'=>'', 'comment'=>'Comment', 'frequency'=>5, 'unitfrequency'=>60, 'status'=>1, 'test'=>'$conf->emailcollector->enabled')
  154. );
  155. // Permissions
  156. $this->rights = array(); // Permission array used by this module
  157. /*
  158. $r=0;
  159. $this->rights[$r][0] = $this->numero + $r; // Permission id (must not be already used)
  160. $this->rights[$r][1] = 'Read myobject of dav'; // Permission label
  161. $this->rights[$r][3] = 0; // Permission by default for new user (0/1)
  162. $this->rights[$r][4] = 'read'; // In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
  163. $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
  164. $r++;
  165. $this->rights[$r][0] = $this->numero + $r; // Permission id (must not be already used)
  166. $this->rights[$r][1] = 'Create/Update myobject of dav'; // Permission label
  167. $this->rights[$r][3] = 0; // Permission by default for new user (0/1)
  168. $this->rights[$r][4] = 'write'; // In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
  169. $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
  170. $r++;
  171. $this->rights[$r][0] = $this->numero + $r; // Permission id (must not be already used)
  172. $this->rights[$r][1] = 'Delete myobject of dav'; // Permission label
  173. $this->rights[$r][3] = 0; // Permission by default for new user (0/1)
  174. $this->rights[$r][4] = 'delete'; // In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
  175. $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
  176. */
  177. // Main menu entries
  178. $this->menu = array(); // List of menus to add
  179. $r = 0;
  180. // Add here entries to declare new menus
  181. /* BEGIN MODULEBUILDER TOPMENU */
  182. /*$this->menu[$r++]=array('fk_menu'=>'', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
  183. 'type'=>'top', // This is a Top menu entry
  184. 'titre'=>'dav',
  185. 'mainmenu'=>'dav',
  186. 'leftmenu'=>'',
  187. 'url'=>'/dav/davindex.php',
  188. 'langs'=>'dav@dav', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
  189. 'position'=>1000+$r,
  190. 'enabled'=>'$conf->dav->enabled', // Define condition to show or hide menu entry. Use '$conf->dav->enabled' if entry must be visible if module is enabled.
  191. 'perms'=>'1', // Use 'perms'=>'$user->rights->dav->level1->level2' if you want your menu with a permission rules
  192. 'target'=>'',
  193. 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both
  194. */
  195. /* END MODULEBUILDER TOPMENU */
  196. /* BEGIN MODULEBUILDER LEFTMENU MYOBJECT
  197. $this->menu[$r++]=array( 'fk_menu'=>'fk_mainmenu=dav', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
  198. 'type'=>'left', // This is a Left menu entry
  199. 'titre'=>'List MyObject',
  200. 'mainmenu'=>'dav',
  201. 'leftmenu'=>'dav_myobject_list',
  202. 'url'=>'/dav/myobject_list.php',
  203. 'langs'=>'dav@dav', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
  204. 'position'=>1000+$r,
  205. 'enabled'=>'$conf->dav->enabled', // Define condition to show or hide menu entry. Use '$conf->dav->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
  206. 'perms'=>'1', // Use 'perms'=>'$user->rights->dav->level1->level2' if you want your menu with a permission rules
  207. 'target'=>'',
  208. 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both
  209. $this->menu[$r++]=array( 'fk_menu'=>'fk_mainmenu=dav,fk_leftmenu=dav', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
  210. 'type'=>'left', // This is a Left menu entry
  211. 'titre'=>'New MyObject',
  212. 'mainmenu'=>'dav',
  213. 'leftmenu'=>'dav_myobject_new',
  214. 'url'=>'/dav/myobject_page.php?action=create',
  215. 'langs'=>'dav@dav', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
  216. 'position'=>1000+$r,
  217. 'enabled'=>'$conf->dav->enabled', // Define condition to show or hide menu entry. Use '$conf->dav->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
  218. 'perms'=>'1', // Use 'perms'=>'$user->rights->dav->level1->level2' if you want your menu with a permission rules
  219. 'target'=>'',
  220. 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both
  221. END MODULEBUILDER LEFTMENU MYOBJECT */
  222. }
  223. /**
  224. * Function called when module is enabled.
  225. * The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
  226. * It also creates data directories
  227. *
  228. * @param string $options Options when enabling module ('', 'noboxes')
  229. * @return int 1 if OK, 0 if KO
  230. */
  231. public function init($options = '')
  232. {
  233. global $conf, $user;
  234. //$this->_load_tables('/dav/sql/');
  235. // Create extrafields
  236. //include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
  237. //$extrafields = new ExtraFields($this->db);
  238. //$result1=$extrafields->addExtraField('myattr1', "New Attr 1 label", 'boolean', 1, 3, 'thirdparty', 0, 0, '', '', 1, '', 0, 0, '', '', 'dav@dav', '$conf->dav->enabled');
  239. //$result2=$extrafields->addExtraField('myattr2', "New Attr 2 label", 'varchar', 1, 10, 'project', 0, 0, '', '', 1, '', 0, 0, '', '', 'dav@dav', '$conf->dav->enabled');
  240. //$result3=$extrafields->addExtraField('myattr3', "New Attr 3 label", 'varchar', 1, 10, 'bank_account', 0, 0, '', '', 1, '', 0, 0, '', '', 'dav@dav', '$conf->dav->enabled');
  241. //$result4=$extrafields->addExtraField('myattr4', "New Attr 4 label", 'select', 1, 3, 'thirdparty', 0, 1, '', array('options'=>array('code1'=>'Val1','code2'=>'Val2','code3'=>'Val3')), 1 '', 0, 0, '', '', 'dav@dav', '$conf->dav->enabled');
  242. //$result5=$extrafields->addExtraField('myattr5', "New Attr 5 label", 'text', 1, 10, 'user', 0, 0, '', '', 1, '', 0, 0, '', '', 'dav@dav', '$conf->dav->enabled');
  243. $sql = array();
  244. $tmpsql = "SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Ticket_Requests' and entity = ".$conf->entity;
  245. $tmpresql = $this->db->query($tmpsql);
  246. if ($tmpresql) {
  247. if ($this->db->num_rows($tmpresql) == 0) {
  248. $descriptionA1 = 'This collector will scan your mailbox to find emails that match some rules and create automatically a ticket (Module Ticket must be enabled) with the email informations. You can use this collector if you provide some support by email, so your ticket request will be automatically generated.';
  249. $descriptionA1 .= ' If the collector Collect_Responses is also enabled, when you send an email from the ticket, you may also see answers of your customers or partners directly on the ticket view.';
  250. $sqlforexampleA1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollector (entity, ref, label, description, source_directory, date_creation, fk_user_creat, status)";
  251. $sqlforexampleA1 .= " VALUES (".$conf->entity.", 'Collect_Ticket_Requets', 'Example to collect ticket requests', '".$this->db->escape($descriptionA1)."', 'INBOX', '".$this->db->idate(dol_now())."', ".$user->id.", 0)";
  252. $sqlforexampleFilterA1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  253. $sqlforexampleFilterA1 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Ticket_Requets' and entity = ".$conf->entity."), 'isnotanswer', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  254. $sqlforexampleFilterA2 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  255. $sqlforexampleFilterA2 .= " 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)";
  256. $sqlforexampleFilterA3 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, rulevalue, date_creation, fk_user_creat, status)";
  257. $sqlforexampleFilterA3 .= " 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)";
  258. $sqlforexampleA4 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectoraction (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  259. $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)";
  260. $sql[] = $sqlforexampleA1;
  261. $sql[] = $sqlforexampleFilterA1;
  262. $sql[] = $sqlforexampleFilterA2;
  263. $sql[] = $sqlforexampleFilterA3;
  264. $sql[] = $sqlforexampleA4;
  265. }
  266. } else {
  267. dol_print_error($this->db);
  268. }
  269. $tmpsql = "SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Responses_Out' and entity = ".$conf->entity;
  270. $tmpresql = $this->db->query($tmpsql);
  271. if ($tmpresql) {
  272. if ($this->db->num_rows($tmpresql) == 0) {
  273. $descriptionA1 = 'This collector will scan your mailbox "Sent" directory to find emails that was sent as an answer of another email directly from your email software and not from Dolibarr. If such an email is found, the event of answer is recorded into Dolibarr.';
  274. $sqlforexampleA1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollector (entity, ref, label, description, source_directory, date_creation, fk_user_creat, status)";
  275. $sqlforexampleA1 .= " VALUES (".$conf->entity.", 'Collect_Responses_Out', 'Example to collect answers to emails done from your external email software', '".$this->db->escape($descriptionA1)."', 'Sent', '".$this->db->idate(dol_now())."', ".$user->id.", 0)";
  276. $sqlforexampleFilterA1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  277. $sqlforexampleFilterA1 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Responses_Out' and entity = ".$conf->entity."), 'isanswer', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  278. $sqlforexampleFilterA2 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  279. $sqlforexampleFilterA2 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Responses_Out' and entity = ".$conf->entity."), 'withouttrackingidinmsgid', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  280. $sqlforexampleActionA1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectoraction (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  281. $sqlforexampleActionA1 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Responses_Out' and entity = ".$conf->entity."), 'recordevent', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  282. $sql[] = $sqlforexampleA1;
  283. $sql[] = $sqlforexampleFilterA1;
  284. $sql[] = $sqlforexampleFilterA2;
  285. $sql[] = $sqlforexampleActionA1;
  286. }
  287. }
  288. $tmpsql = "SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Responses_In' and entity = ".$conf->entity;
  289. $tmpresql = $this->db->query($tmpsql);
  290. if ($tmpresql) {
  291. if ($this->db->num_rows($tmpresql) == 0) {
  292. $descriptionB1 = 'This collector will scan your mailbox to find all emails that are an answer of an email sent from your application. An event (Module Agenda must be enabled) with the email response will be recorded at the good place. For example, if your send a commercial proposal, order, invoice or message for a ticket by email from the application, and your customer answers your email, the system will automatically catch the answer and add it into your ERP.';
  293. $sqlforexampleB1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollector (entity, ref, label, description, source_directory, date_creation, fk_user_creat, status)";
  294. $sqlforexampleB1 .= " VALUES (".$conf->entity.", 'Collect_Responses_In', 'Example to collect any received email that is a response of an email sent from Dolibarr', '".$this->db->escape($descriptionB1)."', 'INBOX', '".$this->db->idate(dol_now())."', ".$user->id.", 0)";
  295. $sqlforexampleB2 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  296. $sqlforexampleB2 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Responses_In' and entity = ".$conf->entity."), 'isanswer', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  297. $sqlforexampleB3 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectoraction (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  298. $sqlforexampleB3 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Responses_In' and entity = ".$conf->entity."), 'recordevent', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  299. $sql[] = $sqlforexampleB1;
  300. $sql[] = $sqlforexampleB2;
  301. $sql[] = $sqlforexampleB3;
  302. }
  303. } else {
  304. dol_print_error($this->db);
  305. }
  306. $tmpsql = "SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Leads' and entity = ".$conf->entity;
  307. $tmpresql = $this->db->query($tmpsql);
  308. if ($tmpresql) {
  309. if ($this->db->num_rows($tmpresql) == 0) {
  310. $descriptionC1 = "This collector will scan your mailbox to find emails that match some rules and create automatically a lead (Module Project must be enabled) with the email informations. You can use this collector if you want to follow your lead using the module Project (1 lead = 1 project), so your leads will be automatically generated.";
  311. $descriptionC1 .= " If the collector Collect_Responses is also enabled, when you send an email from your leads, proposals or any other object, you may also see answers of your customers or partners directly on the application.<br>";
  312. $descriptionC1 .= "Note: With this initial example, the title of the lead is generated including the email. If the thirdparty can't be found in database (new customer), the lead will be attached to the thirdparty with ID 1.";
  313. $sqlforexampleC1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollector (entity, ref, label, description, source_directory, date_creation, fk_user_creat, status)";
  314. $sqlforexampleC1 .= " VALUES (".$conf->entity.", 'Collect_Leads', 'Example to collect leads', '".$this->db->escape($descriptionC1)."', 'INBOX', '".$this->db->idate(dol_now())."', ".$user->id.", 0)";
  315. $sqlforexampleFilterC1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  316. $sqlforexampleFilterC1 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Leads' and entity = ".$conf->entity."), 'isnotanswer', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  317. $sqlforexampleFilterC2 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  318. $sqlforexampleFilterC2 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Leads' and entity = ".$conf->entity."), 'withouttrackingid', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  319. $sqlforexampleFilterC3 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, rulevalue, date_creation, fk_user_creat, status)";
  320. $sqlforexampleFilterC3 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Leads' and entity = ".$conf->entity."), 'to', 'sales@example.com', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  321. $sqlforexampleC4 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectoraction (fk_emailcollector, type, actionparam, date_creation, fk_user_creat, status)";
  322. $sqlforexampleC4 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Leads' and entity = ".$conf->entity."), 'project', 'tmp_from=EXTRACT:HEADER:^From:(.*);socid=SETIFEMPTY:1;usage_opportunity=SET:1;description=EXTRACT:BODY:(.*);title=SET:Lead or message from __tmp_from__ received by email', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  323. $sql[] = $sqlforexampleC1;
  324. $sql[] = $sqlforexampleFilterC1;
  325. $sql[] = $sqlforexampleFilterC2;
  326. $sql[] = $sqlforexampleFilterC3;
  327. $sql[] = $sqlforexampleC4;
  328. }
  329. } else {
  330. dol_print_error($this->db);
  331. }
  332. $tmpsql = "SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Candidatures' and entity = ".$conf->entity;
  333. $tmpresql = $this->db->query($tmpsql);
  334. if ($tmpresql) {
  335. if ($this->db->num_rows($tmpresql) == 0) {
  336. $descriptionC1 = "This collector will scan your mailbox to find emails send for a recruitment (Module Recruitment must be enabled). You can complete this collector if you want to automaticallycreate a candidature for a job request.";
  337. $descriptionC1 .= "Note: With this initial example, the title of the candidature is generated including the email.";
  338. $sqlforexampleC1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollector (entity, ref, label, description, source_directory, date_creation, fk_user_creat, status)";
  339. $sqlforexampleC1 .= " VALUES (".$conf->entity.", 'Collect_Candidatures', 'Example to collect email for job candidatures', '".$this->db->escape($descriptionC1)."', 'INBOX', '".$this->db->idate(dol_now())."', ".$user->id.", 0)";
  340. $sqlforexampleFilterC1 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  341. $sqlforexampleFilterC1 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Candidatures' and entity = ".$conf->entity."), 'isnotanswer', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  342. $sqlforexampleFilterC2 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, date_creation, fk_user_creat, status)";
  343. $sqlforexampleFilterC2 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Candidatures' and entity = ".$conf->entity."), 'withouttrackingid', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  344. $sqlforexampleFilterC3 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectorfilter (fk_emailcollector, type, rulevalue, date_creation, fk_user_creat, status)";
  345. $sqlforexampleFilterC3 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Candidatures' and entity = ".$conf->entity."), 'to', 'jobs@example.com', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  346. $sqlforexampleC4 = "INSERT INTO ".MAIN_DB_PREFIX."emailcollector_emailcollectoraction (fk_emailcollector, type, actionparam, date_creation, fk_user_creat, status)";
  347. $sqlforexampleC4 .= " VALUES ((SELECT rowid FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector WHERE ref = 'Collect_Candidatures' and entity = ".$conf->entity."), 'candidature', 'tmp_from=EXTRACT:HEADER:^From:(.*)(<.*>)?;fk_recruitmentjobposition=EXTRACT:HEADER:^To:[^\n]*\+([^\n]*);description=EXTRACT:BODY:(.*);lastname=SET:__tmp_from__', '".$this->db->idate(dol_now())."', ".$user->id.", 1)";
  348. $sql[] = $sqlforexampleC1;
  349. $sql[] = $sqlforexampleFilterC1;
  350. $sql[] = $sqlforexampleFilterC2;
  351. $sql[] = $sqlforexampleFilterC3;
  352. $sql[] = $sqlforexampleC4;
  353. }
  354. } else {
  355. dol_print_error($this->db);
  356. }
  357. return $this->_init($sql, $options);
  358. }
  359. /**
  360. * Function called when module is disabled.
  361. * Remove from database constants, boxes and permissions from Dolibarr database.
  362. * Data directories are not deleted
  363. *
  364. * @param string $options Options when enabling module ('', 'noboxes')
  365. * @return int 1 if OK, 0 if KO
  366. */
  367. public function remove($options = '')
  368. {
  369. $sql = array();
  370. return $this->_remove($sql, $options);
  371. }
  372. }