1<?php 2/* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net> 3 * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com> 4 * Copyright (C) 2012-2013 Juanjo Menent <jmenent@2byte.es> 5 * Copyright (C) 2019 Christophe Battarel <christophe@altairis.fr> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program. If not, see <https://www.gnu.org/licenses/>. 19 */ 20 21/** 22 * \file htdocs/admin/fckeditor.php 23 * \ingroup fckeditor 24 * \brief Page d'activation du module FCKeditor dans les autres modules 25 */ 26 27require '../main.inc.php'; 28require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; 29require_once DOL_DOCUMENT_ROOT.'/core/lib/doleditor.lib.php'; 30require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; 31 32// Load translation files required by the page 33$langs->loadLangs(array('admin', 'fckeditor')); 34 35$action = GETPOST('action', 'aZ09'); 36// Possible modes are: 37// dolibarr_details 38// dolibarr_notes 39// dolibarr_readonly 40// dolibarr_mailings 41// Full (not sure this one is used) 42$mode = GETPOST('mode') ?GETPOST('mode', 'alpha') : 'dolibarr_notes'; 43 44if (!$user->admin) accessforbidden(); 45 46// Constante et traduction de la description du module 47$modules = array( 48'SOCIETE' => 'FCKeditorForCompany', 49'PRODUCTDESC' => 'FCKeditorForProduct', 50'DETAILS' => 'FCKeditorForProductDetails', 51'USERSIGN' => 'FCKeditorForUserSignature', 52'MAILING' => 'FCKeditorForMailing', 53'MAIL' => 'FCKeditorForMail', 54'TICKET' => 'FCKeditorForTicket' 55); 56// Conditions pour que l'option soit proposee 57$conditions = array( 58'SOCIETE' => 1, 59'PRODUCTDESC' => (!empty($conf->product->enabled) || !empty($conf->service->enabled)), 60'DETAILS' => (!empty($conf->facture->enabled) || !empty($conf->propal->enabled) || !empty($conf->commande->enabled) || !empty($conf->supplier_proposal->enabled) || !empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) || !empty($conf->supplier_order->enabled) || !empty($conf->supplier_invoice->enabled)), 61'USERSIGN' => 1, 62'MAILING' => !empty($conf->mailing->enabled), 63'MAIL' => (!empty($conf->facture->enabled) || !empty($conf->propal->enabled) || !empty($conf->commande->enabled)), 64'TICKET' => !empty($conf->ticket->enabled) 65); 66// Picto 67$picto = array( 68'SOCIETE' => 'generic', 69'PRODUCTDESC' => 'product', 70'DETAILS' => 'product', 71'USERSIGN' => 'user', 72'MAILING' => 'email', 73'MAIL' => 'email', 74'TICKET' => 'ticket' 75); 76 77 78 79/* 80 * Actions 81 */ 82 83foreach ($modules as $const => $desc) 84{ 85 if ($action == 'activate_'.strtolower($const)) 86 { 87 dolibarr_set_const($db, "FCKEDITOR_ENABLE_".$const, "1", 'chaine', 0, '', $conf->entity); 88 // Si fckeditor est active dans la description produit/service, on l'active dans les formulaires 89 if ($const == 'PRODUCTDESC' && !empty($conf->global->PRODUIT_DESC_IN_FORM)) 90 { 91 dolibarr_set_const($db, "FCKEDITOR_ENABLE_DETAILS", "1", 'chaine', 0, '', $conf->entity); 92 } 93 header("Location: ".$_SERVER["PHP_SELF"]); 94 exit; 95 } 96 if ($action == 'disable_'.strtolower($const)) 97 { 98 dolibarr_del_const($db, "FCKEDITOR_ENABLE_".$const, $conf->entity); 99 header("Location: ".$_SERVER["PHP_SELF"]); 100 exit; 101 } 102} 103 104if (GETPOST('save', 'alpha')) 105{ 106 $error = 0; 107 108 $fckeditor_skin = GETPOST('fckeditor_skin', 'alpha'); 109 if (!empty($fckeditor_skin)) { 110 if (!dolibarr_set_const($db, 'FCKEDITOR_SKIN', $fckeditor_skin, 'chaine', 0, '', $conf->entity)) { 111 $error++; 112 } 113 } else { 114 $error++; 115 } 116 117 $fckeditor_test = GETPOST('formtestfield', 'restricthtml'); 118 if (!empty($fckeditor_test)) { 119 if (!dolibarr_set_const($db, 'FCKEDITOR_TEST', $fckeditor_test, 'chaine', 0, '', $conf->entity)) { 120 $error++; 121 } 122 } else { 123 $error++; 124 } 125 126 if (!$error) 127 { 128 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); 129 } else { 130 setEventMessages($langs->trans("Error"), null, 'errors'); 131 } 132} 133 134/* 135 * View 136 */ 137 138llxHeader(); 139 140$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>'; 141print load_fiche_titre($langs->trans("AdvancedEditor"), $linkback, 'title_setup'); 142print '<br>'; 143 144if (empty($conf->use_javascript_ajax)) 145{ 146 setEventMessages(array($langs->trans("NotAvailable"), $langs->trans("JavascriptDisabled")), null, 'errors'); 147} else { 148 print '<table class="noborder centpercent">'; 149 print '<tr class="liste_titre">'; 150 print '<td colspan="2">'.$langs->trans("ActivateFCKeditor").'</td>'; 151 print '<td class="center" width="100">'.$langs->trans("Action").'</td>'; 152 print "</tr>\n"; 153 154 // Modules 155 foreach ($modules as $const => $desc) 156 { 157 // Si condition non remplie, on ne propose pas l'option 158 if (!$conditions[$const]) continue; 159 160 print '<tr class="oddeven">'; 161 print '<td width="16">'.img_object("", $picto[$const]).'</td>'; 162 print '<td>'.$langs->trans($desc).'</td>'; 163 print '<td class="center" width="100">'; 164 $constante = 'FCKEDITOR_ENABLE_'.$const; 165 $value = (isset($conf->global->$constante) ? $conf->global->$constante : 0); 166 if ($value == 0) 167 { 168 print '<a href="'.$_SERVER['PHP_SELF'].'?action=activate_'.strtolower($const).'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>'; 169 } elseif ($value == 1) 170 { 171 print '<a href="'.$_SERVER['PHP_SELF'].'?action=disable_'.strtolower($const).'">'.img_picto($langs->trans("Enabled"), 'switch_on').'</a>'; 172 } 173 174 print "</td>"; 175 print '</tr>'; 176 } 177 178 print '</table>'."\n"; 179 180 print '<br>'."\n"; 181 182 print '<form name="formtest" method="POST" action="'.$_SERVER["PHP_SELF"].'">'."\n"; 183 print '<input type="hidden" name="token" value="'.newToken().'">'; 184 185 // Skins 186 show_skin(null, 1); 187 print '<br>'."\n"; 188 189 $listofmodes = array('dolibarr_mailings', 'dolibarr_notes', 'dolibarr_details', 'dolibarr_readonly', 'Full', 'Full_inline'); 190 $linkstomode = ''; 191 foreach ($listofmodes as $newmode) 192 { 193 if ($linkstomode) $linkstomode .= ' - '; 194 $linkstomode .= '<a href="'.$_SERVER["PHP_SELF"].'?mode='.$newmode.'">'; 195 if ($mode == $newmode) $linkstomode .= '<strong>'; 196 $linkstomode .= $newmode; 197 if ($mode == $newmode) $linkstomode .= '</strong>'; 198 $linkstomode .= '</a>'; 199 } 200 $linkstomode .= ''; 201 print load_fiche_titre($langs->trans("TestSubmitForm"), $linkstomode, ''); 202 print '<input type="hidden" name="mode" value="'.dol_escape_htmltag($mode).'">'; 203 if ($mode != 'Full_inline') 204 { 205 $uselocalbrowser = true; 206 $readonly = ($mode == 'dolibarr_readonly' ? 1 : 0); 207 $editor = new DolEditor('formtestfield', isset($conf->global->FCKEDITOR_TEST) ? $conf->global->FCKEDITOR_TEST : 'Test', '', 200, $mode, 'In', true, $uselocalbrowser, 1, 120, 8, $readonly); 208 $editor->Create(); 209 } else { 210 print '<div style="border: 1px solid #888;" contenteditable="true">'; 211 print $conf->global->FCKEDITOR_TEST; 212 print '</div>'; 213 } 214 print '<br><div class="center"><input class="button button-save" type="submit" name="save" value="'.$langs->trans("Save").'"></div>'."\n"; 215 print '<div id="divforlog"></div>'; 216 print '</form>'."\n"; 217 218 // Add env of ckeditor 219 // This is to show how CKEditor detect browser to understand why editor is disabled or not. To help debug. 220 /* 221 print '<br><script language="javascript"> 222 function jsdump(obj, id) { 223 var out = \'\'; 224 for (var i in obj) { 225 out += i + ": " + obj[i] + "<br>\n"; 226 } 227 228 jQuery("#"+id).html(out); 229 } 230 231 jsdump(CKEDITOR.env, "divforlog"); 232 </script>'; 233 } 234 */ 235} 236 237// End of page 238llxFooter(); 239$db->close(); 240