glpi-project / glpi

GLPI is a Free Asset and IT Management Software package, Data center management, ITIL Service Desk, licenses tracking and software auditing.
https://glpi-project.org
GNU General Public License v3.0
4.13k stars 1.28k forks source link

##FOREACHitems## cannot be set in HTML betwen UL/OL and LI tags, after saving it's deleted #15972

Closed jcervantes-sipecom closed 9 months ago

jcervantes-sipecom commented 10 months ago

Code of Conduct

Is there an existing issue for this?

Version

10.0.10

Bug description

When I try to add ##FOREACHitems## between <ul> or <ol> and <li> html tags in HTML source code editor, the ##FOREACHitems## and ##ENDFOREACHitems## glpi tags dissapear after I save the template:

image

image

After saving the template: image

image

It's necessary that ##FOREACHitems## should be between these 2 HTML tags because of presentation when adding multiples items in a ticket, for example:

image

This happened the first time after saving the template, and not editting the template anymore: image

image

But if for some reason, the template is editting, it's stoped working correctly because the clause: ##IFticket.itemtype## and the tag ##FOREACHitems## dissappear:

image

image

image

Relevant log output

Nothing

Page URL

/front/notificationtemplatetranslation.form.php

Steps To reproduce

  1. Create a Notification Template for Tickets.
  2. In HTML Source code editor put this:
<ol>
##FOREACHitems##
<li>##IFticket.itemtype## ##ticket.itemtype##: ##ticket.item.name## ##ENDIFticket.itemtype## ##ELSEticket.itemtype##No items associated.##ENDELSEticket.itemtype##</li>
##ENDFOREACHitems##
</ol>
  1. Save it, check that ##FOREACHitems## and ##ENDFOREACHitems## dissapear
  2. Associate this template with a notification action, like NEW TICKET.
  3. Create a NEW TICKET and associate some items.
  4. Check notification queue and look that items list correctly.
  5. Edit the Notification Template and save it.
  6. Create a NEW TICKET and associate some items.
  7. Check notification queue and look that items aren't listed, this said: "No items associated."

Your GLPI setup information

Information about system installation and configuration
GLPI 10.0.10 ( => /glpi)
Installation mode: TARBALL
Current language:en_GB

Server
 
Operating system: Linux  6.2.0-1016-azure #​16~22.04.1-Ubuntu SMP Tue Oct 10 17:11:51 UTC 2023 x86_64
PHP 8.1.25 apache2handler (Core, FFI, PDO, Phar, Reflection, SPL, SimpleXML, Zend OPcache, apache2handler, apcu, bz2, calendar,
    ctype, curl, date, dom, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, intl, json, ldap, libxml, mbstring, mysqli,
    mysqlnd, openssl, pcre, pdo_mysql, posix, readline, session, shmop, snmp, sockets, sodium, standard, sysvmsg, sysvsem, sysvshm,
    tokenizer, xml, xmlreader, xmlwriter, xsl, zip, zlib)
Setup: max_execution_time="600" memory_limit="512M" post_max_size="4M" safe_mode="" session.save_handler="files"
    upload_max_filesize="1M" 
Software: Apache/2.4.52 (Ubuntu) OpenSSL/3.0.2 ()
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46
Server Software: mariadb.org binary distribution
    Server Version: 11.1.2-MariaDB-1:11.1.2+maria~ubu2204-log
    Server SQL Mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Parameters: dbuser@localhost/db
    Host info: Localhost via UNIX socket

PHP version (8.1.25) is supported.
Sessions configuration is OK.
Allocated memory is sufficient.
mysqli extension is installed.
Following extensions are installed: dom, fileinfo, filter, libxml, json, simplexml, xmlreader, xmlwriter.
curl extension is installed.
gd extension is installed.
intl extension is installed.
zlib extension is installed.
The constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present.
Database engine version (11.1.2) is supported.
No files from previous GLPI version detected.
The log file has been created successfully.
Write access to /files/_cache has been validated.
Write access to /glpi/config/ has been validated.
Write access to /files/_cron has been validated.
Write access to /files has been validated.
Write access to /files/_dumps has been validated.
Write access to /files/_graphs has been validated.
Write access to /files/_lock has been validated.
Write access to /files/_pictures has been validated.
Write access to /files/_plugins has been validated.
Write access to /files/_rss has been validated.
Write access to /files/_sessions has been validated.
Write access to /files/_tmp has been validated.
Write access to /files/_uploads has been validated.

Web server root directory configuration seems safe.
Sessions configuration is secured.
OS and PHP are relying on 64 bits integers.
exif extension is installed.
ldap extension is installed.
openssl extension is installed.
Following extensions are installed: bz2, Phar, zip.
Zend OPcache extension is installed.
Following extensions are installed: ctype, iconv, mbstring, sodium.
Write access to /glpi/marketplace has been validated.
Timezones seems loaded in database.

GLPI constants
 
GLPI_ROOT: "/glpi"
GLPI_CONFIG_DIR: "/glpi/config/"
GLPI_VAR_DIR: "/files"
GLPI_LOG_DIR: "/_log"
GLPI_MARKETPLACE_DIR: "/glpi/marketplace"
GLPI_USE_CSRF_CHECK: "1"
GLPI_CSRF_EXPIRES: "7200"
GLPI_CSRF_MAX_TOKENS: "100"
GLPI_USE_IDOR_CHECK: "1"
GLPI_IDOR_EXPIRES: "7200"
GLPI_ALLOW_IFRAME_IN_RICH_TEXT: false
GLPI_SERVERSIDE_URL_ALLOWLIST: ["/^(https?|feed):\\/\\/[^@:]+(\\/.*)?$/"]
GLPI_TELEMETRY_URI: "https://telemetry.glpi-project.org"
GLPI_INSTALL_MODE: "TARBALL"
GLPI_NETWORK_MAIL: "glpi@teclib.com"
GLPI_NETWORK_SERVICES: "https://services.glpi-network.com"
GLPI_MARKETPLACE_ALLOW_OVERRIDE: true
GLPI_MARKETPLACE_MANUAL_DOWNLOADS: true
dbuser_AGENT_EXTRA_COMMENTS: ""
GLPI_DISABLE_ONLY_FULL_GROUP_BY_SQL_MODE: "1"
GLPI_AJAX_DASHBOARD: "1"
GLPI_CALDAV_IMPORT_STATE: 0
GLPI_DEMO_MODE: "0"
GLPI_CENTRAL_WARNINGS: "1"
GLPI_DOC_DIR: "/files"
GLPI_CACHE_DIR: "/files/_cache"
GLPI_CRON_DIR: "/files/_cron"
GLPI_DUMP_DIR: "/files/_dumps"
GLPI_GRAPH_DIR: "/files/_graphs"
GLPI_LOCAL_I18N_DIR: "/files/_locales"
GLPI_LOCK_DIR: "/files/_lock"
GLPI_PICTURE_DIR: "/files/_pictures"
GLPI_PLUGIN_DOC_DIR: "/files/_plugins"
GLPI_RSS_DIR: "/files/_rss"
GLPI_SESSION_DIR: "/files/_sessions"
GLPI_TMP_DIR: "/files/_tmp"
GLPI_UPLOAD_DIR: "/files/_uploads"
GLPI_INVENTORY_DIR: "/files/_inventories"
GLPI_NETWORK_REGISTRATION_API_URL: "https://services.glpi-network.com/api/registration/"
GLPI_MARKETPLACE_PLUGINS_API_URI: "https://services.glpi-network.com/api/marketplace/"
GLPI_I18N_DIR: "/glpi/locales"
GLPI_VERSION: "10.0.10"
GLPI_SCHEMA_VERSION: "10.0.10@05de68add675fb55abaeec10f3a2552085594a16"
GLPI_MARKETPLACE_PRERELEASES: false
GLPI_MIN_PHP: "7.4.0"
GLPI_MAX_PHP: "8.4.0"
GLPI_YEAR: "2023"

Libraries
 
htmlawed/htmlawed version 1.2.14 in (/glpi/vendor/htmlawed/htmlawed)
phpmailer/phpmailer version 6.8.0 in (/glpi/vendor/phpmailer/phpmailer/src)
simplepie/simplepie version 1.5.8 in (/glpi/vendor/simplepie/simplepie/library)
tecnickcom/tcpdf version 6.6.2 in (/glpi/vendor/tecnickcom/tcpdf)
michelf/php-markdown in (/glpi/vendor/michelf/php-markdown/Michelf)
true/punycode in (/glpi/vendor/true/punycode/src)
iamcal/lib_autolink in (/glpi/vendor/iamcal/lib_autolink)
sabre/dav in (/glpi/vendor/sabre/dav/lib/DAV)
sabre/http in (/glpi/vendor/sabre/http/lib)
sabre/uri in (/glpi/vendor/sabre/uri/lib)
sabre/vobject in (/glpi/vendor/sabre/vobject/lib)
laminas/laminas-i18n in (/glpi/vendor/laminas/laminas-i18n/src)
laminas/laminas-servicemanager in (/glpi/vendor/laminas/laminas-servicemanager/src)
monolog/monolog in (/glpi/vendor/monolog/monolog/src/Monolog)
sebastian/diff in (/glpi/vendor/sebastian/diff/src)
donatj/phpuseragentparser in (/glpi/vendor/donatj/phpuseragentparser/src/UserAgent)
elvanto/litemoji in (/glpi/vendor/elvanto/litemoji/src)
symfony/console in (/glpi/vendor/symfony/console)
scssphp/scssphp in (/glpi/vendor/scssphp/scssphp/src)
laminas/laminas-mail in (/glpi/vendor/laminas/laminas-mail/src/Protocol)
laminas/laminas-mime in (/glpi/vendor/laminas/laminas-mime/src)
rlanvin/php-rrule in (/glpi/vendor/rlanvin/php-rrule/src)
ramsey/uuid in (/glpi/vendor/ramsey/uuid/src)
psr/log in (/glpi/vendor/psr/log/Psr/Log)
psr/simple-cache in (/glpi/vendor/psr/simple-cache/src)
psr/cache in (/glpi/vendor/psr/cache/src)
league/csv in (/glpi/vendor/league/csv/src)
mexitek/phpcolors in (/glpi/vendor/mexitek/phpcolors/src/Mexitek/PHPColors)
guzzlehttp/guzzle in (/glpi/vendor/guzzlehttp/guzzle/src)
guzzlehttp/psr7 in (/glpi/vendor/guzzlehttp/psr7/src)
glpi-project/inventory_format in (/glpi/vendor/glpi-project/inventory_format/lib/php)
wapmorgan/unified-archive in (/glpi/vendor/wapmorgan/unified-archive/src)
paragonie/sodium_compat in (/glpi/vendor/paragonie/sodium_compat/src)
symfony/cache in (/glpi/vendor/symfony/cache)
html2text/html2text in (/glpi/vendor/html2text/html2text/src)
symfony/css-selector in (/glpi/vendor/symfony/css-selector)
symfony/dom-crawler in (/glpi/vendor/symfony/dom-crawler)
twig/twig in (/glpi/vendor/twig/twig/src)
twig/string-extra in (/glpi/vendor/twig/string-extra)
symfony/polyfill-ctype not found
symfony/polyfill-iconv not found
symfony/polyfill-mbstring not found
symfony/polyfill-php80 not found
symfony/polyfill-php81 not found
symfony/polyfill-php82 in (/glpi/vendor/symfony/polyfill-php82)
league/oauth2-client in (/glpi/vendor/league/oauth2-client/src/Provider)
league/oauth2-google in (/glpi/vendor/league/oauth2-google/src/Provider)
thenetworg/oauth2-azure in (/glpi/vendor/thenetworg/oauth2-azure/src/Provider)

LDAP directories
 

SQL replicas
 
Notifications
 
Way of sending emails: SMTP+TLS ()

Plugins list
 
    accounts             Name: Accounts                       Version: 3.0.3      State: Installed / not activated               
        Install Method: Marketplace
    activity             Name: Activities                     Version: 3.1.2      State: Installed / not activated               
        Install Method: Manual
    actualtime           Name: ActualTime                     Version: 2.2.0      State: Installed / not activated               
        Install Method: Marketplace
    fields               Name: Additional fields              Version: 1.21.2     State: Installed / not activated               
        Install Method: Marketplace
    advancedplanning     Name: advancedplanning               Version: 1.1.0      State: Installed / not activated               
        Install Method: Marketplace
    news                 Name: Alerts                         Version: 1.12.1     State: Installed / not activated               
        Install Method: Marketplace
    appliances           Name: Appliances                     Version: 3.2.0      State: Installed / not activated               
        Install Method: Manual
    badges               Name: Badges                         Version: 3.0.0      State: Installed / not activated               
        Install Method: Marketplace
    barcode              Name: Barcode                        Version: 2.7.1      State: Installed / not activated               
        Install Method: Marketplace
    behaviors            Name: Behaviours                     Version: 2.7.2      State: Installed / not activated               
        Install Method: Marketplace
    borgbase             Name: Borgbase                       Version: 1.0.0      State: Not installed                           
        Install Method: Marketplace
    archibp              Name: Business Processes             Version: 2.0.5      State: Installed / not activated               
        Install Method: Marketplace
    camerainput          Name: Camera Input                   Version: 2.1.0      State: Installed / not activated               
        Install Method: Marketplace
    positions            Name: Cartography                    Version: 6.0.2      State: Installed / not activated               
        Install Method: Marketplace
    cmdb                 Name: CMDB                           Version: 3.0.3      State: Installed / not activated               
        Install Method: Marketplace
    connections          Name: Connections                    Version: 10.0.0     State: Installed / not activated               
        Install Method: Marketplace
    consumables          Name: Consumable request             Version: 2.0.1      State: Installed / not activated               
        Install Method: Marketplace
    costs                Name: Costs                          Version: 3.0.1      State: Installed / not activated               
        Install Method: Marketplace
    credit               Name: Credit vouchers                Version: 1.12.1     State: Installed / not activated               
        Install Method: Marketplace
    customizations       Name: Customizations                 Version: 0.2.4      State: Not installed                           
        Install Method: Marketplace
    datainjection        Name: Data injection                 Version: 2.13.3     State: Installed / not activated               
        Install Method: Marketplace
    archidata            Name: Data structures                Version: 1.0.14     State: Installed / not activated               
        Install Method: Marketplace
    databaseinventory    Name: Database Inventory             Version: 1.0.0      State: Installed / not activated               
        Install Method: Marketplace
    dataflows            Name: Dataflows                      Version: 3.0.6      State: Installed / not activated               
        Install Method: Marketplace
    archimap             Name: Diagrams                       Version: 3.3.0      State: Installed / not activated               
        Install Method: Marketplace
    manageentities       Name: Entities portal                Version: 4.0.3      State: Installed / not activated               
        Install Method: Marketplace
    escalade             Name: Escalation                     Version: 2.9.2      State: Installed / not activated               
        Install Method: Marketplace
    archisw              Name: Estructuras de aplicaciones    Version: 3.0.13     State: Installed / not activated               
        Install Method: Marketplace
    financialreports     Name: Financial reports              Version: 3.0.0      State: Installed / not activated               
        Install Method: Marketplace
    formcreator          Name: Form Creator                   Version: 2.13.7     State: Installed / not activated               
        Install Method: Marketplace
    archifun             Name: Functional Areas               Version: 2.2.9      State: Installed / not activated               
        Install Method: Marketplace
    gantt                Name: gantt                          Version: 1.0.4      State: Installed / not activated               
        Install Method: Marketplace
    gappessentials       Name: Gapp Essentials                Version: 2.1.2      State: Installed / not activated               
        Install Method: Marketplace
    glpiinventory        Name: GLPI Inventory                 Version: 1.2.3      State: Installed / not activated               
        Install Method: Marketplace
    resources            Name: Human Resources                Version: 3.0.4      State: Installed / not activated               
        Install Method: Marketplace
    sccm                 Name: Interface - SCCM               Version: 2.4.3      State: Installed / not activated               
        Install Method: Marketplace
    geninventorynumber   Name: Inventory number generation    Version: 2.8.3      State: Installed / not activated               
        Install Method: Marketplace
    addressing           Name: IP Adressing                   Version: 3.0.1      State: Installed / not activated               
        Install Method: Marketplace
    uninstall            Name: Item's Lifecycle (uninstall)   Version: 2.9.0      State: Installed / not activated               
        Install Method: Marketplace
    itilcategorygroups   Name: ItilCategory Groups            Version: 2.5.1      State: Installed / not activated               
        Install Method: Marketplace
    jsaddons             Name: JS Addons                      Version: 2.0.0      State: Not installed                           
        Install Method: Marketplace
    mailanalyzer         Name: Mail Analyzer                  Version: 3.0.0      State: Installed / not activated               
        Install Method: Manual
    metademands          Name: Meta-Demands                   Version: 3.3.3      State: Installed / not activated               
        Install Method: Marketplace
    metabase             Name: Metabase                       Version: 1.3.3      State: Installed / not activated               
        Install Method: Marketplace
    mfa                  Name: MFA                            Version: 1.0.2      State: Installed / not activated               
        Install Method: Marketplace
    mreporting           Name: More Reporting                 Version: 1.8.2      State: Installed / not activated               
        Install Method: Marketplace
    satisfaction         Name: More satisfaction              Version: 1.6.2      State: Installed / not activated               
        Install Method: Marketplace
    moreticket           Name: More ticket                    Version: 1.7.3      State: Installed / not activated               
        Install Method: Marketplace
    mydashboard          Name: My Dashboard                   Version: 2.1.5      State: Installed / not activated               
        Install Method: Marketplace
    oauthimap            Name: Oauth IMAP                     Version: 1.4.3      State: Installed / not activated               
        Install Method: Marketplace
    genericobject        Name: Objects management             Version: 2.14.4     State: Installed / not activated               
        Install Method: Marketplace
    ocsinventoryng       Name: OCS Inventory NG               Version: 2.0.4      State: Installed / not activated               
        Install Method: Marketplace
    onetimesecret        Name: OneTimeSecret                  Version: 2.0.0      State: Installed / not activated               
        Install Method: Marketplace
    order                Name: Orders management              Version: 2.10.4     State: Installed / not activated               
        Install Method: Marketplace
    additionalalerts     Name: Others alerts                  Version: 2.4.0      State: Installed / not activated               
        Install Method: Marketplace
    phpsaml              Name: PHP SAML                       Version: 1.2.2      State: Installed / not activated               
        Install Method: Manual
    pdf                  Name: Print to pdf                   Version: 3.0.0      State: Installed / not activated               
        Install Method: Marketplace
    printercounters      Name: Printer counters               Version: 2.0.0      State: Installed / not activated               
        Install Method: Marketplace
    purchaserequest      Name: Purchase request               Version: 3.0.1      State: Installed / not activated               
        Install Method: Marketplace
    releases             Name: Releases                       Version: 2.0.3      State: Installed / not activated               
        Install Method: Marketplace
    remotesupport        Name: Remote Support Input           Version: 0.0.1      State: Installed / not activated               
        Install Method: Manual
    ReservationInfo      Name: Reservation Info               Version: 0.0.4      State: Installed / not activated               
        Install Method: Manual
    screenshot           Name: Screenshot                     Version: 2.0.2      State: Installed / not activated               
        Install Method: Marketplace
    shellcommands        Name: Shell Commands                 Version: 4.0.1      State: Installed / not activated               
        Install Method: Marketplace
    singlesignon         Name: Single Sign-on                 Version: 1.3.4      State: Installed / not activated               
        Install Method: Manual
    stab                 Name: Split Timeline Action Buttons  Version: 1.1.2      State: Installed / not activated               
        Install Method: Marketplace
    statecheck           Name: Statecheck Rules               Version: 2.3.9      State: Installed / not activated               
        Install Method: Marketplace
    manufacturersimports Name: Suppliers imports              Version: 3.0.5      State: Installed / not activated               
        Install Method: Marketplace
    tag                  Name: Tag Management                 Version: 2.11.6     State: Installed / not activated               
        Install Method: Marketplace
    taskdrop             Name: TaskDrop                       Version: 2.0.0      State: Installed / not activated               
        Install Method: Marketplace
    tasklists            Name: Tasks list                     Version: 2.0.3      State: Installed / not activated               
        Install Method: Marketplace
    ticketmail           Name: Ticket Mail                    Version: 3.6.2      State: Installed / not activated               
        Install Method: Manual
    timelineticket       Name: Timeline of tickets            Version: 10.0+1.1   State: Installed / not activated               
        Install Method: Marketplace
    treeview             Name: Tree view                      Version: 1.10.2     State: Installed / not activated               
        Install Method: Marketplace
    typology             Name: Typologies                     Version: 3.0.0      State: Installed / not activated               
        Install Method: Marketplace
    useditemsexport      Name: Used items export              Version: 2.5.1      State: Installed / not activated               
        Install Method: Marketplace
    vip                  Name: VIP                            Version: 1.8.2      State: Installed / not activated               
        Install Method: Marketplace
    vizir                Name: Vizir                          Version: 1.2.0      State: Not installed                           
        Install Method: Marketplace
    webapplications      Name: Web applications               Version: 4.0.1      State: Installed / not activated               
        Install Method: Manual
    webresources         Name: Web Resources                  Version: 2.0.3      State: Installed / not activated               
        Install Method: Marketplace
    webhook              Name: Webhooks                       Version: 1.0.14     State: Installed / not activated               
        Install Method: Marketplace
    yagp                 Name: yagp                           Version: 2.1.1      State: Installed / not activated               
        Install Method: Marketplace

Anything else?

I also test putting ##FOREACHitems## after <li>:

image

But this does not work well with multiple items, the list does not present correctly:

image

And ##FOREACHitems## before <ol> or <ul>:

image

But this does not present well, when this should be: 1), 2), 3)

I tried many combinations, but nothing works to present correctly.

Loiseau2nuit commented 10 months ago

Also noticed something similar with <tr><td>...</td></tr> markup

jcervantes-sipecom commented 9 months ago

Hi, I resolved it with an attribute in HTML next to the tag: hidden

For example:

<ol>
<li hidden>##FOREACHitems##</li>
<li>##IFticket.itemtype## ##ticket.itemtype##: ##ticket.item.name## ##ENDIFticket.itemtype## ##ELSEticket.itemtype##No items associated.##ENDELSEticket.itemtype##</li>
<li hidden>##ENDFOREACHitems##</li>
</ol>

For table is the same:

<table><tbody>
<tr hidden>
<td>##FOREACHtickets##</td>
</tr>
<tr>
<td>##ticket.authors##</span></td>
<td><span><a href="##ticket.url##">##ticket.title##</a></span></td>
<td>##ticket.priority##</span></td>
<td><span>##ticket.status##</span></td>
<td><span>##IFticket.assigntousers####ticket.assigntousers##<br>##ENDIFticket.assigntousers####IFticket.assigntogroups##<br>##ticket.assigntogroups## ##ENDIFticket.assigntogroups####IFticket.assigntosupplier##<br>##ticket.assigntosupplier## ##ENDIFticket.assigntosupplier##</span></td>
<td><span>##ticket.creationdate##</span></td>
</tr>
<tr hidden>
<td>##ENDFOREACHtickets##</td>
</tr>
</tbody></table>

The result in HTML is visible as what was desired.

Loiseau2nuit commented 9 months ago

@jcervantes-sipecom Thanks for the fix ! And merry Xmas ;-)