40'@phan-var-force int $error';
41'@phan-var-force string $action';
42'@phan-var-force ?string $pagekey';
43'@phan-var-force string $elementtype';
44'@phan-var-force string $value';
49$pagekeyforredirect = isset($pagekey) ? $pagekey : $elementtype;
56$extrasize =
GETPOST(
'size',
'intcomma');
57$type =
GETPOST(
'type',
'alphanohtml');
58$param =
GETPOST(
'param',
'alphanohtml');
59$css =
GETPOST(
'css',
'alphanohtml');
60$cssview =
GETPOST(
'cssview',
'alphanohtml');
61$csslist =
GETPOST(
'csslist',
'alphanohtml');
62$confirm =
GETPOST(
'confirm',
'alpha');
64if ($type ==
'double' && strpos($extrasize,
',') ===
false) {
70if ($type ==
'datetime') {
73if ($type ==
'select') {
78$listofreservedwords = array(
79 'ADD',
'ALL',
'ALTER',
'ANALYZE',
'AND',
'AS',
'ASENSITIVE',
'BEFORE',
'BETWEEN',
'BINARY',
'BLOB',
'BOTH',
'CALL',
'CASCADE',
'CASE',
'CHANGE',
'CHAR',
'CHARACTER',
'CHECK',
'COLLATE',
'COLUMN',
'CONDITION',
'CONSTRAINT',
'CONTINUE',
'CONVERT',
'CREATE',
'CROSS',
'CURRENT_DATE',
'CURRENT_TIME',
'CURRENT_TIMESTAMP',
'CURRENT_USER',
80 'CURSOR',
'DATABASE',
'DATABASES',
'DAY_HOUR',
'DAY_MICROSECOND',
'DAY_MINUTE',
'DAY_SECOND',
'DECIMAL',
'DECLARE',
'DEFAULT',
'DELAYED',
'DELETE',
'DESC',
'DESCRIBE',
'DETERMINISTIC',
'DISTINCT',
'DISTINCTROW',
'DOUBLE',
'DROP',
'DUAL',
81 'EACH',
'ELSE',
'ELSEIF',
'ENCLOSED',
'ESCAPED',
'EXISTS',
'EXPLAIN',
'FALSE',
'FETCH',
'FLOAT',
'FLOAT4',
'FLOAT8',
'FORCE',
'FOREIGN',
'FULLTEXT',
'GRANT',
'GROUP',
'HAVING',
'HIGH_PRIORITY',
'HOUR_MICROSECOND',
'HOUR_MINUTE',
'HOUR_SECOND',
82 'IGNORE',
'IGNORE_SERVER_IDS',
'INDEX',
'INFILE',
'INNER',
'INOUT',
'INSENSITIVE',
'INSERT',
'INT',
'INTEGER',
'INTERVAL',
'INTO',
'ITERATE',
83 'KEYS',
'KEYWORD',
'LEAD',
'LEADING',
'LEAVE',
'LEFT',
'LIKE',
'LIMIT',
'LINES',
'LOCALTIME',
'LOCALTIMESTAMP',
'LONGBLOB',
'LONGTEXT',
'MASTER_SSL_VERIFY_SERVER_CERT',
'MATCH',
'MEDIUMBLOB',
'MEDIUMINT',
'MEDIUMTEXT',
'MIDDLEINT',
'MINUTE_MICROSECOND',
'MINUTE_SECOND',
'MODIFIES',
'NATURAL',
'NOT',
'NO_WRITE_TO_BINLOG',
'NUMERIC',
84 'OFFSET',
'ON',
'OPTION',
'OPTIONALLY',
'OUTER',
'OUTFILE',
'OVER',
85 'PARTITION',
'POSITION',
'PRECISION',
'PRIMARY',
'PROCEDURE',
'PURGE',
'RANGE',
'READS',
'READ_WRITE',
'REAL',
'REFERENCES',
'REGEXP',
'RELEASE',
'RENAME',
'REPEAT',
'REQUIRE',
'RESTRICT',
'RETURN',
'REVOKE',
'RIGHT',
'RLIKE',
86 'SCHEMAS',
'SECOND_MICROSECOND',
'SENSITIVE',
'SEPARATOR',
'SIGNAL',
'SMALLINT',
'SPATIAL',
'SPECIFIC',
'SQLEXCEPTION',
'SQLSTATE',
'SQLWARNING',
'SQL_BIG_RESULT',
'SQL_CALC_FOUND_ROWS',
'SQL_SMALL_RESULT',
'SSL',
'STARTING',
'STRAIGHT_JOIN',
87 'TABLE',
'TERMINATED',
'TINYBLOB',
'TINYINT',
'TINYTEXT',
'TRAILING',
'TRIGGER',
'UNDO',
'UNIQUE',
'UNSIGNED',
'UPDATE',
'USAGE',
'USING',
'UTC_DATE',
'UTC_TIME',
'UTC_TIMESTAMP',
'VALUES',
'VARBINARY',
'VARCHAR',
'VARYING',
88 'WHEN',
'WHERE',
'WHILE',
'WRITE',
'XOR',
'YEAR_MONTH',
'ZEROFILL'
92if ($action ==
'add') {
93 if (
GETPOST(
"button") != $langs->trans(
"Cancel")) {
97 $langs->load(
"errors");
98 $mesgs[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type"));
101 if ($type ==
'varchar' && $extrasize <= 0) {
103 $langs->load(
"errors");
104 $mesgs[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Size"));
107 if ($type ==
'varchar' && $extrasize > $maxsizestring) {
109 $langs->load(
"errors");
110 $mesgs[] = $langs->trans(
"ErrorSizeTooLongForVarcharType", $maxsizestring);
113 if ($type ==
'int' && $extrasize > $maxsizeint) {
115 $langs->load(
"errors");
116 $mesgs[] = $langs->trans(
"ErrorSizeTooLongForIntType", $maxsizeint);
119 if ($type ==
'stars' && ($extrasize < 1 || $extrasize > 10)) {
121 $langs->load(
"errors");
122 $mesgs[] = $langs->trans(
"ErrorSizeForStarsType");
125 if ($type ==
'select' && !$param) {
127 $langs->load(
"errors");
128 $mesgs[] = $langs->trans(
"ErrorNoValueForSelectType");
131 if ($type ==
'sellist' && !$param) {
133 $langs->load(
"errors");
134 $mesgs[] = $langs->trans(
"ErrorNoValueForSelectListType");
137 if ($type ==
'checkbox' && !$param) {
139 $langs->load(
"errors");
140 $mesgs[] = $langs->trans(
"ErrorNoValueForCheckBoxType");
143 if ($type ==
'link' && !$param) {
145 $langs->load(
"errors");
146 $mesgs[] = $langs->trans(
"ErrorNoValueForLinkType");
149 if ($type ==
'link' && $param) {
152 $tmplink = explode(
':', $param);
153 if (empty($tmplink[1]) || !file_exists(
dol_buildpath($tmplink[1]))) {
155 $langs->load(
"errors");
156 $mesgs[] = $langs->trans(
"ErrorFileNotFound", empty($tmplink[1]) ? $param : $tmplink[1]);
160 if ($type ==
'radio' && !$param) {
162 $langs->load(
"errors");
163 $mesgs[] = $langs->trans(
"ErrorNoValueForRadioType");
166 if ((($type ==
'radio') || ($type ==
'checkbox')) && $param) {
168 $parameters = $param;
169 $parameters_array = explode(
"\r\n", $parameters);
170 foreach ($parameters_array as $param_ligne) {
171 if (!empty($param_ligne)) {
173 if (preg_match_all(
'/,/', $param_ligne, $matches)) {
174 if (count($matches[0]) > 1) {
176 $langs->load(
"errors");
177 $mesgs[] = $langs->trans(
"ErrorBadFormatValueList", $param_ligne);
182 $langs->load(
"errors");
183 $mesgs[] = $langs->trans(
"ErrorBadFormatValueList", $param_ligne);
191 if (strlen(
GETPOST(
'attrname',
'aZ09')) < 3) {
193 $langs->load(
"errors");
194 $mesgs[] = $langs->trans(
"ErrorValueLength", $langs->transnoentitiesnoconv(
"AttributeCode"), 3);
201 if (in_array(strtoupper(
GETPOST(
'attrname',
'aZ09')), $listofreservedwords)) {
203 $langs->load(
"errors");
204 $mesgs[] = $langs->trans(
"ErrorReservedKeyword",
GETPOST(
'attrname',
'aZ09'));
211 if (
GETPOSTISSET(
"attrname") && preg_match(
"/^[a-z0-9_]+$/",
GETPOST(
'attrname',
'aZ09')) && !is_numeric(
GETPOST(
'attrname',
'aZ09'))) {
213 $default_value =
GETPOST(
'default_value',
'alpha');
214 $parameters = $param;
215 $parameters_array = explode(
"\r\n", $parameters);
218 if ($type ==
'sellist' || $type ==
'chkbxlst') {
219 foreach ($parameters_array as $param_ligne) {
220 $params[
'options'] = array($parameters =>
null);
224 foreach ($parameters_array as $param_ligne) {
225 if (strpos($param_ligne,
',') !==
false) {
226 list($key, $value) = explode(
',', $param_ligne);
227 if (!array_key_exists(
'options', $params)) {
228 $params[
'options'] = array();
234 $params[
'options'][$key] = $value;
239 $visibility =
GETPOST(
'list',
'alpha');
240 if (in_array($type, [
'separate',
'point',
'linestrg',
'polygon'])) {
244 $result = $extrafields->addExtraField(
251 (
GETPOST(
'unique',
'alpha') ? 1 : 0),
252 (
GETPOST(
'required',
'alpha') ? 1 : 0),
255 (
GETPOST(
'alwayseditable',
'alpha') ? 1 : 0),
259 GETPOST(
'computed_value',
'alpha'),
260 (
GETPOST(
'entitycurrentorall',
'alpha') ? 0 :
''),
263 (
GETPOST(
'totalizable',
'alpha') ? 1 : 0),
265 array(
'css' => $css,
'cssview' => $cssview,
'csslist' => $csslist),
267 (
GETPOST(
'emptyonclone',
'alpha') ? 1 : 0),
268 (
GETPOST(
'showintooltip',
'int') ? 1 : 0),
272 setEventMessages($langs->trans(
'SetupSaved'),
null,
'mesgs');
273 header(
"Location: ".$_SERVER[
"PHP_SELF"].(empty($pagekeyforredirect) ?
'' :
'?elementtype='.urlencode($pagekeyforredirect)));
277 $mesg = $extrafields->error;
278 $mesgs = array_merge($mesgs, $extrafields->errors);
279 setEventMessages($mesg, $mesgs,
'errors');
283 $langs->load(
"errors");
284 $mesg = $langs->trans(
"ErrorFieldCanNotContainSpecialNorUpperCharacters", $langs->transnoentities(
"AttributeCode"));
285 setEventMessages($mesg, $mesgs,
'errors');
289 setEventMessages($mesg, $mesgs,
'errors');
295if ($action ==
'update') {
296 if (
GETPOST(
"button") != $langs->trans(
"Cancel")) {
300 $langs->load(
"errors");
301 $mesgs[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type"));
304 if ($type ==
'varchar' && $extrasize <= 0) {
306 $langs->load(
"errors");
307 $mesgs[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Size"));
310 if ($type ==
'varchar' && $extrasize > $maxsizestring) {
312 $langs->load(
"errors");
313 $mesgs[] = $langs->trans(
"ErrorSizeTooLongForVarcharType", $maxsizestring);
316 if ($type ==
'int' && $extrasize > $maxsizeint) {
318 $langs->load(
"errors");
319 $mesgs[] = $langs->trans(
"ErrorSizeTooLongForIntType", $maxsizeint);
322 if ($type ==
'select' && !$param) {
324 $langs->load(
"errors");
325 $mesgs[] = $langs->trans(
"ErrorNoValueForSelectType");
328 if ($type ==
'sellist' && !$param) {
330 $langs->load(
"errors");
331 $mesgs[] = $langs->trans(
"ErrorNoValueForSelectListType");
334 if ($type ==
'stars' && ($extrasize < 1 || $extrasize > 10)) {
336 $langs->load(
"errors");
337 $mesgs[] = $langs->trans(
"ErrorSizeForStarsType");
340 if ($type ==
'checkbox' && !$param) {
342 $langs->load(
"errors");
343 $mesgs[] = $langs->trans(
"ErrorNoValueForCheckBoxType");
346 if ($type ==
'radio' && !$param) {
348 $langs->load(
"errors");
349 $mesgs[] = $langs->trans(
"ErrorNoValueForRadioType");
352 if ($type ==
'link' && $param) {
355 $tmplink = explode(
':', $param);
356 if (empty($tmplink[1]) || !file_exists(
dol_buildpath($tmplink[1]))) {
358 $langs->load(
"errors");
359 $mesgs[] = $langs->trans(
"ErrorFileNotFound", empty($tmplink[1]) ? $param : $tmplink[1]);
363 if ((($type ==
'radio') || ($type ==
'checkbox')) && $param) {
365 $parameters = $param;
366 $parameters_array = explode(
"\r\n", $parameters);
367 foreach ($parameters_array as $param_ligne) {
368 if (!empty($param_ligne)) {
369 if (preg_match_all(
'/,/', $param_ligne, $matches)) {
370 if (count($matches[0]) > 1) {
372 $langs->load(
"errors");
373 $mesgs[] = $langs->trans(
"ErrorBadFormatValueList", $param_ligne);
378 $langs->load(
"errors");
379 $mesgs[] = $langs->trans(
"ErrorBadFormatValueList", $param_ligne);
389 $langs->load(
"errors");
390 $mesgs[] = $langs->trans(
"ErrorValueLength", $langs->transnoentitiesnoconv(
"AttributeCode"), 3);
397 if (in_array(strtoupper(
GETPOST(
'attrname',
'aZ09')), $listofreservedwords) && !
getDolGlobalString(
'MAIN_DISABLE_EXTRAFIELDS_CHECK_FOR_UPDATE')) {
399 $langs->load(
"errors");
400 $mesgs[] = $langs->trans(
"ErrorReservedKeyword",
GETPOST(
'attrname',
'aZ09'));
406 if (
GETPOSTISSET(
"attrname") && preg_match(
"/^\w[a-zA-Z0-9-_]*$/",
GETPOST(
'attrname',
'aZ09')) && !is_numeric(
GETPOST(
'attrname',
'aZ09'))) {
409 $parameters = $param;
410 $parameters_array = explode(
"\r\n", $parameters);
413 if ($type ==
'sellist' || $type ==
'chkbxlst') {
414 foreach ($parameters_array as $param_ligne) {
415 $params[
'options'] = array($parameters =>
null);
419 foreach ($parameters_array as $param_ligne) {
420 $tmp = explode(
',', $param_ligne);
422 if (!empty($tmp[1])) {
425 if (!array_key_exists(
'options', $params)) {
426 $params[
'options'] = array();
428 $params[
'options'][$key] = $value;
435 $visibility =
GETPOST(
'list',
'alpha');
436 if (in_array($type, [
'separate',
'point',
'linestrg',
'polygon'])) {
441 $computedvalue =
GETPOST(
'computed_value',
'nohtml');
443 $result = $extrafields->update(
449 (
GETPOST(
'unique',
'alpha') ? 1 : 0),
450 (
GETPOST(
'required',
'alpha') ? 1 : 0),
453 (
GETPOST(
'alwayseditable',
'alpha') ? 1 : 0),
457 GETPOST(
'default_value',
'alpha'),
459 (
GETPOST(
'entitycurrentorall',
'alpha') ? 0 :
''),
462 (
GETPOST(
'totalizable',
'alpha') ? 1 : 0),
464 array(
'css' => $css,
'cssview' => $cssview,
'csslist' => $csslist),
466 (
GETPOST(
'emptyonclone',
'alpha') ? 1 : 0),
467 (
GETPOST(
'showintooltip',
'int') ? 1 : 0),
471 setEventMessages($langs->trans(
'SetupSaved'),
null,
'mesgs');
472 header(
"Location: ".$_SERVER[
"PHP_SELF"].(empty($pagekeyforredirect) ?
'' :
'?elementtype='.urlencode($pagekeyforredirect)));
476 $mesg = $extrafields->error;
477 $mesgs = array_merge($mesgs, $extrafields->errors);
478 setEventMessages($mesg, $mesgs,
'errors');
482 $langs->load(
"errors");
483 $mesg = $langs->trans(
"ErrorFieldCanNotContainSpecialCharacters", $langs->transnoentities(
"AttributeCode"));
484 setEventMessages($mesg,
null,
'errors');
487 setEventMessages($mesg, $mesgs,
'errors');
493if ($action ==
'confirm_delete' && $confirm ==
"yes") {
494 if (
GETPOSTISSET(
"attrname") && preg_match(
"/^\w[a-zA-Z0-9-_]*$/",
GETPOST(
"attrname",
'aZ09'))) {
495 $attributekey =
GETPOST(
'attrname',
'aZ09');
497 $result = $extrafields->delete($attributekey, $elementtype);
499 setEventMessages($langs->trans(
"ExtrafieldsDeleted", $attributekey),
null,
'mesgs');
501 header(
"Location: ".$_SERVER[
"PHP_SELF"].(empty($pagekeyforredirect) ?
'' :
'?elementtype='.urlencode($pagekeyforredirect)));
504 $mesg = $extrafields->error;
505 $mesgs = array_merge($mesgs, $extrafields->errors);
509 $langs->load(
"errors");
510 $mesg = $langs->trans(
"ErrorFieldCanNotContainSpecialCharacters", $langs->transnoentities(
"AttributeCode"));
515if ($action ==
'encrypt') {
517 $extrafields->fetch_name_optionals_label($elementtype);
518 $attributekey =
GETPOST(
'attrname',
'aZ09');
520 if (!empty($extrafields->attributes[$elementtype][
'type'][$attributekey]) && $extrafields->attributes[$elementtype][
'type'][$attributekey] ==
'password') {
521 if (!empty($extrafields->attributes[$elementtype][
'param'][$attributekey][
'options'])) {
522 if (array_key_exists(
'dolcrypt', $extrafields->attributes[$elementtype][
'param'][$attributekey][
'options'])) {
525 if (!empty($arrayofelement[
'table_element'])) {
526 if ($extrafields->attributes[$elementtype][
'entityid'][$attributekey] ==
$conf->entity || empty($extrafields->attributes[$elementtype][
'entityid'][$attributekey])) {
527 dol_syslog(
"Loop on each extafields of table ".$arrayofelement[
'table_element']);
529 $sql =
"SELECT te.rowid, te.".$db->sanitize($attributekey);
530 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($arrayofelement[
'table_element']).
" as t, ".MAIN_DB_PREFIX.$db->sanitize($arrayofelement[
'table_element']).
'_extrafields as te';
531 $sql .=
" WHERE te.fk_object = t.rowid";
532 $sql .=
" AND te.".$db->sanitize($attributekey).
" NOT LIKE 'dolcrypt:%'";
533 $sql .=
" AND te.".$db->sanitize($attributekey).
" IS NOT NULL";
534 $sql .=
" AND te.".$db->sanitize($attributekey).
" <> ''";
535 if ($extrafields->attributes[$elementtype][
'entityid'][$attributekey] ==
$conf->entity) {
536 $sql .=
" AND t.entity = ".getEntity($arrayofelement[
'element'], 0);
541 $resql = $db->query($sql);
543 $num_rows = $db->num_rows($resql);
545 while ($i < $num_rows) {
546 $objtmp = $db->fetch_object($resql);
547 $id = $objtmp->rowid;
548 $pass = $objtmp->$attributekey;
552 $sqlupdate =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($arrayofelement[
'table_element']).
'_extrafields';
553 $sqlupdate .=
" SET ".$db->sanitize($attributekey).
" = '".$db->escape($newpassword).
"'";
554 $sqlupdate .=
" WHERE rowid = ".((int)
$id);
556 $resupdate = $db->query($sqlupdate);
560 setEventMessages($db->lasterror(),
null,
'errors');
570 if ($nbupdatedone > 0) {
571 setEventMessages($langs->trans(
"PasswordFieldEncrypted", $nbupdatedone),
null,
'mesgs');
573 setEventMessages($langs->trans(
"PasswordFieldEncrypted", $nbupdatedone),
null,
'warnings');
$id
Support class for third parties, contacts, members, users or resources.
getElementProperties($elementType)
Get an array with properties of an element.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dolEncrypt($chain, $key='', $ciphering='', $forceseed='', $obfuscationmode='dolcrypt')
Encode a string with a symmetric encryption.