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.33k stars 1.3k forks source link

Event "Not Solved Tickets" not parsing tags #18315

Open raregtp opened 1 week ago

raregtp commented 1 week ago

Code of Conduct

Is there an existing issue for this?

Version

10.0.17

Bug description

Using version 10.0.15, the notification for tickets not solved in X days had been working fine on our weekly notification schedule for this item. After upgrading to 10.0.17, our alert for tickets not closed quick parsing the tags correctly.

Prior to 10.0.17, our code block in the HTML notification template translation looked like this:

\ \ \##ticket.title## \##ticket.authors## \##ticket.priority## \##ticket.status## \##IFticket.assigntousers####ticket.assigntousers##
##ENDIFticket.assigntousers####IFticket.assigntogroups##
##ticket.assigntogroups## ##ENDIFticket.assigntogroups####IFticket.assigntosupplier##
##ticket.assigntosupplier## ##ENDIFticket.assigntosupplier##
\##ticket.creationdate## \ \

After updating to 10.0.17, the only way I can get the tags to parse in the above code block is to remove the ##IFticket.status=Pending## and related tags, making the above code block look like this:

\ \ \##ticket.title## \##ticket.authors## \##ticket.priority## \##ticket.status## \##IFticket.assigntousers####ticket.assigntousers##
##ENDIFticket.assigntousers####IFticket.assigntogroups##
##ticket.assigntogroups## ##ENDIFticket.assigntogroups####IFticket.assigntosupplier##
##ticket.assigntosupplier## ##ENDIFticket.assigntosupplier##
\##ticket.creationdate## \ \

I have tried various combinations of the above, and also tried switching to ##IFticket.storestatus=4## in place of the ##IFticket.status=Pening##, but nothing seems to work at this point. It seems related to the fact that I'm embedding it within a FOREACH block, and I have ran into "embedding" issues in some of our other templates that forced me to be creative on how I built out our templates.

Basically, just need a way for the alertnotclosed notification to allow for excluding pending tickets, or for specifying the ticket status to include. This could be an alert configuraiton option on the automatic action, or it could be a "code" solution in my HTML.....which is what was working prior to 10.0.17.

Relevant log output

Page URL

No response

Steps To reproduce

  1. Upgrade or install 10.0.17
  2. Make the HTML code for the notification fired by the automatic action "alertnotclosed" like the attached code.
  3. Run the alertnotclosed notification

alertnotclosed-ticketnotification.txt

Your GLPI setup information

Information about system installation & configuration
GLPI 10.0.17 ( => /var/www/html/glpi)
Installation mode: TARBALL
Current language:en_US

Server
 
Operating system: Linux somehost.somedomain.org 5.14.0-427.37.1.el9_4.x86_64 #​1 SMP PREEMPT_DYNAMIC Wed Sep 25 11:51:41 UTC 2024
    x86_64
PHP 8.3.12 fpm-fcgi (Core, PDO, Phar, Reflection, SPL, SimpleXML, Zend OPcache, apcu, bz2, calendar, cgi-fcgi, ctype, curl,
    date, dom, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, intl, json, ldap, libxml, mbstring, mysqli, mysqlnd, openssl,
    pcre, pdo_mysql, pdo_sqlite, posix, random, session, shmop, sockets, sodium, sqlite3, standard, sysvmsg, sysvsem, sysvshm,
    tokenizer, xml, xmlreader, xmlwriter, xsl, zip, zlib)
Setup: max_execution_time="30" memory_limit="128M" post_max_size="100M" safe_mode="" session.save_handler="files"
    upload_max_filesize="100M" disable_functions="" 
Software: Apache/2.4.57 (Rocky Linux) OpenSSL/3.0.7 ()
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36
Server Software: MariaDB Server
    Server Version: 10.5.22-MariaDB
    Server SQL Mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Parameters: glpi@127.0.0.1/glpi
    Host info: 127.0.0.1 via TCP/IP

PHP version (8.3.12) 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 (10.5.22) is supported.
No files from previous GLPI version detected.
The log file has been created successfully.
Write access to /var/lib/glpi/_cache has been validated.
Write access to /var/lib/glpi/_cron has been validated.
Write access to /var/lib/glpi has been validated.
Write access to /var/lib/glpi/_dumps has been validated.
Write access to /var/lib/glpi/_graphs has been validated.
Write access to /var/lib/glpi/_lock has been validated.
Write access to /var/lib/glpi/_pictures has been validated.
Write access to /var/lib/glpi/_plugins has been validated.
Write access to /var/lib/glpi/_rss has been validated.
Write access to /var/lib/glpi/_sessions has been validated.
Write access to /var/lib/glpi/_tmp has been validated.
Write access to /var/lib/glpi/_uploads has been validated.
For security reasons, SELinux mode should be Enforcing.

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 /var/www/html/glpi/marketplace has been validated.
Timezones seems loaded in database.

GLPI constants
 
GLPI_ROOT: "/var/www/html/glpi"
GLPI_CONFIG_DIR: "/etc/glpi/"
GLPI_VAR_DIR: "/var/lib/glpi"
GLPI_LOG_DIR: "/var/log/glpi"
GLPI_MARKETPLACE_DIR: "/var/www/html/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
GLPI_USER_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_TEXT_MAXSIZE: "4000"
GLPI_DOC_DIR: "/var/lib/glpi"
GLPI_CACHE_DIR: "/var/lib/glpi/_cache"
GLPI_CRON_DIR: "/var/lib/glpi/_cron"
GLPI_DUMP_DIR: "/var/lib/glpi/_dumps"
GLPI_GRAPH_DIR: "/var/lib/glpi/_graphs"
GLPI_LOCAL_I18N_DIR: "/var/lib/glpi/_locales"
GLPI_LOCK_DIR: "/var/lib/glpi/_lock"
GLPI_PICTURE_DIR: "/var/lib/glpi/_pictures"
GLPI_PLUGIN_DOC_DIR: "/var/lib/glpi/_plugins"
GLPI_RSS_DIR: "/var/lib/glpi/_rss"
GLPI_SESSION_DIR: "/var/lib/glpi/_sessions"
GLPI_TMP_DIR: "/var/lib/glpi/_tmp"
GLPI_UPLOAD_DIR: "/var/lib/glpi/_uploads"
GLPI_INVENTORY_DIR: "/var/lib/glpi/_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: "/var/www/html/glpi/locales"
GLPI_VERSION: "10.0.17"
GLPI_SCHEMA_VERSION: "10.0.17@bde16719fbd4112f59a9a7d34c66c959bce73434"
GLPI_MARKETPLACE_PRERELEASES: false
GLPI_MIN_PHP: "7.4.0"
GLPI_MAX_PHP: "8.4.0"
GLPI_YEAR: "2024"

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

LDAP directories
 
Server: 'ldaps://someldaphost.somedomain.org', Port: '636', BaseDN: 'DC=somedomain,DC=org', Connection filter:
        '(&(objectClass=user)(objectCategory=person)(memberOf=CN=somegroup,OU=GLPI,OU=Groups,DC=somedomain,DC=org)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
        RootDN: 'CN=someaccount,CN=Service Accounts,DC=somedomain,DC=org', Use TLS: none

SQL replicas
 
Not active

Notifications
 
Way of sending emails: SMTP+OAUTH (itsupport@somedomain.org@smtp.office365.com)

Plugins list
 
    actualtime           Name: ActualTime                     Version: 3.0.0      State: Enabled                                 
        Install Method: Marketplace
    fields               Name: Additional Fields              Version: 1.21.15    State: Enabled                                 
        Install Method: Marketplace
    news                 Name: Alerts                         Version: 1.12.4     State: Enabled                                 
        Install Method: Marketplace
    archisw              Name: Apps structures                Version: 3.0.20     State: Enabled                                 
        Install Method: Marketplace
    behaviors            Name: Behaviours                     Version: 2.7.3      State: Enabled                                 
        Install Method: Marketplace
    archibp              Name: Business Processes             Version: 2.0.11     State: Enabled                                 
        Install Method: Marketplace
    positions            Name: Cartography                    Version: 6.0.3      State: Enabled                                 
        Install Method: Marketplace
    datainjection        Name: Data injection                 Version: 2.14.0     State: Enabled                                 
        Install Method: Marketplace
    archidata            Name: Data structures                Version: 1.0.15     State: Enabled                                 
        Install Method: Marketplace
    dataflows            Name: Dataflows                      Version: 3.0.13     State: Enabled                                 
        Install Method: Marketplace
    archimap             Name: Diagrams                       Version: 3.3.4      State: Enabled                                 
        Install Method: Marketplace
    escalade             Name: Escalation                     Version: 2.9.9      State: Enabled                                 
        Install Method: Marketplace
    footer               Name: Footer                         Version: 1.1.1      State: Enabled                                 
        Install Method: Manual
    formcreator          Name: Form Creator                   Version: 2.13.9     State: Enabled                                 
        Install Method: Marketplace
    fpsoftware           Name: FP Software                    Version: 2.0.0      State: Enabled                                 
        Install Method: Manual
    archifun             Name: Functional Areas               Version: 2.2.11     State: Enabled                                 
        Install Method: Marketplace
    gappessentials       Name: Gapp Essentials                Version: 2.3.0      State: Enabled                                 
        Install Method: Marketplace
    glpiinventory        Name: GLPI Inventory                 Version: 1.4.0      State: Enabled                                 
        Install Method: Marketplace
    mailanalyzer         Name: Mail Analyzer                  Version: 3.2.0      State: Enabled                                 
        Install Method: Manual
    mfa                  Name: MFA                            Version: 1.0.2      State: Enabled                                 
        Install Method: Marketplace
    mreporting           Name: More Reporting                 Version: 1.8.6      State: Enabled                                 
        Install Method: Marketplace
    oauthimap            Name: Oauth IMAP                     Version: 1.4.3      State: Enabled                                 
        Install Method: Marketplace
    genericobject        Name: Objects management             Version: 2.14.10    State: Enabled                                 
        Install Method: Marketplace
    pdf                  Name: Print to pdf                   Version: 3.0.0      State: Enabled                                 
        Install Method: Marketplace
    reports              Name: Reports                        Version: 1.16.0     State: Enabled                                 
        Install Method: Marketplace
    singlesignon         Name: Single Sign-on                 Version: 1.3.5      State: Enabled                                 
        Install Method: Manual
    statecheck           Name: Statecheck Rules               Version: 2.4.3      State: Enabled                                 
        Install Method: Marketplace
    manufacturersimports Name: Suppliers imports              Version: 3.0.9      State: Enabled                                 
        Install Method: Marketplace
    taskdrop             Name: TaskDrop                       Version: 2.0.0      State: Enabled                                 
        Install Method: Marketplace
    tasklists            Name: Tasks list                     Version: 2.0.3      State: Enabled                                 
        Install Method: Marketplace
    timelineticket       Name: Timeline of tickets            Version: 10.0+1.2   State: Enabled                                 
        Install Method: Marketplace
    trademark            Name: Trademark                      Version: 1.4.1      State: Enabled                                 
        Install Method: Manual
    vip                  Name: VIP                            Version: 1.8.2      State: Enabled                                 
        Install Method: Marketplace
    webresources         Name: Web Resources                  Version: 2.0.4      State: Enabled                                 
        Install Method: Marketplace
    webhook              Name: Webhooks                       Version: 1.0.18     State: Enabled                                 
        Install Method: Marketplace
    yagp                 Name: YAGP                           Version: 2.3.1      State: Enabled                                 
        Install Method: Marketplace

Locales overrides

Anything else?

No response

raregtp commented 1 week ago

Well, as luck would have it, I've found a work-around (but don't know what changed from 10.0.15 to 10.0.17). While making adjustments to the HTML to remove the ##IFticket.status=Pending## code block, I was hoping to just keep it commented and move it in the code. So this:

\ \ \##ticket.title## \##ticket.authors## \##ticket.priority## \##ticket.status## \##IFticket.assigntousers####ticket.assigntousers##>
##ENDIFticket.assigntousers####IFticket.assigntogroups##
##ticket.assigntogroups## ##ENDIFticket.assigntogroups####IFticket.assigntosupplier##
##ticket.assigntosupplier## ##ENDIFticket.assigntosupplier##
> \##ticket.creationdate## \ \

was changed to this:

\ \ \ \##ticket.title## \##ticket.authors## \##ticket.priority## \##ticket.status## \##IFticket.assigntousers####ticket.assigntousers##
##ENDIFticket.assigntousers####IFticket.assigntogroups##
##ticket.assigntogroups## ##ENDIFticket.assigntogroups####IFticket.assigntosupplier##
##ticket.assigntosupplier## ##ENDIFticket.assigntosupplier##
\##ticket.creationdate## \ \ \

Not sure why that would make a difference other than there's an extra carriage return in there....but the tags are still commented out. Either way....would be good to know what changed, but I'm good with this adjustment in my code as it renders the results I was trying to achieve and am used to in the prior GLPI version.