2017-02-12 18:13:49 +01:00
< ? php
/* Copyright ( C ) 2004 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2018-08-22 13:23:46 +02:00
* Copyright ( C ) 2004 - 2018 Laurent Destailleur < eldy @ users . sourceforge . net >
2017-02-12 18:13:49 +01:00
* Copyright ( C ) 2004 Benoit Mortier < benoit . mortier @ opensides . be >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2005 - 2012 Regis Houssin < regis . houssin @ inodbox . com >
2017-02-12 18:13:49 +01:00
* Copyright ( C ) 2010 - 2016 Juanjo Menent < jmenent @ 2 byte . es >
2018-05-03 21:27:52 +02:00
* Copyright ( C ) 2011 - 2018 Philippe Grand < philippe . grand @ atoo - net . com >
2017-02-12 18:13:49 +01:00
* Copyright ( C ) 2011 Remy Younes < ryounes @ gmail . com >
* Copyright ( C ) 2012 - 2015 Marcos García < marcosgdf @ gmail . com >
* Copyright ( C ) 2012 Christophe Battarel < christophe . battarel @ ltairis . fr >
2019-01-28 21:39:22 +01:00
* Copyright ( C ) 2011 - 2016 Alexandre Spangaro < aspangaro @ open - dsi . fr >
2017-02-12 18:13:49 +01:00
* Copyright ( C ) 2015 Ferran Marcet < fmarcet @ 2 byte . es >
* Copyright ( C ) 2016 Raphaël Doursenaud < rdoursenaud @ gpcsolutions . fr >
2018-12-02 09:26:24 +01:00
* Copyright ( C ) 2018 Frédéric France < frederic . france @ netlogic . fr >
2017-02-12 18:13:49 +01:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2017-02-12 18:13:49 +01:00
*/
/**
2017-04-18 01:39:06 +02:00
* \file htdocs / admin / mails_templates . php
2017-09-08 12:21:47 +02:00
* \ingroup core
* \brief Page to administer emails templates
2017-02-12 18:13:49 +01:00
*/
require '../main.inc.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formadmin.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formcompany.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php' ;
2017-10-13 12:02:26 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php' ;
2017-02-12 18:13:49 +01:00
2018-05-26 18:41:16 +02:00
// Load translation files required by the page
2019-12-16 13:06:25 +01:00
$langs -> loadLangs ( array ( " errors " , " admin " , " mails " , " languages " ));
2017-02-12 18:13:49 +01:00
2020-08-25 19:40:17 +02:00
$action = GETPOST ( 'action' , 'aZ09' ) ? GETPOST ( 'action' , 'aZ09' ) : 'view' ;
2019-12-16 13:06:25 +01:00
$confirm = GETPOST ( 'confirm' , 'alpha' ); // Result of a confirmation
2017-10-13 12:02:26 +02:00
2019-10-20 01:09:11 +02:00
$id = GETPOST ( 'id' , 'int' );
$rowid = GETPOST ( 'rowid' , 'alpha' );
2019-12-16 13:06:25 +01:00
$search_label = GETPOST ( 'search_label' , 'alphanohtml' ); // Must allow value like 'Abc Def' or '(MyTemplateName)'
$search_type_template = GETPOST ( 'search_type_template' , 'alpha' );
$search_lang = GETPOST ( 'search_lang' , 'alpha' );
$search_fk_user = GETPOST ( 'search_fk_user' , 'intcomma' );
$search_topic = GETPOST ( 'search_topic' , 'alpha' );
2017-02-12 18:13:49 +01:00
2019-12-16 13:06:25 +01:00
if ( ! empty ( $user -> socid )) accessforbidden ();
2017-02-12 18:13:49 +01:00
2020-02-16 18:06:25 +01:00
$acts = array ();
$actl = array ();
2017-02-12 18:13:49 +01:00
$acts [ 0 ] = " activate " ;
$acts [ 1 ] = " disable " ;
2019-01-27 11:55:16 +01:00
$actl [ 0 ] = img_picto ( $langs -> trans ( " Disabled " ), 'switch_off' );
$actl [ 1 ] = img_picto ( $langs -> trans ( " Activated " ), 'switch_on' );
2017-02-12 18:13:49 +01:00
2019-12-16 13:06:25 +01:00
$listoffset = GETPOST ( 'listoffset' , 'alpha' );
$listlimit = GETPOST ( 'listlimit' , 'alpha' ) > 0 ? GETPOST ( 'listlimit' , 'alpha' ) : 1000 ;
2017-02-12 18:13:49 +01:00
$active = 1 ;
2019-01-27 11:55:16 +01:00
$sortfield = GETPOST ( " sortfield " , 'alpha' );
$sortorder = GETPOST ( " sortorder " , 'alpha' );
2020-03-13 13:07:11 +01:00
$page = GETPOSTISSET ( 'pageplusone' ) ? ( GETPOST ( 'pageplusone' ) - 1 ) : GETPOST ( " page " , 'int' );
2017-11-03 19:52:02 +01:00
if ( empty ( $page ) || $page == - 1 ) { $page = 0 ; } // If $page is not defined, or '' or -1
2019-12-16 13:06:25 +01:00
$offset = $listlimit * $page ;
2017-02-12 18:13:49 +01:00
$pageprev = $page - 1 ;
$pagenext = $page + 1 ;
2019-12-16 13:06:25 +01:00
if ( empty ( $sortfield )) $sortfield = 'type_template, lang, position, label' ;
if ( empty ( $sortorder )) $sortorder = 'ASC' ;
2017-09-22 11:47:36 +02:00
2017-06-10 12:56:28 +02:00
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
2017-02-12 18:13:49 +01:00
$hookmanager -> initHooks ( array ( 'emailtemplates' ));
// Name of SQL tables of dictionaries
2019-12-16 13:06:25 +01:00
$tabname = array ();
$tabname [ 25 ] = MAIN_DB_PREFIX . " c_email_templates " ;
2017-02-12 18:13:49 +01:00
// Nom des champs en resultat de select pour affichage du dictionnaire
2019-12-16 13:06:25 +01:00
$tabfield = array ();
$tabfield [ 25 ] = " label,lang,type_template,fk_user,private,position,topic,joinfiles,content " ;
if ( ! empty ( $conf -> global -> MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES )) $tabfield [ 25 ] .= ',content_lines' ;
2017-02-12 18:13:49 +01:00
// Nom des champs d'edition pour modification d'un enregistrement
2019-12-16 13:06:25 +01:00
$tabfieldvalue = array ();
$tabfieldvalue [ 25 ] = " label,lang,type_template,fk_user,private,position,topic,joinfiles,content " ;
if ( ! empty ( $conf -> global -> MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES )) $tabfieldvalue [ 25 ] .= ',content_lines' ;
2017-02-12 18:13:49 +01:00
// Nom des champs dans la table pour insertion d'un enregistrement
2019-12-16 13:06:25 +01:00
$tabfieldinsert = array ();
$tabfieldinsert [ 25 ] = " label,lang,type_template,fk_user,private,position,topic,joinfiles,content " ;
if ( ! empty ( $conf -> global -> MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES )) $tabfieldinsert [ 25 ] .= ',content_lines' ;
$tabfieldinsert [ 25 ] .= ',entity' ; // Must be at end because not into other arrays
2017-02-12 18:13:49 +01:00
// Condition to show dictionary in setup page
2019-12-16 13:06:25 +01:00
$tabcond = array ();
$tabcond [ 25 ] = true ;
2017-02-12 18:13:49 +01:00
// List of help for fields
// Set MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES to allow edit of template for lines
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php' ;
2019-12-16 13:06:25 +01:00
$formmail = new FormMail ( $db );
2017-02-12 18:13:49 +01:00
if ( empty ( $conf -> global -> MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES ))
{
2020-09-07 10:18:17 +02:00
$tmp = FormMail :: getAvailableSubstitKey ( 'formemail' );
$tmp [ '__(AnyTranslationKey)__' ] = 'Translation' ;
$helpsubstit = $langs -> trans ( " AvailableVariables " ) . ':<br>' ;
$helpsubstitforlines = $langs -> trans ( " AvailableVariables " ) . ':<br>' ;
foreach ( $tmp as $key => $val )
{
$helpsubstit .= $key . ' -> ' . $val . '<br>' ;
$helpsubstitforlines .= $key . ' -> ' . $val . '<br>' ;
}
2020-05-21 09:35:30 +02:00
} else {
2020-09-07 10:18:17 +02:00
$tmp = FormMail :: getAvailableSubstitKey ( 'formemailwithlines' );
$tmp [ '__(AnyTranslationKey)__' ] = 'Translation' ;
$helpsubstit = $langs -> trans ( " AvailableVariables " ) . ':<br>' ;
$helpsubstitforlines = $langs -> trans ( " AvailableVariables " ) . ':<br>' ;
foreach ( $tmp as $key => $val )
{
$helpsubstit .= $key . ' -> ' . $val . '<br>' ;
}
$tmp = FormMail :: getAvailableSubstitKey ( 'formemailforlines' );
foreach ( $tmp as $key => $val )
{
$helpsubstitforlines .= $key . ' -> ' . $val . '<br>' ;
}
2017-02-12 18:13:49 +01:00
}
2019-12-16 13:06:25 +01:00
$tabhelp = array ();
$tabhelp [ 25 ] = array ( 'topic' => $helpsubstit , 'joinfiles' => $langs -> trans ( 'AttachMainDocByDefault' ), 'content' => $helpsubstit , 'content_lines' => $helpsubstitforlines , 'type_template' => $langs -> trans ( " TemplateForElement " ), 'private' => $langs -> trans ( " TemplateIsVisibleByOwnerOnly " ), 'position' => $langs -> trans ( " PositionIntoComboList " ));
2017-02-12 18:13:49 +01:00
// List of check for fields (NOT USED YET)
2019-12-16 13:06:25 +01:00
$tabfieldcheck = array ();
2017-02-12 18:13:49 +01:00
$tabfieldcheck [ 25 ] = array ();
// Define elementList and sourceList (used for dictionary type of contacts "llx_c_type_contact")
$elementList = array ();
2019-12-16 13:06:25 +01:00
$sourceList = array ();
2017-02-12 18:13:49 +01:00
// We save list of template email Dolibarr can manage. This list can found by a grep into code on "->param['models']"
$elementList = array ();
2020-08-07 14:38:03 +02:00
if ( $conf -> propal -> enabled && $user -> rights -> propal -> lire ) $elementList [ 'propal_send' ] = $langs -> trans ( 'MailToSendProposal' );
if ( $conf -> commande -> enabled && $user -> rights -> commande -> lire ) $elementList [ 'order_send' ] = $langs -> trans ( 'MailToSendOrder' );
if ( $conf -> facture -> enabled && $user -> rights -> facture -> lire ) $elementList [ 'facture_send' ] = $langs -> trans ( 'MailToSendInvoice' );
2019-12-16 13:06:25 +01:00
if ( $conf -> expedition -> enabled ) $elementList [ 'shipping_send' ] = $langs -> trans ( 'MailToSendShipment' );
if ( $conf -> reception -> enabled ) $elementList [ 'reception_send' ] = $langs -> trans ( 'MailToSendReception' );
if ( $conf -> ficheinter -> enabled ) $elementList [ 'fichinter_send' ] = $langs -> trans ( 'MailToSendIntervention' );
if ( $conf -> supplier_proposal -> enabled ) $elementList [ 'supplier_proposal_send' ] = $langs -> trans ( 'MailToSendSupplierRequestForQuotation' );
2020-08-07 14:38:03 +02:00
if (( $conf -> fournisseur -> enabled && $user -> rights -> fournisseur -> commande -> lire && empty ( $conf -> global -> MAIN_USE_NEW_SUPPLIERMOD )) || ( $conf -> supplier_order -> enabled && $user -> rights -> supplier_order -> lire )) $elementList [ 'order_supplier_send' ] = $langs -> trans ( 'MailToSendSupplierOrder' );
if (( $conf -> fournisseur -> enabled && $user -> rights -> fournisseur -> facture -> lire && empty ( $conf -> global -> MAIN_USE_NEW_SUPPLIERMOD )) || ( $conf -> supplier_invoice -> enabled && $user -> rights -> supplier_invoice -> lire )) $elementList [ 'invoice_supplier_send' ] = $langs -> trans ( 'MailToSendSupplierInvoice' );
if ( $conf -> societe -> enabled && $user -> rights -> societe -> lire ) $elementList [ 'thirdparty' ] = $langs -> trans ( 'MailToThirdparty' );
if ( $conf -> adherent -> enabled && $user -> rights -> adherent -> lire ) $elementList [ 'member' ] = $langs -> trans ( 'MailToMember' );
if ( $conf -> contrat -> enabled && $user -> rights -> contrat -> lire ) $elementList [ 'contract' ] = $langs -> trans ( 'MailToSendContract' );
2019-12-16 13:06:25 +01:00
if ( $conf -> projet -> enabled ) $elementList [ 'project' ] = $langs -> trans ( 'MailToProject' );
2020-08-07 14:38:03 +02:00
if ( $conf -> ticket -> enabled && $user -> rights -> ticket -> read ) $elementList [ 'ticket_send' ] = $langs -> trans ( 'MailToTicket' );
2020-08-23 22:11:16 +02:00
if ( $conf -> recruitment -> enabled && $user -> rights -> recruitment -> recruitmentjobposition -> read ) $elementList [ 'recruitmentcandidature_send' ] = $langs -> trans ( 'RecruitmentCandidatures' );
2020-08-27 11:15:08 +02:00
if ( $conf -> agenda -> enabled ) $elementList [ 'actioncomm_send' ] = $langs -> trans ( 'MailToSendEventPush' );
2019-12-16 13:06:25 +01:00
$elementList [ 'user' ] = $langs -> trans ( 'MailToUser' );
$parameters = array ( 'elementList' => $elementList );
$reshook = $hookmanager -> executeHooks ( 'emailElementlist' , $parameters ); // Note that $action and $object may have been modified by some hooks
2017-02-12 18:13:49 +01:00
if ( $reshook == 0 ) {
foreach ( $hookmanager -> resArray as $item => $value ) {
$elementList [ $item ] = $value ;
}
}
2018-05-01 16:24:40 +02:00
// Add all and none after the sort
2019-12-16 13:06:25 +01:00
$elementList [ 'all' ] = '-- ' . $langs -> trans ( " All " ) . ' -- (' . $langs -> trans ( 'VisibleEverywhere' ) . ')' ;
$elementList [ 'none' ] = '-- ' . $langs -> trans ( " None " ) . ' -- (' . $langs -> trans ( 'VisibleNowhere' ) . ')' ;
2018-05-01 16:24:40 +02:00
asort ( $elementList );
2017-02-12 18:13:49 +01:00
$id = 25 ;
/*
* Actions
*/
2019-12-16 13:06:25 +01:00
if ( GETPOST ( 'cancel' , 'alpha' )) { $action = 'list' ; $massaction = '' ; }
if ( ! GETPOST ( 'confirmmassaction' , 'alpha' ) && $massaction != 'presend' && $massaction != 'confirm_presend' ) { $massaction = '' ; }
2017-06-20 12:54:26 +02:00
2019-12-16 13:06:25 +01:00
$parameters = array ();
$reshook = $hookmanager -> executeHooks ( 'doActions' , $parameters , $object , $action ); // Note that $action and $object may have been modified by some hooks
2017-06-20 12:54:26 +02:00
if ( $reshook < 0 ) setEventMessages ( $hookmanager -> error , $hookmanager -> errors , 'errors' );
2017-02-12 18:13:49 +01:00
2017-06-20 12:54:26 +02:00
if ( empty ( $reshook ))
2017-02-12 18:13:49 +01:00
{
2020-09-07 10:18:17 +02:00
// Purge search criteria
if ( GETPOST ( 'button_removefilter_x' , 'alpha' ) || GETPOST ( 'button_removefilter.x' , 'alpha' ) || GETPOST ( 'button_removefilter' , 'alpha' )) // All tests are required to be compatible with all browsers
{
$search_label = '' ;
$search_type_template = '' ;
$search_lang = '' ;
$search_fk_user = '' ;
$search_topic = '' ;
$toselect = '' ;
$search_array_options = array ();
}
2020-02-16 18:06:25 +01:00
2020-09-07 10:18:17 +02:00
// Actions add or modify an entry into a dictionary
if ( GETPOST ( 'actionadd' , 'alpha' ) || GETPOST ( 'actionmodify' , 'alpha' ))
{
$listfield = explode ( ',' , str_replace ( ' ' , '' , $tabfield [ $id ]));
$listfieldinsert = explode ( ',' , $tabfieldinsert [ $id ]);
$listfieldmodify = explode ( ',' , $tabfieldinsert [ $id ]);
$listfieldvalue = explode ( ',' , $tabfieldvalue [ $id ]);
// Check that all fields are filled
$ok = 1 ;
foreach ( $listfield as $f => $value )
{
// Not mandatory fields
if ( $value == 'joinfiles' ) continue ;
if ( $value == 'content' ) continue ;
if ( $value == 'content_lines' ) continue ;
if ( GETPOST ( 'actionmodify' , 'alpha' ) && $value == 'topic' ) $_POST [ 'topic' ] = $_POST [ 'topic-' . $rowid ];
if (( ! isset ( $_POST [ $value ]) || $_POST [ $value ] == '' || $_POST [ $value ] == '-1' ) && $value != 'lang' && $value != 'fk_user' && $value != 'position' )
{
$ok = 0 ;
$fieldnamekey = $listfield [ $f ];
// We take translate key of field
if ( $fieldnamekey == 'libelle' || ( $fieldnamekey == 'label' )) $fieldnamekey = 'Code' ;
if ( $fieldnamekey == 'code' ) $fieldnamekey = 'Code' ;
if ( $fieldnamekey == 'note' ) $fieldnamekey = 'Note' ;
if ( $fieldnamekey == 'type_template' ) $fieldnamekey = 'TypeOfTemplate' ;
if ( $fieldnamekey == 'fk_user' ) $fieldnamekey = 'Owner' ;
if ( $fieldnamekey == 'private' ) $fieldnamekey = 'Private' ;
if ( $fieldnamekey == 'position' ) $fieldnamekey = 'Position' ;
if ( $fieldnamekey == 'topic' ) $fieldnamekey = 'Topic' ;
setEventMessages ( $langs -> transnoentities ( " ErrorFieldRequired " , $langs -> transnoentities ( $fieldnamekey )), null , 'errors' );
}
}
// Si verif ok et action add, on ajoute la ligne
if ( $ok && GETPOST ( 'actionadd' ))
{
// Add new entry
$sql = " INSERT INTO " . $tabname [ $id ] . " ( " ;
// List of fields
$sql .= $tabfieldinsert [ $id ];
$sql .= " ,active) " ;
$sql .= " VALUES( " ;
// List of values
$i = 0 ;
foreach ( $listfieldinsert as $f => $value )
{
$keycode = $listfieldvalue [ $i ];
if ( $value == 'lang' ) $keycode = 'langcode' ;
if ( empty ( $keycode )) $keycode = $value ;
if ( $value == 'entity' ) $_POST [ $keycode ] = $conf -> entity ;
if ( $value == 'fk_user' && ! ( $_POST [ $keycode ] > 0 )) $_POST [ $keycode ] = '' ;
if ( $value == 'private' && ! is_numeric ( $_POST [ $keycode ])) $_POST [ $keycode ] = '0' ;
if ( $value == 'position' && ! is_numeric ( $_POST [ $keycode ])) $_POST [ $keycode ] = '1' ;
//var_dump($keycode.' '.$value);
if ( $i ) $sql .= " , " ;
if ( GETPOST ( $keycode ) == '' && $keycode != 'langcode' ) $sql .= " null " ; // langcode must be '' if not defined so the unique key that include lang will work
elseif ( GETPOST ( $keycode ) == '0' && $keycode == 'langcode' ) $sql .= " '' " ; // langcode must be '' if not defined so the unique key that include lang will work
elseif ( $keycode == 'content' ) {
$sql .= " ' " . $db -> escape ( GETPOST ( $keycode , 'restricthtml' )) . " ' " ;
} elseif ( in_array ( $keycode , array ( 'joinfile' , 'private' , 'position' , 'scale' ))) {
$sql .= ( int ) GETPOST ( $keycode , 'int' );
} else {
$sql .= " ' " . $db -> escape ( GETPOST ( $keycode , 'nohtml' )) . " ' " ;
}
$i ++ ;
}
$sql .= " , 1) " ;
dol_syslog ( " actionadd " , LOG_DEBUG );
$result = $db -> query ( $sql );
if ( $result ) // Add is ok
{
setEventMessages ( $langs -> transnoentities ( " RecordSaved " ), null , 'mesgs' );
$_POST = array ( 'id' => $id ); // Clean $_POST array, we keep only id
} else {
if ( $db -> errno () == 'DB_ERROR_RECORD_ALREADY_EXISTS' ) {
setEventMessages ( $langs -> transnoentities ( " ErrorRecordAlreadyExists " ), null , 'errors' );
} else {
dol_print_error ( $db );
}
}
}
// Si verif ok et action modify, on modifie la ligne
if ( $ok && GETPOST ( 'actionmodify' ))
{
$rowidcol = " rowid " ;
// Modify entry
$sql = " UPDATE " . $tabname [ $id ] . " SET " ;
// Modifie valeur des champs
$i = 0 ;
foreach ( $listfieldmodify as $field )
{
$keycode = $listfieldvalue [ $i ];
if ( $field == 'lang' ) $keycode = 'langcode' ;
if ( empty ( $keycode )) $keycode = $field ;
if ( $field == 'fk_user' && ! ( $_POST [ 'fk_user' ] > 0 )) $_POST [ 'fk_user' ] = '' ;
if ( $field == 'topic' ) $_POST [ 'topic' ] = $_POST [ 'topic-' . $rowid ];
if ( $field == 'joinfiles' ) $_POST [ 'joinfiles' ] = $_POST [ 'joinfiles-' . $rowid ];
if ( $field == 'content' ) $_POST [ 'content' ] = $_POST [ 'content-' . $rowid ];
if ( $field == 'content_lines' ) $_POST [ 'content_lines' ] = $_POST [ 'content_lines-' . $rowid ];
if ( $field == 'entity' ) $_POST [ $keycode ] = $conf -> entity ;
if ( $i ) $sql .= " , " ;
$sql .= $field . " = " ;
if ( GETPOST ( $keycode ) == '' || ( $keycode != 'langcode' && $keycode != 'position' && $keycode != 'private' && ! GETPOST ( $keycode ))) $sql .= " null " ; // langcode,... must be '' if not defined so the unique key that include lang will work
elseif ( GETPOST ( $keycode ) == '0' && $keycode == 'langcode' ) $sql .= " '' " ; // langcode must be '' if not defined so the unique key that include lang will work
elseif ( $keycode == 'content' ) {
$sql .= " ' " . $db -> escape ( GETPOST ( $keycode , 'restricthtml' )) . " ' " ;
} elseif ( in_array ( $keycode , array ( 'joinfile' , 'private' , 'position' , 'scale' ))) {
$sql .= ( int ) GETPOST ( $keycode , 'int' );
} else {
$sql .= " ' " . $db -> escape ( GETPOST ( $keycode , 'nohtml' )) . " ' " ;
}
$i ++ ;
}
$sql .= " WHERE " . $rowidcol . " = ' " . $rowid . " ' " ;
//print $sql;exit;
dol_syslog ( " actionmodify " , LOG_DEBUG );
//print $sql;
$resql = $db -> query ( $sql );
if ( $resql )
{
setEventMessages ( $langs -> transnoentities ( " RecordSaved " ), null , 'mesgs' );
} else {
setEventMessages ( $db -> error (), null , 'errors' );
}
}
}
if ( $action == 'confirm_delete' && $confirm == 'yes' ) // delete
{
$rowidcol = " rowid " ;
$sql = " DELETE from " . $tabname [ $id ] . " WHERE " . $rowidcol . " =' " . $rowid . " ' " ;
dol_syslog ( " delete " , LOG_DEBUG );
$result = $db -> query ( $sql );
if ( ! $result )
{
if ( $db -> errno () == 'DB_ERROR_CHILD_EXISTS' )
{
setEventMessages ( $langs -> transnoentities ( " ErrorRecordIsUsedByChild " ), null , 'errors' );
} else {
dol_print_error ( $db );
}
}
}
// activate
if ( $action == $acts [ 0 ])
{
$rowidcol = " rowid " ;
$sql = " UPDATE " . $tabname [ $id ] . " SET active = 1 WHERE " . $rowidcol . " =' " . $rowid . " ' " ;
$result = $db -> query ( $sql );
if ( ! $result )
{
dol_print_error ( $db );
}
}
// disable
if ( $action == $acts [ 1 ])
{
$rowidcol = " rowid " ;
$sql = " UPDATE " . $tabname [ $id ] . " SET active = 0 WHERE " . $rowidcol . " =' " . $rowid . " ' " ;
2020-02-16 18:06:25 +01:00
2020-09-07 10:18:17 +02:00
$result = $db -> query ( $sql );
if ( ! $result )
{
dol_print_error ( $db );
}
}
2017-02-12 18:13:49 +01:00
}
/*
* View
*/
$form = new Form ( $db );
2019-12-16 13:06:25 +01:00
$formadmin = new FormAdmin ( $db );
2017-02-12 18:13:49 +01:00
2020-08-25 19:40:17 +02:00
$help_url = '' ;
$title = $langs -> trans ( " EMailsSetup " );
llxHeader ( '' , $title );
2017-02-12 18:13:49 +01:00
2019-12-16 13:06:25 +01:00
$linkback = '' ;
$titlepicto = 'title_setup' ;
2017-02-12 18:13:49 +01:00
2020-08-25 19:40:17 +02:00
print load_fiche_titre ( $title , $linkback , $titlepicto );
2017-02-12 18:13:49 +01:00
2017-10-13 12:02:26 +02:00
$head = email_admin_prepare_head ();
2017-02-12 18:13:49 +01:00
2017-03-18 19:57:33 +01:00
dol_fiche_head ( $head , 'templates' , '' , - 1 );
2017-02-12 18:13:49 +01:00
// Confirmation de la suppression de la ligne
if ( $action == 'delete' )
{
2020-09-07 10:18:17 +02:00
print $form -> formconfirm ( $_SERVER [ " PHP_SELF " ] . '?' . ( $page ? 'page=' . $page . '&' : '' ) . 'sortfield=' . $sortfield . '&sortorder=' . $sortorder . '&rowid=' . $rowid . '&code=' . $code . '&id=' . $id , $langs -> trans ( 'DeleteLine' ), $langs -> trans ( 'ConfirmDeleteLine' ), 'confirm_delete' , '' , 0 , 1 );
2017-02-12 18:13:49 +01:00
}
//var_dump($elementList);
2017-06-20 12:54:26 +02:00
2019-12-16 13:06:25 +01:00
$sql = " SELECT rowid as rowid, label, type_template, lang, fk_user, private, position, topic, joinfiles, content_lines, content, enabled, active " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " c_email_templates " ;
$sql .= " WHERE entity IN ( " . getEntity ( 'email_template' ) . " ) " ;
if ( ! $user -> admin )
2017-02-12 18:13:49 +01:00
{
2019-12-16 13:06:25 +01:00
$sql .= " AND (private = 0 OR (private = 1 AND fk_user = " . $user -> id . " )) " ; // Show only public and private to me
$sql .= " AND (active = 1 OR fk_user = " . $user -> id . " ) " ; // Show only active or owned by me
2017-02-12 18:13:49 +01:00
}
2017-08-25 16:38:45 +02:00
if ( empty ( $conf -> global -> MAIN_MULTILANGS ))
2017-02-12 18:13:49 +01:00
{
2019-12-16 13:06:25 +01:00
$sql .= " AND (lang = ' " . $langs -> defaultlang . " ' OR lang IS NULL OR lang = '') " ;
2017-02-12 18:13:49 +01:00
}
2019-12-16 13:06:25 +01:00
if ( $search_label ) $sql .= natural_search ( 'label' , $search_label );
if ( $search_type_template != '' && $search_type_template != '-1' ) $sql .= natural_search ( 'type_template' , $search_type_template );
if ( $search_lang ) $sql .= natural_search ( 'lang' , $search_lang );
if ( $search_fk_user != '' && $search_fk_user != '-1' ) $sql .= natural_search ( 'fk_user' , $search_fk_user , 2 );
if ( $search_topic ) $sql .= natural_search ( 'topic' , $search_topic );
2018-04-25 16:01:06 +02:00
// If sort order is "country", we use country_code instead
2019-12-16 13:06:25 +01:00
if ( $sortfield == 'country' ) $sortfield = 'country_code' ;
$sql .= $db -> order ( $sortfield , $sortorder );
$sql .= $db -> plimit ( $listlimit + 1 , $offset );
2017-02-12 18:13:49 +01:00
//print $sql;
2019-12-16 13:06:25 +01:00
$fieldlist = explode ( ',' , $tabfield [ $id ]);
2017-02-12 18:13:49 +01:00
// Form to add a new line
print '<form action="' . $_SERVER [ 'PHP_SELF' ] . '?id=' . $id . '" method="POST">' ;
2019-12-18 23:12:31 +01:00
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
2019-01-27 11:55:16 +01:00
print '<input type="hidden" name="from" value="' . dol_escape_htmltag ( GETPOST ( 'from' , 'alpha' )) . '">' ;
2017-02-12 18:13:49 +01:00
2017-09-08 10:09:22 +02:00
print '<div class="div-table-responsive-no-min">' ;
2019-11-05 21:24:41 +01:00
print '<table class="noborder centpercent">' ;
2017-02-12 18:13:49 +01:00
2017-09-08 12:21:47 +02:00
// Line to enter new values (title)
print '<tr class="liste_titre">' ;
foreach ( $fieldlist as $field => $value )
2017-02-12 18:13:49 +01:00
{
2018-12-12 11:50:10 +01:00
// Determine le nom du champ par rapport aux noms possibles
// dans les dictionnaires de donnees
2019-12-16 13:06:25 +01:00
$valuetoshow = ucfirst ( $fieldlist [ $field ]); // Par defaut
$valuetoshow = $langs -> trans ( $valuetoshow ); // try to translate
$align = " left " ;
if ( $fieldlist [ $field ] == 'fk_user' ) { $valuetoshow = $langs -> trans ( " Owner " ); }
if ( $fieldlist [ $field ] == 'lang' ) { $valuetoshow = ( empty ( $conf -> global -> MAIN_MULTILANGS ) ? ' ' : $langs -> trans ( " Language " )); }
if ( $fieldlist [ $field ] == 'type' ) { $valuetoshow = $langs -> trans ( " Type " ); }
if ( $fieldlist [ $field ] == 'code' ) { $valuetoshow = $langs -> trans ( " Code " ); }
if ( $fieldlist [ $field ] == 'libelle' || $fieldlist [ $field ] == 'label' ) { $valuetoshow = $langs -> trans ( " Code " ); }
if ( $fieldlist [ $field ] == 'type_template' ) { $valuetoshow = $langs -> trans ( " TypeOfTemplate " ); }
if ( $fieldlist [ $field ] == 'private' ) { $align = 'center' ; }
if ( $fieldlist [ $field ] == 'position' ) { $align = 'center' ; }
if ( $fieldlist [ $field ] == 'topic' ) { $valuetoshow = '' ; }
if ( $fieldlist [ $field ] == 'joinfiles' ) { $valuetoshow = '' ; }
if ( $fieldlist [ $field ] == 'content' ) { $valuetoshow = '' ; }
if ( $fieldlist [ $field ] == 'content_lines' ) { $valuetoshow = '' ; }
2018-12-12 11:50:10 +01:00
if ( $valuetoshow != '' )
{
print '<td align="' . $align . '">' ;
2019-12-16 13:06:25 +01:00
if ( ! empty ( $tabhelp [ $id ][ $value ]) && preg_match ( '/^http(s*):/i' , $tabhelp [ $id ][ $value ])) print '<a href="' . $tabhelp [ $id ][ $value ] . '" target="_blank">' . $valuetoshow . ' ' . img_help ( 1 , $valuetoshow ) . '</a>' ;
elseif ( ! empty ( $tabhelp [ $id ][ $value ]))
2018-12-12 11:50:10 +01:00
{
2019-12-16 13:06:25 +01:00
if ( in_array ( $value , array ( 'topic' ))) print $form -> textwithpicto ( $valuetoshow , $tabhelp [ $id ][ $value ], 1 , 'help' , '' , 0 , 2 , $value ); // Tooltip on click
else print $form -> textwithpicto ( $valuetoshow , $tabhelp [ $id ][ $value ], 1 , 'help' , '' , 0 , 2 ); // Tooltip on hover
2020-05-21 09:35:30 +02:00
} else print $valuetoshow ;
2018-12-12 11:50:10 +01:00
print '</td>' ;
}
2017-09-08 12:21:47 +02:00
}
2017-10-08 14:51:10 +02:00
print '<td>' ;
2019-12-16 13:06:25 +01:00
print '<input type="hidden" name="id" value="' . $id . '">' ;
2017-09-08 12:21:47 +02:00
print '</td>' ;
print '</tr>' ;
2017-06-01 01:53:55 +02:00
2017-09-08 12:21:47 +02:00
$obj = new stdClass ();
// If data was already input, we define them in obj to populate input fields.
if ( GETPOST ( 'actionadd' ))
{
foreach ( $fieldlist as $key => $val ) {
if ( GETPOST ( $val ) != '' )
$obj -> $val = GETPOST ( $val );
}
}
2017-06-01 01:53:55 +02:00
2017-09-08 12:21:47 +02:00
$tmpaction = 'create' ;
$parameters = array (
'fieldlist' => $fieldlist ,
'tabname' => $tabname [ $id ]
);
2018-04-05 13:21:00 +02:00
$reshook = $hookmanager -> executeHooks ( 'createEmailTemplateFieldlist' , $parameters , $obj , $tmpaction ); // Note that $action and $object may have been modified by some hooks
2017-09-08 12:21:47 +02:00
$error = $hookmanager -> error ;
$errors = $hookmanager -> errors ;
2017-06-01 01:53:55 +02:00
2017-10-08 14:51:10 +02:00
// Line to enter new values (input fields)
2020-04-25 19:13:20 +02:00
print '<tr class="oddeven">' ;
2017-06-01 01:53:55 +02:00
2017-09-08 12:21:47 +02:00
if ( empty ( $reshook ))
{
2017-09-22 09:56:07 +02:00
if ( $action == 'edit' ) {
2017-09-08 12:21:47 +02:00
fieldList ( $fieldlist , $obj , $tabname [ $id ], 'hide' );
} else {
fieldList ( $fieldlist , $obj , $tabname [ $id ], 'add' );
}
}
2017-06-01 01:53:55 +02:00
2019-01-22 11:51:03 +01:00
print '<td class="right">' ;
2017-09-08 12:21:47 +02:00
print '</td>' ;
print " </tr> " ;
2017-06-01 01:53:55 +02:00
2018-12-12 11:50:10 +01:00
// Show fields for topic, join files and body
2017-10-08 14:51:10 +02:00
$fieldsforcontent = array ( 'topic' , 'joinfiles' , 'content' );
2020-08-19 14:38:02 +02:00
if ( ! empty ( $conf -> global -> MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES )) { $fieldsforcontent = array ( 'topic' , 'joinfiles' , 'content' , 'content_lines' ); }
2017-09-08 12:21:47 +02:00
foreach ( $fieldsforcontent as $tmpfieldlist )
{
2017-10-08 14:51:10 +02:00
print '<tr class="impair nodrag nodrop nohover"><td colspan="6" class="nobottom">' ;
2020-08-07 14:38:03 +02:00
2017-10-08 14:51:10 +02:00
// Label
if ( $tmpfieldlist == 'topic' )
{
2019-12-16 13:06:25 +01:00
print '<strong>' . $form -> textwithpicto ( $langs -> trans ( " Topic " ), $tabhelp [ $id ][ $tmpfieldlist ], 1 , 'help' , '' , 0 , 2 , $tmpfieldlist ) . '</strong> ' ;
2017-10-08 14:51:10 +02:00
}
if ( $tmpfieldlist == 'joinfiles' )
{
2019-12-16 13:06:25 +01:00
print '<strong>' . $form -> textwithpicto ( $langs -> trans ( " FilesAttachedToEmail " ), $tabhelp [ $id ][ $tmpfieldlist ], 1 , 'help' , '' , 0 , 2 , $tmpfieldlist ) . '</strong> ' ;
2017-10-08 14:51:10 +02:00
}
2017-09-08 12:21:47 +02:00
if ( $tmpfieldlist == 'content' )
2019-02-05 00:25:42 +01:00
print $form -> textwithpicto ( $langs -> trans ( " Content " ), $tabhelp [ $id ][ $tmpfieldlist ], 1 , 'help' , '' , 0 , 2 , $tmpfieldlist ) . '<br>' ;
2017-09-08 12:21:47 +02:00
if ( $tmpfieldlist == 'content_lines' )
2019-12-16 13:06:25 +01:00
print $form -> textwithpicto ( $langs -> trans ( " ContentForLines " ), $tabhelp [ $id ][ $tmpfieldlist ], 1 , 'help' , '' , 0 , 2 , $tmpfieldlist ) . '<br>' ;
2020-08-07 14:38:03 +02:00
2017-10-08 14:51:10 +02:00
// Input field
if ( $tmpfieldlist == 'topic' ) {
2019-12-16 13:06:25 +01:00
print '<input type="text" class="flat minwidth500" name="' . $tmpfieldlist . '" value="' . ( ! empty ( $obj -> { $tmpfieldlist }) ? $obj -> { $tmpfieldlist } : '' ) . '">' ;
2020-05-21 09:35:30 +02:00
} elseif ( $tmpfieldlist == 'joinfiles' ) {
2019-12-16 13:06:25 +01:00
print '<input type="text" class="flat maxwidth50" name="' . $tmpfieldlist . '" value="' . ( isset ( $obj -> { $tmpfieldlist }) ? $obj -> { $tmpfieldlist } : '1' ) . '">' ;
2020-05-21 09:35:30 +02:00
} else {
2017-10-08 14:51:10 +02:00
if ( $context != 'hide' ) {
// print '<textarea cols="3" rows="'.ROWS_2.'" class="flat" name="'.$fieldlist[$field].'">'.(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'').'</textarea>';
$okforextended = true ;
if ( empty ( $conf -> global -> FCKEDITOR_ENABLE_MAIL ))
$okforextended = false ;
2019-12-16 13:06:25 +01:00
$doleditor = new DolEditor ( $tmpfieldlist , ( ! empty ( $obj -> { $tmpfieldlist }) ? $obj -> { $tmpfieldlist } : '' ), '' , 120 , 'dolibarr_mailings' , 'In' , 0 , false , $okforextended , ROWS_4 , '90%' );
2017-10-08 14:51:10 +02:00
print $doleditor -> Create ( 1 );
2020-05-21 09:35:30 +02:00
} else print ' ' ;
2017-10-08 14:51:10 +02:00
}
2017-09-08 12:21:47 +02:00
print '</td>' ;
2017-10-08 14:51:10 +02:00
if ( $tmpfieldlist == 'topic' ) {
2019-12-16 13:06:25 +01:00
print '<td class="center" rowspan="' . ( count ( $fieldsforcontent )) . '">' ;
2017-09-08 12:21:47 +02:00
if ( $action != 'edit' ) {
2019-12-16 13:06:25 +01:00
print '<input type="submit" class="button" name="actionadd" value="' . $langs -> trans ( " Add " ) . '">' ;
2017-09-08 12:21:47 +02:00
}
print '</td>' ;
}
// else print '<td></td>';
print '</tr>' ;
}
2017-06-01 01:53:55 +02:00
2019-12-16 13:06:25 +01:00
$colspan = count ( $fieldlist ) + 1 ;
2017-09-08 12:21:47 +02:00
//print '<tr><td colspan="'.$colspan.'"> </td></tr>'; // Keep to have a line with enough height
2017-02-12 18:13:49 +01:00
2017-06-20 12:54:26 +02:00
print '</table>' ;
2017-09-08 10:09:22 +02:00
print '</div>' ;
2017-06-20 12:54:26 +02:00
print '</form>' ;
print '<br>' ;
print '<form action="' . $_SERVER [ 'PHP_SELF' ] . '?id=' . $id . '" method="POST">' ;
2019-12-18 23:12:31 +01:00
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
2019-01-27 11:55:16 +01:00
print '<input type="hidden" name="from" value="' . dol_escape_htmltag ( GETPOST ( 'from' , 'alpha' )) . '">' ;
2017-06-20 12:54:26 +02:00
2017-09-08 10:09:22 +02:00
print '<div class="div-table-responsive-no-min">' ;
2019-11-05 21:24:41 +01:00
print '<table class="noborder centpercent">' ;
2017-02-12 18:13:49 +01:00
// List of available record in database
dol_syslog ( " htdocs/admin/dict " , LOG_DEBUG );
2019-12-16 13:06:25 +01:00
$resql = $db -> query ( $sql );
2017-02-12 18:13:49 +01:00
if ( $resql )
{
2020-09-07 10:18:17 +02:00
$num = $db -> num_rows ( $resql );
$i = 0 ;
$param = '&id=' . $id ;
if ( $search_label ) $param .= '&search_label=' . urlencode ( $search_label );
if ( $search_lang > 0 ) $param .= '&search_lang=' . urlencode ( $search_lang );
if ( $search_type_template != '-1' ) $param .= '&search_type_template=' . urlencode ( $search_type_template );
if ( $search_fk_user > 0 ) $param .= '&search_fk_user=' . urlencode ( $search_fk_user );
if ( $search_topic ) $param .= '&search_topic=' . urlencode ( $search_topic );
$paramwithsearch = $param ;
if ( $sortorder ) $paramwithsearch .= '&sortorder=' . urlencode ( $sortorder );
if ( $sortfield ) $paramwithsearch .= '&sortfield=' . urlencode ( $sortfield );
if ( GETPOST ( 'from' , 'alpha' )) $paramwithsearch .= '&from=' . urlencode ( GETPOST ( 'from' , 'alpha' ));
// There is several pages
if ( $num > $listlimit )
{
print '<tr class="none"><td class="right" colspan="' . ( 3 + count ( $fieldlist )) . '">' ;
print_fleche_navigation ( $page , $_SERVER [ " PHP_SELF " ], $paramwithsearch , ( $num > $listlimit ), '<li class="pagination"><span>' . $langs -> trans ( " Page " ) . ' ' . ( $page + 1 ) . '</span></li>' );
print '</td></tr>' ;
}
// Title line with search boxes
print '<tr class="liste_titre">' ;
$filterfound = 0 ;
foreach ( $fieldlist as $field => $value )
{
if ( $value == 'label' ) {
print '<td class="liste_titre"><input type="text" name="search_label" class="maxwidth100" value="' . dol_escape_htmltag ( $search_label ) . '"></td>' ;
} elseif ( $value == 'lang' ) {
print '<td class="liste_titre">' ;
print $formadmin -> select_language ( $search_lang , 'search_lang' , 0 , null , 1 , 0 , 0 , 'maxwidth100' );
print '</td>' ;
} elseif ( $value == 'fk_user' ) {
print '<td class="liste_titre">' ;
$restrictid = array ();
if ( ! $user -> admin ) $restrictid = array ( $user -> id );
//var_dump($restrictid);
print $form -> select_dolusers ( $search_fk_user , 'search_fk_user' , 1 , null , 0 , 'hierarchyme' , null , 0 , 0 , 1 , '' , 0 , '' , 'maxwidth100' );
print '</td>' ;
} elseif ( $value == 'topic' ) {
print '<td class="liste_titre"><input type="text" name="search_topic" value="' . dol_escape_htmltag ( $search_topic ) . '"></td>' ;
} elseif ( $value == 'type_template' ) {
print '<td class="liste_titre">' . $form -> selectarray ( 'search_type_template' , $elementList , $search_type_template , 1 , 0 , 0 , '' , 0 , 0 , 0 , '' , 'maxwidth100 maxwidth100onsmartphone' ) . '</td>' ;
} elseif ( ! in_array ( $value , array ( 'content' , 'content_lines' ))) {
print '<td class="liste_titre"></td>' ;
}
}
if ( empty ( $conf -> global -> MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES )) print '<td class="liste_titre"></td>' ;
// Action column
print '<td class="liste_titre right" width="64">' ;
$searchpicto = $form -> showFilterButtons ();
print $searchpicto ;
print '</td>' ;
print '</tr>' ;
// Title of lines
print '<tr class="liste_titre">' ;
foreach ( $fieldlist as $field => $value )
{
$showfield = 1 ; // By defaut
$align = " left " ;
$sortable = 1 ;
$valuetoshow = '' ;
$forcenowrap = 1 ;
/*
2017-02-12 18:13:49 +01:00
$tmparray = getLabelOfField ( $fieldlist [ $field ]);
$showfield = $tmp [ 'showfield' ];
$valuetoshow = $tmp [ 'valuetoshow' ];
$align = $tmp [ 'align' ];
$sortable = $tmp [ 'sortable' ];
*/
2020-09-07 10:18:17 +02:00
$valuetoshow = ucfirst ( $fieldlist [ $field ]); // By defaut
$valuetoshow = $langs -> trans ( $valuetoshow ); // try to translate
if ( $fieldlist [ $field ] == 'fk_user' ) { $valuetoshow = $langs -> trans ( " Owner " ); }
if ( $fieldlist [ $field ] == 'lang' ) { $valuetoshow = $langs -> trans ( " Language " ); }
if ( $fieldlist [ $field ] == 'type' ) { $valuetoshow = $langs -> trans ( " Type " ); }
if ( $fieldlist [ $field ] == 'libelle' || $fieldlist [ $field ] == 'label' ) { $valuetoshow = $langs -> trans ( " Code " ); }
if ( $fieldlist [ $field ] == 'type_template' ) { $valuetoshow = $langs -> trans ( " TypeOfTemplate " ); }
2019-12-16 13:06:25 +01:00
if ( $fieldlist [ $field ] == 'private' ) { $align = 'center' ; }
if ( $fieldlist [ $field ] == 'position' ) { $align = 'center' ; }
if ( $fieldlist [ $field ] == 'joinfiles' ) { $valuetoshow = $langs -> trans ( " FilesAttachedToEmail " ); $align = 'center' ; $forcenowrap = 0 ; }
if ( $fieldlist [ $field ] == 'content' ) { $valuetoshow = $langs -> trans ( " Content " ); $showfield = 0 ; }
if ( $fieldlist [ $field ] == 'content_lines' ) { $valuetoshow = $langs -> trans ( " ContentLines " ); $showfield = 0 ; }
2017-02-12 18:13:49 +01:00
2020-09-07 10:18:17 +02:00
// Show fields
if ( $showfield )
{
if ( ! empty ( $tabhelp [ $id ][ $value ]))
{
if ( in_array ( $value , array ( 'topic' ))) $valuetoshow = $form -> textwithpicto ( $valuetoshow , $tabhelp [ $id ][ $value ], 1 , 'help' , '' , 0 , 2 , 'tooltip' . $value , $forcenowrap ); // Tooltip on click
else $valuetoshow = $form -> textwithpicto ( $valuetoshow , $tabhelp [ $id ][ $value ], 1 , 'help' , '' , 0 , 2 , '' , $forcenowrap ); // Tooltip on hover
}
print getTitleFieldOfList ( $valuetoshow , 0 , $_SERVER [ " PHP_SELF " ], ( $sortable ? $fieldlist [ $field ] : '' ), ( $page ? 'page=' . $page . '&' : '' ), $param , " align= " . $align , $sortfield , $sortorder );
}
}
2017-06-01 01:53:55 +02:00
2020-09-07 10:18:17 +02:00
print getTitleFieldOfList ( $langs -> trans ( " Status " ), 0 , $_SERVER [ " PHP_SELF " ], " active " , ( $page ? 'page=' . $page . '&' : '' ), $param , 'align="center"' , $sortfield , $sortorder );
print getTitleFieldOfList ( '' );
print '</tr>' ;
if ( $num )
{
// Lines with values
while ( $i < $num )
{
$obj = $db -> fetch_object ( $resql );
if ( $action == 'edit' && ( $rowid == ( ! empty ( $obj -> rowid ) ? $obj -> rowid : $obj -> code )))
{
print '<tr class="oddeven" id="rowid-' . $obj -> rowid . '">' ;
$tmpaction = 'edit' ;
$parameters = array ( 'fieldlist' => $fieldlist , 'tabname' => $tabname [ $id ]);
$reshook = $hookmanager -> executeHooks ( 'editEmailTemplateFieldlist' , $parameters , $obj , $tmpaction ); // Note that $action and $object may have been modified by some hooks
$error = $hookmanager -> error ; $errors = $hookmanager -> errors ;
// Show fields
if ( empty ( $reshook )) fieldList ( $fieldlist , $obj , $tabname [ $id ], 'edit' );
print '<td></td><td></td><td></td>' ;
print '<td class="center">' ;
print '<input type="hidden" name="page" value="' . $page . '">' ;
print '<input type="hidden" name="rowid" value="' . $rowid . '">' ;
print '<input type="submit" class="button buttongen" name="actionmodify" value="' . $langs -> trans ( " Modify " ) . '">' ;
print '<div name="' . ( ! empty ( $obj -> rowid ) ? $obj -> rowid : $obj -> code ) . '"></div>' ;
print '<input type="submit" class="button buttongen" name="actioncancel" value="' . $langs -> trans ( " Cancel " ) . '">' ;
print '</td>' ;
$fieldsforcontent = array ( 'topic' , 'joinfiles' , 'content' );
if ( ! empty ( $conf -> global -> MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES ))
{
$fieldsforcontent = array ( 'topic' , 'joinfiles' , 'content' , 'content_lines' );
}
foreach ( $fieldsforcontent as $tmpfieldlist )
{
$showfield = 1 ;
$align = " left " ;
$valuetoshow = $obj -> { $tmpfieldlist };
$class = 'tddict' ;
// Show value for field
if ( $showfield ) {
2017-10-08 14:51:10 +02:00
// Show line for topic, joinfiles and content
2020-09-07 10:18:17 +02:00
print '</tr><tr class="oddeven" nohover tr-' . $tmpfieldlist . '-' . $rowid . ' ">' ;
print '<td colspan="8">' ;
if ( $tmpfieldlist == 'topic' )
{
print '<strong>' . $form -> textwithpicto ( $langs -> trans ( " Topic " ), $tabhelp [ $id ][ $tmpfieldlist ], 1 , 'help' , '' , 0 , 2 , $tmpfieldlist ) . '</strong> ' ;
print '<input type="text" class="flat minwidth500" name="' . $tmpfieldlist . '-' . $rowid . '" value="' . ( ! empty ( $obj -> { $tmpfieldlist }) ? $obj -> { $tmpfieldlist } : '' ) . '">' ;
}
if ( $tmpfieldlist == 'joinfiles' )
{
print '<strong>' . $form -> textwithpicto ( $langs -> trans ( " FilesAttachedToEmail " ), $tabhelp [ $id ][ $tmpfieldlist ], 1 , 'help' , '' , 0 , 2 , $tmpfieldlist ) . '</strong> ' ;
print '<input type="text" class="flat maxwidth50" name="' . $tmpfieldlist . '-' . $rowid . '" value="' . ( ! empty ( $obj -> { $tmpfieldlist }) ? $obj -> { $tmpfieldlist } : '' ) . '">' ;
}
if ( $tmpfieldlist == 'content' )
{
print $form -> textwithpicto ( $langs -> trans ( " Content " ), $tabhelp [ $id ][ $tmpfieldlist ], 1 , 'help' , '' , 0 , 2 , $tmpfieldlist ) . '<br>' ;
$okforextended = true ;
if ( empty ( $conf -> global -> FCKEDITOR_ENABLE_MAIL )) $okforextended = false ;
$doleditor = new DolEditor ( $tmpfieldlist . '-' . $rowid , ( ! empty ( $obj -> { $tmpfieldlist }) ? $obj -> { $tmpfieldlist } : '' ), '' , 140 , 'dolibarr_mailings' , 'In' , 0 , false , $okforextended , ROWS_6 , '90%' );
print $doleditor -> Create ( 1 );
}
print '</td>' ;
print '<td></td>' ;
print '<td></td>' ;
}
}
2018-04-19 20:12:43 +02:00
2020-09-07 10:18:17 +02:00
print " </tr> \n " ;
} else {
$keyforobj = 'type_template' ;
if ( ! in_array ( $obj -> $keyforobj , array_keys ( $elementList )))
{
$i ++ ;
continue ; // It means this is a type of template not into elementList (may be because enabled condition of this type is false because module is not enabled)
}
2018-11-20 16:22:16 +01:00
// Test on 'enabled'
2019-12-16 13:06:25 +01:00
if ( ! dol_eval ( $obj -> enabled , 1 ))
2018-11-20 16:22:16 +01:00
{
$i ++ ;
2019-12-16 13:06:25 +01:00
continue ; // Email template not qualified
2018-11-20 16:22:16 +01:00
}
2018-04-19 20:12:43 +02:00
2020-09-07 10:18:17 +02:00
print '<tr class="oddeven" id="rowid-' . $obj -> rowid . '">' ;
2018-04-19 20:12:43 +02:00
2020-09-07 10:18:17 +02:00
$tmpaction = 'view' ;
$parameters = array ( 'var' => $var , 'fieldlist' => $fieldlist , 'tabname' => $tabname [ $id ]);
$reshook = $hookmanager -> executeHooks ( 'viewEmailTemplateFieldlist' , $parameters , $obj , $tmpaction ); // Note that $action and $object may have been modified by some hooks
2017-02-12 18:13:49 +01:00
2020-09-07 10:18:17 +02:00
$error = $hookmanager -> error ; $errors = $hookmanager -> errors ;
2017-02-12 18:13:49 +01:00
2020-09-07 10:18:17 +02:00
if ( empty ( $reshook ))
{
foreach ( $fieldlist as $field => $value )
{
if ( in_array ( $fieldlist [ $field ], array ( 'content' , 'content_lines' ))) continue ;
$showfield = 1 ;
$align = " left " ;
$valuetoshow = $obj -> { $fieldlist [ $field ]};
if ( $value == 'label' || $value == 'topic' )
{
$valuetoshow = dol_escape_htmltag ( $valuetoshow );
}
if ( $value == 'type_template' )
{
$valuetoshow = isset ( $elementList [ $valuetoshow ]) ? $elementList [ $valuetoshow ] : $valuetoshow ;
}
if ( $value == 'lang' && $valuetoshow )
{
$valuetoshow = $valuetoshow . ' - ' . $langs -> trans ( " Language_ " . $valuetoshow );
}
if ( $value == 'fk_user' )
{
if ( $valuetoshow > 0 )
{
$fuser = new User ( $db );
$fuser -> fetch ( $valuetoshow );
$valuetoshow = $fuser -> getNomUrl ( 1 );
}
}
if ( $value == 'private' )
{
$align = " center " ;
if ( $valuetoshow ) $valuetoshow = yn ( $valuetoshow );
else $valuetoshow = '' ;
}
if ( $value == 'position' )
{
$align = " center " ;
}
if ( $value == 'joinfiles' )
{
$align = " center " ;
if ( $valuetoshow ) $valuetoshow = 1 ;
else $valuetoshow = '' ;
}
$class = 'tddict' ;
2017-02-12 18:13:49 +01:00
// Show value for field
if ( $showfield )
{
2020-09-07 10:18:17 +02:00
print '<!-- ' . $fieldlist [ $field ] . ' -->' ;
print '<td align="' . $align . '" class="' . $class . '">' . $valuetoshow . '</td>' ;
2017-02-12 18:13:49 +01:00
}
2020-09-07 10:18:17 +02:00
}
}
2017-02-12 18:13:49 +01:00
2020-09-07 10:18:17 +02:00
// Can an entry be erased or disabled ?
$iserasable = 1 ; $canbedisabled = 1 ; $canbemodified = 1 ; // true by default
if ( ! $user -> admin && $obj -> fk_user != $user -> id )
{
$iserasable = 0 ;
$canbedisabled = 0 ;
$canbemodified = 0 ;
}
2017-02-12 18:13:49 +01:00
2020-09-07 10:18:17 +02:00
$url = $_SERVER [ " PHP_SELF " ] . '?' . ( $page ? 'page=' . $page . '&' : '' ) . 'sortfield=' . $sortfield . '&sortorder=' . $sortorder . '&rowid=' . ( ! empty ( $obj -> rowid ) ? $obj -> rowid : ( ! empty ( $obj -> code ) ? $obj -> code : '' )) . '&code=' . ( ! empty ( $obj -> code ) ? urlencode ( $obj -> code ) : '' );
if ( $param ) $url .= '&' . $param ;
$url .= '&' ;
2017-02-12 18:13:49 +01:00
2020-09-07 10:18:17 +02:00
// Status / Active
print '<td class="center nowrap">' ;
if ( $canbedisabled ) print '<a href="' . $url . 'action=' . $acts [ $obj -> active ] . '">' . $actl [ $obj -> active ] . '</a>' ;
else print '<span class="opacitymedium">' . $actl [ $obj -> active ] . '</span>' ;
print " </td> " ;
2017-02-12 18:13:49 +01:00
2020-09-07 10:18:17 +02:00
// Modify link / Delete link
print '<td class="center nowraponall" width="64">' ;
if ( $canbemodified ) print '<a class="reposition editfielda" href="' . $url . 'action=edit">' . img_edit () . '</a>' ;
if ( $iserasable )
{
print '<a class="marginleftonly" href="' . $url . 'action=delete">' . img_delete () . '</a>' ;
//else print '<a href="#">'.img_delete().'</a>'; // Some dictionary can be edited by other profile than admin
}
print '</td>' ;
2017-02-12 18:13:49 +01:00
2020-09-07 10:18:17 +02:00
/*
2017-02-12 18:13:49 +01:00
$fieldsforcontent = array ( 'content' );
if ( ! empty ( $conf -> global -> MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES ))
{
$fieldsforcontent = array ( 'content' , 'content_lines' );
}
2017-06-01 01:53:55 +02:00
foreach ( $fieldsforcontent as $tmpfieldlist )
2017-02-12 18:13:49 +01:00
{
$showfield = 1 ;
$align = " left " ;
$valuetoshow = $obj -> { $tmpfieldlist };
2017-06-01 01:53:55 +02:00
2017-02-12 18:13:49 +01:00
$class = 'tddict' ;
// Show value for field
if ( $showfield ) {
2017-06-01 01:53:55 +02:00
2017-04-25 11:59:18 +02:00
print '</tr><tr class="oddeven" nohover tr-' . $tmpfieldlist . '-' . $i . ' "><td colspan="5">' ; // To create an artificial CR for the current tr we are on
2017-02-12 18:13:49 +01:00
$okforextended = true ;
if ( empty ( $conf -> global -> FCKEDITOR_ENABLE_MAIL ))
$okforextended = false ;
$doleditor = new DolEditor ( $tmpfieldlist . '-' . $i , ( ! empty ( $obj -> { $tmpfieldlist }) ? $obj -> { $tmpfieldlist } : '' ), '' , 140 , 'dolibarr_mailings' , 'In' , 0 , false , $okforextended , ROWS_6 , '90%' , 1 );
print $doleditor -> Create ( 1 );
print '</td>' ;
print '<td></td><td></td><td></td>' ;
2017-06-01 01:53:55 +02:00
2017-02-12 18:13:49 +01:00
}
} */
2018-04-19 20:12:43 +02:00
2020-09-07 10:18:17 +02:00
print " </tr> \n " ;
}
2017-06-01 01:53:55 +02:00
2020-09-07 10:18:17 +02:00
$i ++ ;
}
}
2020-05-21 09:35:30 +02:00
} else {
2020-09-07 10:18:17 +02:00
dol_print_error ( $db );
2017-02-12 18:13:49 +01:00
}
print '</table>' ;
2017-09-08 10:09:22 +02:00
print '</div>' ;
2017-02-12 18:13:49 +01:00
print '</form>' ;
dol_fiche_end ();
2018-07-28 18:03:14 +02:00
// End of page
2017-02-12 18:13:49 +01:00
llxFooter ();
$db -> close ();
/**
* Show fields in insert / edit mode
*
* @ param array $fieldlist Array of fields
* @ param Object $obj If we show a particular record , obj is filled with record fields
* @ param string $tabname Name of SQL table
* @ param string $context 'add' = Output field for the " add form " , 'edit' = Output field for the " edit form " , 'hide' = Output field for the " add form " but we dont want it to be rendered
* @ return void
*/
2019-01-27 15:20:16 +01:00
function fieldList ( $fieldlist , $obj = '' , $tabname = '' , $context = '' )
2017-02-12 18:13:49 +01:00
{
2017-09-08 12:21:47 +02:00
global $conf , $langs , $user , $db ;
2017-02-12 18:13:49 +01:00
global $form ;
2020-04-25 19:13:20 +02:00
global $elementList , $sourceList ;
2017-02-12 18:13:49 +01:00
$formadmin = new FormAdmin ( $db );
foreach ( $fieldlist as $field => $value )
{
2017-09-08 12:21:47 +02:00
if ( $fieldlist [ $field ] == 'fk_user' )
2017-02-12 18:13:49 +01:00
{
print '<td>' ;
2017-09-08 12:21:47 +02:00
if ( $user -> admin )
{
print $form -> select_dolusers ( $obj -> { $fieldlist [ $field ]}, 'fk_user' , 1 , null , 0 , '' , null , 0 , 0 , 1 , '' , 0 , '' , 'maxwidth200' );
2020-05-21 09:35:30 +02:00
} else {
2017-09-08 12:21:47 +02:00
if ( $context == 'add' ) // I am not admin and we show the add form
{
2019-12-16 13:06:25 +01:00
print $user -> getNomUrl ( 1 ); // Me
$forcedvalue = $user -> id ;
2020-05-21 09:35:30 +02:00
} else {
2019-12-16 13:06:25 +01:00
if ( $obj && ! empty ( $obj -> { $fieldlist [ $field ]}) && $obj -> { $fieldlist [ $field ]} > 0 )
2017-09-08 12:21:47 +02:00
{
2019-12-16 13:06:25 +01:00
$fuser = new User ( $db );
2017-09-08 12:21:47 +02:00
$fuser -> fetch ( $obj -> { $fieldlist [ $field ]});
print $fuser -> getNomUrl ( 1 );
2019-12-16 13:06:25 +01:00
$forcedvalue = $fuser -> id ;
2020-05-21 09:35:30 +02:00
} else {
2019-12-16 13:06:25 +01:00
$forcedvalue = $obj -> { $fieldlist [ $field ]};
2017-09-08 12:21:47 +02:00
}
}
2019-12-16 13:06:25 +01:00
$keyname = $fieldlist [ $field ];
2017-09-08 12:21:47 +02:00
print '<input type="hidden" value="' . $forcedvalue . '" name="' . $keyname . '">' ;
}
print '</td>' ;
2020-05-21 09:35:30 +02:00
} elseif ( $fieldlist [ $field ] == 'lang' )
2017-02-12 18:13:49 +01:00
{
print '<td>' ;
2019-12-16 13:06:25 +01:00
if ( ! empty ( $conf -> global -> MAIN_MULTILANGS ))
2017-08-25 16:38:45 +02:00
{
2019-12-16 13:06:25 +01:00
$selectedlang = GETPOSTISSET ( 'langcode' ) ? GETPOST ( 'langcode' , 'aZ09' ) : $langs -> defaultlang ;
2017-08-25 17:13:33 +02:00
if ( $context == 'edit' ) $selectedlang = $obj -> { $fieldlist [ $field ]};
2018-03-23 16:09:46 +01:00
print $formadmin -> select_language ( $selectedlang , 'langcode' , 0 , null , 1 , 0 , 0 , 'maxwidth150' );
2020-05-21 09:35:30 +02:00
} else {
2019-12-16 13:06:25 +01:00
if ( ! empty ( $obj -> { $fieldlist [ $field ]}))
2017-08-25 17:13:33 +02:00
{
print $obj -> { $fieldlist [ $field ]} . ' - ' . $langs -> trans ( 'Language_' . $obj -> { $fieldlist [ $field ]});
}
2019-12-16 13:06:25 +01:00
$keyname = $fieldlist [ $field ];
if ( $keyname == 'lang' ) $keyname = 'langcode' ; // Avoid conflict with lang param
2017-08-25 17:13:33 +02:00
print '<input type="hidden" value="' . $obj -> { $fieldlist [ $field ]} . '" name="' . $keyname . '">' ;
2017-08-25 16:38:45 +02:00
}
2017-02-12 18:13:49 +01:00
print '</td>' ;
}
// Le type de template
elseif ( $fieldlist [ $field ] == 'type_template' )
{
print '<td>' ;
2019-12-16 13:06:25 +01:00
if ( $context == 'edit' && ! empty ( $obj -> { $fieldlist [ $field ]}) && ! in_array ( $obj -> { $fieldlist [ $field ]}, array_keys ( $elementList )))
2017-09-08 12:21:47 +02:00
{
// Current tempalte type is an unknown type, so we must keep it as it is.
print '<input type="hidden" name="type_template" value="' . $obj -> { $fieldlist [ $field ]} . '">' ;
print $obj -> { $fieldlist [ $field ]};
2020-05-21 09:35:30 +02:00
} else {
2019-12-16 13:06:25 +01:00
print $form -> selectarray ( 'type_template' , $elementList , ( ! empty ( $obj -> { $fieldlist [ $field ]}) ? $obj -> { $fieldlist [ $field ]} : '' ), 1 , 0 , 0 , '' , 0 , 0 , 0 , '' , 'maxwidth150 maxwidth100onsmartphone' );
2017-09-08 12:21:47 +02:00
}
2017-02-12 18:13:49 +01:00
print '</td>' ;
2020-05-21 09:35:30 +02:00
} elseif ( $context == 'add' && in_array ( $fieldlist [ $field ], array ( 'topic' , 'joinfiles' , 'content' , 'content_lines' ))) continue ;
2017-10-16 09:29:10 +02:00
elseif ( $context == 'edit' && in_array ( $fieldlist [ $field ], array ( 'topic' , 'joinfiles' , 'content' , 'content_lines' ))) continue ;
elseif ( $context == 'hide' && in_array ( $fieldlist [ $field ], array ( 'topic' , 'joinfiles' , 'content' , 'content_lines' ))) continue ;
2020-05-21 01:41:27 +02:00
else {
2019-12-16 13:06:25 +01:00
$size = '' ; $class = '' ; $classtd = '' ;
if ( $fieldlist [ $field ] == 'code' ) $class = 'maxwidth100' ;
if ( $fieldlist [ $field ] == 'label' ) $class = 'maxwidth100' ;
if ( $fieldlist [ $field ] == 'private' ) { $class = 'maxwidth50' ; $classtd = 'center' ; }
if ( $fieldlist [ $field ] == 'position' ) { $class = 'maxwidth50' ; $classtd = 'center' ; }
if ( $fieldlist [ $field ] == 'libelle' ) $class = 'quatrevingtpercent' ;
if ( $fieldlist [ $field ] == 'topic' ) $class = 'quatrevingtpercent' ;
if ( $fieldlist [ $field ] == 'sortorder' || $fieldlist [ $field ] == 'sens' || $fieldlist [ $field ] == 'category_type' ) $size = 'size="2" ' ;
print '<td' . ( $classtd ? ' class="' . $classtd . '"' : '' ) . '>' ;
if ( $fieldlist [ $field ] == 'private' )
2017-09-08 12:21:47 +02:00
{
2017-09-22 11:47:36 +02:00
if ( empty ( $user -> admin ))
{
2017-09-22 14:34:31 +02:00
print $form -> selectyesno ( $fieldlist [ $field ], '1' , 1 );
2020-05-21 09:35:30 +02:00
} else {
2017-09-22 11:47:36 +02:00
//print '<input type="text" '.$size.'class="flat'.($class?' '.$class:'').'" value="1" name="'.$fieldlist[$field].'">';
2019-12-16 13:06:25 +01:00
print $form -> selectyesno ( $fieldlist [ $field ], ( isset ( $obj -> { $fieldlist [ $field ]}) ? $obj -> { $fieldlist [ $field ]} : '' ), 1 );
2017-09-22 11:47:36 +02:00
}
2020-05-21 09:35:30 +02:00
} else {
2019-12-16 13:06:25 +01:00
print '<input type="text" ' . $size . 'class="flat' . ( $class ? ' ' . $class : '' ) . '" value="' . ( isset ( $obj -> { $fieldlist [ $field ]}) ? $obj -> { $fieldlist [ $field ]} : '' ) . '" name="' . $fieldlist [ $field ] . '">' ;
2017-09-08 12:21:47 +02:00
}
2017-02-12 18:13:49 +01:00
print '</td>' ;
}
}
}