Skip to main content

iTop Integration - Releases

← App details

Nextcloud 34

iTop Integration 1.4.2
Release Details
UpdatedAug. 11, 2026, 12:29 p.m.
Changelog

🔧 Compatibility Fixes

Fixed

  • Deprecated Exception in Notifier (#6): Notifier::prepare() now throws OCP\Notification\UnknownNotificationException instead of the deprecated plain InvalidArgumentException when a notification is not known to this notifier — Nextcloud ≥ 30 logged a deprecation warning on every notifications API poll (e.g. from mobile clients or Unified Push) whenever other apps' notifications were processed
  • CI Links Missing Object ID: Smart picker and search results for Configuration Items produced iTop URLs with an empty id= parameter (only UserRequest links worked) — CI queries use output_fields=*, which does not include the object id in iTop REST responses; the id is now taken from the response's key property in both the CI search and the preview mapper, so inserted links and previews point to the actual object
  • Custom CI Class Icons on Hardened Servers: Icon auto-discovery relied on the iTop web server exposing HTML directory listings of /datamodels/2.x/ — standard production hardening (Options -Indexes) blocks these, so all custom CI classes silently fell back to the generic Peripheral icon; the installed module list is now fetched via the REST API (ModuleInstallation) and datamodel XML URLs are derived from the iTop naming convention, with directory listings only used as an enhancement when available; a failed discovery (empty definitions map) is no longer persisted for 24h, so icons recover on the next attempt instead of staying pinned to the fallback; on servers that block the datamodel XML files entirely, the admin settings now show a hint on the Custom CI Classes section naming the affected classes and the two remedies (allow the Nextcloud server to read the datamodel XMLs, or upload icons manually); class icons in the admin settings are now clickable to upload or overwrite a custom icon (SVG or PNG, max 256 KB) via the file picker
  • Localized iTop Date Formats: iTop installations with a customized date_and_time_format (e.g. d.m.Y) delivered localized date strings via the REST API, causing "Invalid Date" in the dashboard widgets, wrong ticket sorting, and broken SLA deadline calculations — all REST responses are now normalized to Y-m-d H:i:s regardless of the server's locale configuration (supports ., /, and - separators in day-first, month-first, and year-first order), and the widgets fall back to the raw string instead of rendering "Invalid Date" for unparseable values
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignaturefId/QLAYQEVu5mLv0resY8nlf2XgkKbsnesc/bTdxlCm/xw1eU7oluiCkFaewbOoq9XEgOJbMeklp+bHzVP+L6jcwuU+yitvPV26TfYSSIsKoXk4nly1FAW4U2Dpf/ggx4JhNo7f3Wwop+25hJV7Dm083545eR8YgDHjARP9UmBJHgfJgo1drYHEEUnyGdRtd78GD+7mXJQMM3s8b48RTXvl7qH4F8gykVa/TXAGIBc/quSxG9+N6kxyAVyXT96oxUUOG3mJOfmqHGDplaYYYaWNoJI0AKkErnS2zemTLHbnKPqgx2l6OmA5UnL1JubRnbRyPPHvIGKayhuWvqvD5h90PxeirsAXvH8adM7SnMS8kpgu9zllkxmOrZvthOVOb64M8wUUVBxdHUvVZ7YcGc93GHyFtC0WQ0HbQ+IAtdZkfZz0zPY54TRhtdd9wfPfDCWLmqwIX0E28MhXV+9/bNTGiYd+MM6VHC5EioUxGS97aBC66bXyUt9vbHvA0lGDEPE58PDZCYwlhv3SqyKY1rtN8L73tWgxrgej9zKVQFpbR8az//W5DjZBTm2ef4+I0bL1nLBz1w0C2U69we2QcuV+rQkO+ohLBEN0NqYrmIeP6dEkie+N122wpN3uGN1ryDNew+PTu9DfIFvFBEqn23YRMb/EGypzMHj33aQpJaY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
iTop Integration 1.4.1
Release Details
UpdatedJuly 26, 2026, 2:08 p.m.
Changelog

🔧 Nextcloud 34 Compatibility, Token Setup Guidance & Release Polish

This release restores compatibility with Nextcloud 34, adds in-app guidance for the iTop personal token prerequisites, and fixes several issues found during the pre-release review of v1.4.0.

Added

  • iTop Configuration Hint (Admin Settings): New warning card explaining that agents need personal_tokens_allowed_profiles configured in iTop's Configuration File Editor before they can create personal tokens, including a ready-to-adapt $MyModuleSettings example
  • Personal Token Help (Personal Settings): Info hint shown when the "Personal Tokens" option is missing from the user's iTop account, pointing them to their iTop administrator

Fixed

  • Nextcloud 34 Compatibility: Replaced removed legacy \OC::$server->getURLGenerator() / getDatabaseConnection() calls with the modern \OCP\Server::get() API — the deprecated shortcut methods were removed in Nextcloud 34, causing the admin and personal settings pages to abort mid-render with an Internal Server Error; also raised the supported max-version to 34
  • Broken Admin Settings CSS: Removed a stray unclosed .ticket-type-options rule that swallowed the new config-hint styles and duplicated an existing selector
  • Template Translation Mismatch: Removed embedded HTML from translatable strings in admin and personal settings templates so they match the locale catalogs (German translations now resolve correctly), and fixed a missing %s substitution that displayed literally instead of the instance name
  • Locale File Consistency: Synced 5 new strings from .js locale files into the .json catalogs for en, de, and de_DE (server-side rendering reads .json — the strings would otherwise fall back to English)
  • Slow Custom CI Class Discovery: The ci-class-available endpoint re-crawled the entire iTop datamodel (one HTTP request per module directory and XML file) on every call — the parsed class-definition map and a negative cache for undiscoverable icons are now persisted in appdata with a 24h TTL, reducing repeat loads from ~37s to under a second
  • Class Browser Not Updating: Newly added custom CI classes now disappear from the selection panel immediately after saving instead of remaining listed
  • Debug Leftover: Removed a stray console.log from the dashboard widget and rebuilt the frontend bundle
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignatureDQlRM1dgZb1GdPGTBChvKh27m38BBFoFPHhs7jIws7L07u1co5AeWtowwauS7srSh0q6ReEiu1AyFhqC9XXWMC3vwYRFhlnlP3fzMqA2Xi4UAwI989tAhMoixMa4ecisEEWqZ9fo6FZ4rrPgU5CmWVoosLnrdd3v0G/RsCW54d4QruNxspp1RNXWe5z76pecjPrhkASIe6a+YPPa2LJz56H6TxK4aRYtGQ67ODUKm/Yn+F/ctU4hVuol38f68T2QKL0WH48eYXBV8y8D0u1hYMm3CMVeB4McxTaSkYenMOcYOxbjLTGBS6Nk/KJzvab6gi4xB/VzbvWFu5Kz7i2Va9XabBnUSOBsaBLMYf1uM+62wdxFnUFi9pc+dHpB0Pz+WBmtDA7t/YnSrZQk8KVnbUef5Rd8CIopHxMoI9BKQfMlsuLg6zbNx6hsFN/kN9mbhei3U+VfZ5ryyu3bMpZ2a4VlECvZB1h+V271LXdjNviqVWBwSrJPNOVhaPpEYn49HbOJ4FWF+ZIncMIP/VVcfWNLganCJ49ffzCZUIFffGRbxpzbYvuh8NiWqwVGb841B8QoM27MgTH5dq0HYVaB0o8mcpOYRpLtC933L0vDrldYIzrS0hGP4E+nAU0PYpuigY2bfrswWYuhvrHNF1EcrfqqW8vW2XT8L6jrNUutNXw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 33

iTop Integration 1.4.2
Release Details
UpdatedAug. 11, 2026, 12:29 p.m.
Changelog

🔧 Compatibility Fixes

Fixed

  • Deprecated Exception in Notifier (#6): Notifier::prepare() now throws OCP\Notification\UnknownNotificationException instead of the deprecated plain InvalidArgumentException when a notification is not known to this notifier — Nextcloud ≥ 30 logged a deprecation warning on every notifications API poll (e.g. from mobile clients or Unified Push) whenever other apps' notifications were processed
  • CI Links Missing Object ID: Smart picker and search results for Configuration Items produced iTop URLs with an empty id= parameter (only UserRequest links worked) — CI queries use output_fields=*, which does not include the object id in iTop REST responses; the id is now taken from the response's key property in both the CI search and the preview mapper, so inserted links and previews point to the actual object
  • Custom CI Class Icons on Hardened Servers: Icon auto-discovery relied on the iTop web server exposing HTML directory listings of /datamodels/2.x/ — standard production hardening (Options -Indexes) blocks these, so all custom CI classes silently fell back to the generic Peripheral icon; the installed module list is now fetched via the REST API (ModuleInstallation) and datamodel XML URLs are derived from the iTop naming convention, with directory listings only used as an enhancement when available; a failed discovery (empty definitions map) is no longer persisted for 24h, so icons recover on the next attempt instead of staying pinned to the fallback; on servers that block the datamodel XML files entirely, the admin settings now show a hint on the Custom CI Classes section naming the affected classes and the two remedies (allow the Nextcloud server to read the datamodel XMLs, or upload icons manually); class icons in the admin settings are now clickable to upload or overwrite a custom icon (SVG or PNG, max 256 KB) via the file picker
  • Localized iTop Date Formats: iTop installations with a customized date_and_time_format (e.g. d.m.Y) delivered localized date strings via the REST API, causing "Invalid Date" in the dashboard widgets, wrong ticket sorting, and broken SLA deadline calculations — all REST responses are now normalized to Y-m-d H:i:s regardless of the server's locale configuration (supports ., /, and - separators in day-first, month-first, and year-first order), and the widgets fall back to the raw string instead of rendering "Invalid Date" for unparseable values
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignaturefId/QLAYQEVu5mLv0resY8nlf2XgkKbsnesc/bTdxlCm/xw1eU7oluiCkFaewbOoq9XEgOJbMeklp+bHzVP+L6jcwuU+yitvPV26TfYSSIsKoXk4nly1FAW4U2Dpf/ggx4JhNo7f3Wwop+25hJV7Dm083545eR8YgDHjARP9UmBJHgfJgo1drYHEEUnyGdRtd78GD+7mXJQMM3s8b48RTXvl7qH4F8gykVa/TXAGIBc/quSxG9+N6kxyAVyXT96oxUUOG3mJOfmqHGDplaYYYaWNoJI0AKkErnS2zemTLHbnKPqgx2l6OmA5UnL1JubRnbRyPPHvIGKayhuWvqvD5h90PxeirsAXvH8adM7SnMS8kpgu9zllkxmOrZvthOVOb64M8wUUVBxdHUvVZ7YcGc93GHyFtC0WQ0HbQ+IAtdZkfZz0zPY54TRhtdd9wfPfDCWLmqwIX0E28MhXV+9/bNTGiYd+MM6VHC5EioUxGS97aBC66bXyUt9vbHvA0lGDEPE58PDZCYwlhv3SqyKY1rtN8L73tWgxrgej9zKVQFpbR8az//W5DjZBTm2ef4+I0bL1nLBz1w0C2U69we2QcuV+rQkO+ohLBEN0NqYrmIeP6dEkie+N122wpN3uGN1ryDNew+PTu9DfIFvFBEqn23YRMb/EGypzMHj33aQpJaY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
iTop Integration 1.4.1
Release Details
UpdatedJuly 26, 2026, 2:08 p.m.
Changelog

🔧 Nextcloud 34 Compatibility, Token Setup Guidance & Release Polish

This release restores compatibility with Nextcloud 34, adds in-app guidance for the iTop personal token prerequisites, and fixes several issues found during the pre-release review of v1.4.0.

Added

  • iTop Configuration Hint (Admin Settings): New warning card explaining that agents need personal_tokens_allowed_profiles configured in iTop's Configuration File Editor before they can create personal tokens, including a ready-to-adapt $MyModuleSettings example
  • Personal Token Help (Personal Settings): Info hint shown when the "Personal Tokens" option is missing from the user's iTop account, pointing them to their iTop administrator

Fixed

  • Nextcloud 34 Compatibility: Replaced removed legacy \OC::$server->getURLGenerator() / getDatabaseConnection() calls with the modern \OCP\Server::get() API — the deprecated shortcut methods were removed in Nextcloud 34, causing the admin and personal settings pages to abort mid-render with an Internal Server Error; also raised the supported max-version to 34
  • Broken Admin Settings CSS: Removed a stray unclosed .ticket-type-options rule that swallowed the new config-hint styles and duplicated an existing selector
  • Template Translation Mismatch: Removed embedded HTML from translatable strings in admin and personal settings templates so they match the locale catalogs (German translations now resolve correctly), and fixed a missing %s substitution that displayed literally instead of the instance name
  • Locale File Consistency: Synced 5 new strings from .js locale files into the .json catalogs for en, de, and de_DE (server-side rendering reads .json — the strings would otherwise fall back to English)
  • Slow Custom CI Class Discovery: The ci-class-available endpoint re-crawled the entire iTop datamodel (one HTTP request per module directory and XML file) on every call — the parsed class-definition map and a negative cache for undiscoverable icons are now persisted in appdata with a 24h TTL, reducing repeat loads from ~37s to under a second
  • Class Browser Not Updating: Newly added custom CI classes now disappear from the selection panel immediately after saving instead of remaining listed
  • Debug Leftover: Removed a stray console.log from the dashboard widget and rebuilt the frontend bundle
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignatureDQlRM1dgZb1GdPGTBChvKh27m38BBFoFPHhs7jIws7L07u1co5AeWtowwauS7srSh0q6ReEiu1AyFhqC9XXWMC3vwYRFhlnlP3fzMqA2Xi4UAwI989tAhMoixMa4ecisEEWqZ9fo6FZ4rrPgU5CmWVoosLnrdd3v0G/RsCW54d4QruNxspp1RNXWe5z76pecjPrhkASIe6a+YPPa2LJz56H6TxK4aRYtGQ67ODUKm/Yn+F/ctU4hVuol38f68T2QKL0WH48eYXBV8y8D0u1hYMm3CMVeB4McxTaSkYenMOcYOxbjLTGBS6Nk/KJzvab6gi4xB/VzbvWFu5Kz7i2Va9XabBnUSOBsaBLMYf1uM+62wdxFnUFi9pc+dHpB0Pz+WBmtDA7t/YnSrZQk8KVnbUef5Rd8CIopHxMoI9BKQfMlsuLg6zbNx6hsFN/kN9mbhei3U+VfZ5ryyu3bMpZ2a4VlECvZB1h+V271LXdjNviqVWBwSrJPNOVhaPpEYn49HbOJ4FWF+ZIncMIP/VVcfWNLganCJ49ffzCZUIFffGRbxpzbYvuh8NiWqwVGb841B8QoM27MgTH5dq0HYVaB0o8mcpOYRpLtC933L0vDrldYIzrS0hGP4E+nAU0PYpuigY2bfrswWYuhvrHNF1EcrfqqW8vW2XT8L6jrNUutNXw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 32

iTop Integration 1.4.2
Release Details
UpdatedAug. 11, 2026, 12:29 p.m.
Changelog

🔧 Compatibility Fixes

Fixed

  • Deprecated Exception in Notifier (#6): Notifier::prepare() now throws OCP\Notification\UnknownNotificationException instead of the deprecated plain InvalidArgumentException when a notification is not known to this notifier — Nextcloud ≥ 30 logged a deprecation warning on every notifications API poll (e.g. from mobile clients or Unified Push) whenever other apps' notifications were processed
  • CI Links Missing Object ID: Smart picker and search results for Configuration Items produced iTop URLs with an empty id= parameter (only UserRequest links worked) — CI queries use output_fields=*, which does not include the object id in iTop REST responses; the id is now taken from the response's key property in both the CI search and the preview mapper, so inserted links and previews point to the actual object
  • Custom CI Class Icons on Hardened Servers: Icon auto-discovery relied on the iTop web server exposing HTML directory listings of /datamodels/2.x/ — standard production hardening (Options -Indexes) blocks these, so all custom CI classes silently fell back to the generic Peripheral icon; the installed module list is now fetched via the REST API (ModuleInstallation) and datamodel XML URLs are derived from the iTop naming convention, with directory listings only used as an enhancement when available; a failed discovery (empty definitions map) is no longer persisted for 24h, so icons recover on the next attempt instead of staying pinned to the fallback; on servers that block the datamodel XML files entirely, the admin settings now show a hint on the Custom CI Classes section naming the affected classes and the two remedies (allow the Nextcloud server to read the datamodel XMLs, or upload icons manually); class icons in the admin settings are now clickable to upload or overwrite a custom icon (SVG or PNG, max 256 KB) via the file picker
  • Localized iTop Date Formats: iTop installations with a customized date_and_time_format (e.g. d.m.Y) delivered localized date strings via the REST API, causing "Invalid Date" in the dashboard widgets, wrong ticket sorting, and broken SLA deadline calculations — all REST responses are now normalized to Y-m-d H:i:s regardless of the server's locale configuration (supports ., /, and - separators in day-first, month-first, and year-first order), and the widgets fall back to the raw string instead of rendering "Invalid Date" for unparseable values
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignaturefId/QLAYQEVu5mLv0resY8nlf2XgkKbsnesc/bTdxlCm/xw1eU7oluiCkFaewbOoq9XEgOJbMeklp+bHzVP+L6jcwuU+yitvPV26TfYSSIsKoXk4nly1FAW4U2Dpf/ggx4JhNo7f3Wwop+25hJV7Dm083545eR8YgDHjARP9UmBJHgfJgo1drYHEEUnyGdRtd78GD+7mXJQMM3s8b48RTXvl7qH4F8gykVa/TXAGIBc/quSxG9+N6kxyAVyXT96oxUUOG3mJOfmqHGDplaYYYaWNoJI0AKkErnS2zemTLHbnKPqgx2l6OmA5UnL1JubRnbRyPPHvIGKayhuWvqvD5h90PxeirsAXvH8adM7SnMS8kpgu9zllkxmOrZvthOVOb64M8wUUVBxdHUvVZ7YcGc93GHyFtC0WQ0HbQ+IAtdZkfZz0zPY54TRhtdd9wfPfDCWLmqwIX0E28MhXV+9/bNTGiYd+MM6VHC5EioUxGS97aBC66bXyUt9vbHvA0lGDEPE58PDZCYwlhv3SqyKY1rtN8L73tWgxrgej9zKVQFpbR8az//W5DjZBTm2ef4+I0bL1nLBz1w0C2U69we2QcuV+rQkO+ohLBEN0NqYrmIeP6dEkie+N122wpN3uGN1ryDNew+PTu9DfIFvFBEqn23YRMb/EGypzMHj33aQpJaY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
iTop Integration 1.4.1
Release Details
UpdatedJuly 26, 2026, 2:08 p.m.
Changelog

🔧 Nextcloud 34 Compatibility, Token Setup Guidance & Release Polish

This release restores compatibility with Nextcloud 34, adds in-app guidance for the iTop personal token prerequisites, and fixes several issues found during the pre-release review of v1.4.0.

Added

  • iTop Configuration Hint (Admin Settings): New warning card explaining that agents need personal_tokens_allowed_profiles configured in iTop's Configuration File Editor before they can create personal tokens, including a ready-to-adapt $MyModuleSettings example
  • Personal Token Help (Personal Settings): Info hint shown when the "Personal Tokens" option is missing from the user's iTop account, pointing them to their iTop administrator

Fixed

  • Nextcloud 34 Compatibility: Replaced removed legacy \OC::$server->getURLGenerator() / getDatabaseConnection() calls with the modern \OCP\Server::get() API — the deprecated shortcut methods were removed in Nextcloud 34, causing the admin and personal settings pages to abort mid-render with an Internal Server Error; also raised the supported max-version to 34
  • Broken Admin Settings CSS: Removed a stray unclosed .ticket-type-options rule that swallowed the new config-hint styles and duplicated an existing selector
  • Template Translation Mismatch: Removed embedded HTML from translatable strings in admin and personal settings templates so they match the locale catalogs (German translations now resolve correctly), and fixed a missing %s substitution that displayed literally instead of the instance name
  • Locale File Consistency: Synced 5 new strings from .js locale files into the .json catalogs for en, de, and de_DE (server-side rendering reads .json — the strings would otherwise fall back to English)
  • Slow Custom CI Class Discovery: The ci-class-available endpoint re-crawled the entire iTop datamodel (one HTTP request per module directory and XML file) on every call — the parsed class-definition map and a negative cache for undiscoverable icons are now persisted in appdata with a 24h TTL, reducing repeat loads from ~37s to under a second
  • Class Browser Not Updating: Newly added custom CI classes now disappear from the selection panel immediately after saving instead of remaining listed
  • Debug Leftover: Removed a stray console.log from the dashboard widget and rebuilt the frontend bundle
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignatureDQlRM1dgZb1GdPGTBChvKh27m38BBFoFPHhs7jIws7L07u1co5AeWtowwauS7srSh0q6ReEiu1AyFhqC9XXWMC3vwYRFhlnlP3fzMqA2Xi4UAwI989tAhMoixMa4ecisEEWqZ9fo6FZ4rrPgU5CmWVoosLnrdd3v0G/RsCW54d4QruNxspp1RNXWe5z76pecjPrhkASIe6a+YPPa2LJz56H6TxK4aRYtGQ67ODUKm/Yn+F/ctU4hVuol38f68T2QKL0WH48eYXBV8y8D0u1hYMm3CMVeB4McxTaSkYenMOcYOxbjLTGBS6Nk/KJzvab6gi4xB/VzbvWFu5Kz7i2Va9XabBnUSOBsaBLMYf1uM+62wdxFnUFi9pc+dHpB0Pz+WBmtDA7t/YnSrZQk8KVnbUef5Rd8CIopHxMoI9BKQfMlsuLg6zbNx6hsFN/kN9mbhei3U+VfZ5ryyu3bMpZ2a4VlECvZB1h+V271LXdjNviqVWBwSrJPNOVhaPpEYn49HbOJ4FWF+ZIncMIP/VVcfWNLganCJ49ffzCZUIFffGRbxpzbYvuh8NiWqwVGb841B8QoM27MgTH5dq0HYVaB0o8mcpOYRpLtC933L0vDrldYIzrS0hGP4E+nAU0PYpuigY2bfrswWYuhvrHNF1EcrfqqW8vW2XT8L6jrNUutNXw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
iTop Integration 1.3.1
Release Details
UpdatedNov. 9, 2025, 4:15 p.m.
Changelog

🔒 Security Hardening

This release includes important security enhancements to strengthen the application's defenses.

Changed

  • Replaced direct cURL usage with Nextcloud's IClientService for proper SSL certificate verification
  • Enhanced input validation and sanitization for OQL query parameters
  • Improved data validation for numeric identifiers

Security

  • Resolved issues related to network communication security
  • Strengthened protection against malicious input in database queries
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignaturelnQXKW/X1W4wzcMo2KRpEnsnPE+X3WtmgNn4YwtcagfRqtmdmXPJ/y+tv3P4FmMqn59c+fXHdKGkA8mx5pAp1xLl4sDw++/toeXrTAdVI6gfMeoNuKGNqrOGTRfxYoQ47zR6Oz7mmw18uDNbF6tzTEmzn3zHrwJFopziUVls2p/ZNk5lAPqpStmYnlZplx1/av4UjtMDQ5oHHArkjrGscon7cXsKHXTDjBQqTm43AgvpmTysqZKOCDRz2R9Ng122tFxw5ykn8ZSe1fT7ZG16x6S+XawsPsQKUQ+BCDAb7QkkauDPKIoZPXbuLwMl4PCQErwmq23shI5hYtrdq7uBo6XZOtjlgW5YQSm3zoAM4lXVpQSoDFn2ogup1pPOGE/flYqhTijCpuOGMzAxdvCz7/IzC9vjBwc6ML3M+2Ohf0TJKFVL4WeRWclCiy4kAy/BpXN88Dq9yiKVOMbiVD1UZuFdyGRiEYYvFrK8zt387nwtJ7yfi73lNKMm1Z0/zqfEPrdrDtGa6PtVABqPhiSsV7SAOZIJr+frx1YoYYRkTnB8EB/MzPU9QebTSduJr4yVw+Rz+4a+4w0bX7zy3DUoRMlBbrluGA2VcMWacbdEVpCrrESdvwwEFMPyjlVh2yrGj2/qGf7YfFBvtQF7aJbod826WLbqAy4rtfkEKOqwZd0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32
iTop Integration 1.3.0
Release Details
UpdatedNov. 8, 2025, 6:12 p.m.
Changelog

✨ Major New Feature: Agent Notifications System

Version 1.3.0 introduces a comprehensive notification system with 12 notification types across two independent tracks: Portal (4 types) and Agent (8 types). The system provides smart, event-driven notifications with weekend-aware SLA warnings and zero duplicate detection.

Added

Agent Notification System (8 Types)

  • Ticket Assignment Tracking:
  • ticket_assigned: New tickets assigned to you from unassigned state
  • ticket_reassigned: Tickets reassigned to you from another agent
  • team_unassigned_new: New unassigned tickets appearing in your team's queue

  • SLA Management:

  • ticket_tto_warning: Time To Own SLA warnings with escalating urgency (⏰ 24h → ⚠️ 12h → 🟠 4h → 🔴 1h)
  • ticket_ttr_warning: Time To Resolve SLA warnings with same escalation pattern
  • ticket_sla_breach: SLA deadline exceeded alerts (🚨 icon)
  • Weekend-Aware Logic: Friday uses 72h threshold, Saturday uses 48h threshold to catch Monday/Tuesday breaches

  • Priority & Comments:

  • ticket_priority_critical: Automatic alerts when tickets escalate to critical priority (🔴 icon)
  • ticket_comment: New comments on your tickets (both public and private log types)

Portal Notification Enhancements

  • Portal notifications (from v1.2.2) now fully integrated with agent system:
  • ticket_status_changed: Status transitions
  • agent_responded: Public comments from agents
  • ticket_resolved: Resolution notifications
  • agent_assigned: Agent assignment changes

Background Job Infrastructure

  • CheckAgentTicketUpdates: New background job running every 5 minutes
  • Processes all 8 agent notification types
  • Portal-only filtering (skips users with is_portal_only='1')
  • Per-user interval checking (5-1440 minutes configurable)
  • Query optimization (skips API calls when notification types disabled)
  • Rate limiting (max 20 notifications per user per run)

  • CheckPortalTicketUpdates: Existing job (enhanced)

  • Improved query optimization
  • Better timestamp handling
  • Contact role filtering support

Admin Configuration

  • 3-State Notification Control: Configure each notification type independently
  • Disabled: Not available to users (hidden)
  • Forced: Mandatory for all users (no opt-out)
  • User Choice: Enabled by default, users can opt-out

  • Default Configuration:

  • Portal: All 4 types set to "User Choice"
  • Agent: 6 types "User Choice", 2 types "Forced" (SLA breach, priority critical)

  • Configurable Intervals:

  • Admin default: 5-1440 minutes (recommended: 15 minutes)
  • Per-user override available in personal settings

OCC Commands

  • Enhanced itop:notifications:test-user:
  • New --agent flag for testing agent notifications
  • New --portal flag for testing portal notifications (default)
  • --reset flag to clear timestamps and force full re-check
  • Displays user configuration, enabled notifications, and next execution time

API & Services

  • New ItopAPIService Methods:
  • getAgentTicketIds(): Get tickets assigned to agent
  • getTicketsApproachingDeadline(): SLA warning detection with crossing-time algorithm
  • getTeamAssignmentChanges(): Detect new unassigned team tickets
  • applyCrossingTimeAlgorithm(): Weekend-aware threshold calculation (private)

  • Team Detection:

  • Leverages existing getUserTeams() method
  • Tracks team_id changes via CMDBChangeOp
  • Verifies tickets remain unassigned (agent_id = NULL/0)

Documentation

  • New docs/NOTIFICATIONS.md: Comprehensive 345-line user & admin guide
  • Complete notification type reference with examples
  • Setup instructions for users and administrators
  • Troubleshooting section with common issues
  • FAQ with 12 frequently asked questions
  • Technical architecture details

Changed

Notification Algorithm Improvements

  • SLA Crossing-Time Algorithm: Detects threshold crossings without storing per-ticket state
  • Eliminates duplicate warnings for same SLA level
  • Dynamically calculates when each threshold (24h/12h/4h/1h) will be crossed
  • Only notifies most urgent level if multiple thresholds crossed
  • Weekend expansion: Friday (72h), Saturday (48h) for 24h threshold

  • Notification Deduplication:

  • Unique object keys: ticket_id|subject|timestamp_hash
  • Timestamp filtering prevents re-processing old changes
  • Leverages Nextcloud's native duplicate prevention

User Experience

  • Personal Settings UI: Agent notifications section (only visible to non-portal users)
  • Master toggle for agent notifications
  • Granular per-type checkboxes (only "User Choice" types shown)
  • Info box listing "Forced" notifications that cannot be disabled
  • Integrated with existing portal notification settings

  • Notification Display:

  • Escalating emoji icons based on urgency (SLA warnings)
  • Clear differentiation between public and private comments
  • Team name included in team ticket notifications
  • Clickable links route to appropriate iTop interface (portal vs admin UI)

Technical Details

New Configuration Keys (oc_appconfig)

  • agent_notification_config: JSON map of notification type → state (disabled/forced/user_choice)
  • default_notification_interval: Default check interval for all users (minutes, default: 15)

New User Preferences (oc_preferences)

  • notification_last_agent_check: Unix timestamp of last agent notification check
  • disabled_agent_notifications: JSON array of disabled notification types OR "all"
  • notification_check_interval: Per-user custom interval (minutes)

Architecture Highlights

  • Dual Background Jobs: Portal and Agent jobs run independently
  • CMDBChangeOp Detection: Leverages iTop's built-in change tracking (no external state)
  • Minimal State Storage: Only timestamps per user (no per-ticket data)
  • Query Optimization: Early exit if all notifications disabled, selective API calls
  • Portal-Only Filtering: Agent job automatically skips portal-only users

Performance

  • Per-User Intervals: Users only processed when their interval elapses (reduces API load)
  • Query Optimization: Up to 100% reduction in API calls when notification types disabled
  • Rate Limiting: Max 20 notifications per user per run prevents spam
  • Smart Caching: Team memberships cached for 30 minutes, agent names for 24 hours

Translation Updates

  • Updated en.json, de.json, de_DE.json, fr.json with agent notification types

Breaking Changes

None - Existing portal notifications continue working without changes.

Migration Notes

  • No user action required: Portal notifications work as before
  • Agent detection automatic: Users with is_portal_only='0' gain agent notification access

See Also

<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignatureWBBeIspelxxeSl4ijI5xjEbBhaAP3KUyE5ZDmHGAOynl+pivkOzx524mIVKEiJPFsoA9xoKkhpn88sMOoDHTvT9L2zvlza+mVXcqc4G01pk5mRB55fAIJGsNvx6gPe7lV84F2H7IrZwpXcKFLY6pPmaHuP13Oc86w/TULtFfsDGXkuKRD2Z65Gf9VGLmUoSkGwXTRD+iPYgceP7XrY/J+iEQp91GBFXg+UriU6sQdNrRBUlGZkGrIYeuX1XGghBEWjfrFwwQJYDxtWh9Dp/TTdkkGwo8R3kf+KxsMPu+JxD34DKvU9OOHIIKbVeudFgKF/96qNYoZMh+vYWPRkX1i2e7NCNKLkTCIfXEd7Ocs8o2bjBdts1aGV6L0ujTAqsJU7ekm60g6/7YecTgvHP+Fz45hZ2T5kwVeLeiQuHwyUgDyrNIQ7iVXPDi8UpgU0tacGnOJBlWxopgQdBGUkRUzmjIhmpmDohz18QxiJIOsXMHIlraXKJrwMSzHB+mxMPxokS4KfqPKadGDJr/ziqQPfJk+UnbNCU881NZua2aaTJuVsrBv9KKB1hqerCE3tpz0ktm4ym66Emg2qn5P5I3PR7TFxyKzNDmymaLIEkacYsk1xrX6Jv/2nIwmrD4AwR0x9U0NtwE9FUb4JnWms8TyI81l+qZcIrDlHms1DTv+yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32

Nextcloud 31

iTop Integration 1.4.2
Release Details
UpdatedAug. 11, 2026, 12:29 p.m.
Changelog

🔧 Compatibility Fixes

Fixed

  • Deprecated Exception in Notifier (#6): Notifier::prepare() now throws OCP\Notification\UnknownNotificationException instead of the deprecated plain InvalidArgumentException when a notification is not known to this notifier — Nextcloud ≥ 30 logged a deprecation warning on every notifications API poll (e.g. from mobile clients or Unified Push) whenever other apps' notifications were processed
  • CI Links Missing Object ID: Smart picker and search results for Configuration Items produced iTop URLs with an empty id= parameter (only UserRequest links worked) — CI queries use output_fields=*, which does not include the object id in iTop REST responses; the id is now taken from the response's key property in both the CI search and the preview mapper, so inserted links and previews point to the actual object
  • Custom CI Class Icons on Hardened Servers: Icon auto-discovery relied on the iTop web server exposing HTML directory listings of /datamodels/2.x/ — standard production hardening (Options -Indexes) blocks these, so all custom CI classes silently fell back to the generic Peripheral icon; the installed module list is now fetched via the REST API (ModuleInstallation) and datamodel XML URLs are derived from the iTop naming convention, with directory listings only used as an enhancement when available; a failed discovery (empty definitions map) is no longer persisted for 24h, so icons recover on the next attempt instead of staying pinned to the fallback; on servers that block the datamodel XML files entirely, the admin settings now show a hint on the Custom CI Classes section naming the affected classes and the two remedies (allow the Nextcloud server to read the datamodel XMLs, or upload icons manually); class icons in the admin settings are now clickable to upload or overwrite a custom icon (SVG or PNG, max 256 KB) via the file picker
  • Localized iTop Date Formats: iTop installations with a customized date_and_time_format (e.g. d.m.Y) delivered localized date strings via the REST API, causing "Invalid Date" in the dashboard widgets, wrong ticket sorting, and broken SLA deadline calculations — all REST responses are now normalized to Y-m-d H:i:s regardless of the server's locale configuration (supports ., /, and - separators in day-first, month-first, and year-first order), and the widgets fall back to the raw string instead of rendering "Invalid Date" for unparseable values
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignaturefId/QLAYQEVu5mLv0resY8nlf2XgkKbsnesc/bTdxlCm/xw1eU7oluiCkFaewbOoq9XEgOJbMeklp+bHzVP+L6jcwuU+yitvPV26TfYSSIsKoXk4nly1FAW4U2Dpf/ggx4JhNo7f3Wwop+25hJV7Dm083545eR8YgDHjARP9UmBJHgfJgo1drYHEEUnyGdRtd78GD+7mXJQMM3s8b48RTXvl7qH4F8gykVa/TXAGIBc/quSxG9+N6kxyAVyXT96oxUUOG3mJOfmqHGDplaYYYaWNoJI0AKkErnS2zemTLHbnKPqgx2l6OmA5UnL1JubRnbRyPPHvIGKayhuWvqvD5h90PxeirsAXvH8adM7SnMS8kpgu9zllkxmOrZvthOVOb64M8wUUVBxdHUvVZ7YcGc93GHyFtC0WQ0HbQ+IAtdZkfZz0zPY54TRhtdd9wfPfDCWLmqwIX0E28MhXV+9/bNTGiYd+MM6VHC5EioUxGS97aBC66bXyUt9vbHvA0lGDEPE58PDZCYwlhv3SqyKY1rtN8L73tWgxrgej9zKVQFpbR8az//W5DjZBTm2ef4+I0bL1nLBz1w0C2U69we2QcuV+rQkO+ohLBEN0NqYrmIeP6dEkie+N122wpN3uGN1ryDNew+PTu9DfIFvFBEqn23YRMb/EGypzMHj33aQpJaY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
iTop Integration 1.4.1
Release Details
UpdatedJuly 26, 2026, 2:08 p.m.
Changelog

🔧 Nextcloud 34 Compatibility, Token Setup Guidance & Release Polish

This release restores compatibility with Nextcloud 34, adds in-app guidance for the iTop personal token prerequisites, and fixes several issues found during the pre-release review of v1.4.0.

Added

  • iTop Configuration Hint (Admin Settings): New warning card explaining that agents need personal_tokens_allowed_profiles configured in iTop's Configuration File Editor before they can create personal tokens, including a ready-to-adapt $MyModuleSettings example
  • Personal Token Help (Personal Settings): Info hint shown when the "Personal Tokens" option is missing from the user's iTop account, pointing them to their iTop administrator

Fixed

  • Nextcloud 34 Compatibility: Replaced removed legacy \OC::$server->getURLGenerator() / getDatabaseConnection() calls with the modern \OCP\Server::get() API — the deprecated shortcut methods were removed in Nextcloud 34, causing the admin and personal settings pages to abort mid-render with an Internal Server Error; also raised the supported max-version to 34
  • Broken Admin Settings CSS: Removed a stray unclosed .ticket-type-options rule that swallowed the new config-hint styles and duplicated an existing selector
  • Template Translation Mismatch: Removed embedded HTML from translatable strings in admin and personal settings templates so they match the locale catalogs (German translations now resolve correctly), and fixed a missing %s substitution that displayed literally instead of the instance name
  • Locale File Consistency: Synced 5 new strings from .js locale files into the .json catalogs for en, de, and de_DE (server-side rendering reads .json — the strings would otherwise fall back to English)
  • Slow Custom CI Class Discovery: The ci-class-available endpoint re-crawled the entire iTop datamodel (one HTTP request per module directory and XML file) on every call — the parsed class-definition map and a negative cache for undiscoverable icons are now persisted in appdata with a 24h TTL, reducing repeat loads from ~37s to under a second
  • Class Browser Not Updating: Newly added custom CI classes now disappear from the selection panel immediately after saving instead of remaining listed
  • Debug Leftover: Removed a stray console.log from the dashboard widget and rebuilt the frontend bundle
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignatureDQlRM1dgZb1GdPGTBChvKh27m38BBFoFPHhs7jIws7L07u1co5AeWtowwauS7srSh0q6ReEiu1AyFhqC9XXWMC3vwYRFhlnlP3fzMqA2Xi4UAwI989tAhMoixMa4ecisEEWqZ9fo6FZ4rrPgU5CmWVoosLnrdd3v0G/RsCW54d4QruNxspp1RNXWe5z76pecjPrhkASIe6a+YPPa2LJz56H6TxK4aRYtGQ67ODUKm/Yn+F/ctU4hVuol38f68T2QKL0WH48eYXBV8y8D0u1hYMm3CMVeB4McxTaSkYenMOcYOxbjLTGBS6Nk/KJzvab6gi4xB/VzbvWFu5Kz7i2Va9XabBnUSOBsaBLMYf1uM+62wdxFnUFi9pc+dHpB0Pz+WBmtDA7t/YnSrZQk8KVnbUef5Rd8CIopHxMoI9BKQfMlsuLg6zbNx6hsFN/kN9mbhei3U+VfZ5ryyu3bMpZ2a4VlECvZB1h+V271LXdjNviqVWBwSrJPNOVhaPpEYn49HbOJ4FWF+ZIncMIP/VVcfWNLganCJ49ffzCZUIFffGRbxpzbYvuh8NiWqwVGb841B8QoM27MgTH5dq0HYVaB0o8mcpOYRpLtC933L0vDrldYIzrS0hGP4E+nAU0PYpuigY2bfrswWYuhvrHNF1EcrfqqW8vW2XT8L6jrNUutNXw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
iTop Integration 1.3.1
Release Details
UpdatedNov. 9, 2025, 4:15 p.m.
Changelog

🔒 Security Hardening

This release includes important security enhancements to strengthen the application's defenses.

Changed

  • Replaced direct cURL usage with Nextcloud's IClientService for proper SSL certificate verification
  • Enhanced input validation and sanitization for OQL query parameters
  • Improved data validation for numeric identifiers

Security

  • Resolved issues related to network communication security
  • Strengthened protection against malicious input in database queries
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignaturelnQXKW/X1W4wzcMo2KRpEnsnPE+X3WtmgNn4YwtcagfRqtmdmXPJ/y+tv3P4FmMqn59c+fXHdKGkA8mx5pAp1xLl4sDw++/toeXrTAdVI6gfMeoNuKGNqrOGTRfxYoQ47zR6Oz7mmw18uDNbF6tzTEmzn3zHrwJFopziUVls2p/ZNk5lAPqpStmYnlZplx1/av4UjtMDQ5oHHArkjrGscon7cXsKHXTDjBQqTm43AgvpmTysqZKOCDRz2R9Ng122tFxw5ykn8ZSe1fT7ZG16x6S+XawsPsQKUQ+BCDAb7QkkauDPKIoZPXbuLwMl4PCQErwmq23shI5hYtrdq7uBo6XZOtjlgW5YQSm3zoAM4lXVpQSoDFn2ogup1pPOGE/flYqhTijCpuOGMzAxdvCz7/IzC9vjBwc6ML3M+2Ohf0TJKFVL4WeRWclCiy4kAy/BpXN88Dq9yiKVOMbiVD1UZuFdyGRiEYYvFrK8zt387nwtJ7yfi73lNKMm1Z0/zqfEPrdrDtGa6PtVABqPhiSsV7SAOZIJr+frx1YoYYRkTnB8EB/MzPU9QebTSduJr4yVw+Rz+4a+4w0bX7zy3DUoRMlBbrluGA2VcMWacbdEVpCrrESdvwwEFMPyjlVh2yrGj2/qGf7YfFBvtQF7aJbod826WLbqAy4rtfkEKOqwZd0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32
iTop Integration 1.3.0
Release Details
UpdatedNov. 8, 2025, 6:12 p.m.
Changelog

✨ Major New Feature: Agent Notifications System

Version 1.3.0 introduces a comprehensive notification system with 12 notification types across two independent tracks: Portal (4 types) and Agent (8 types). The system provides smart, event-driven notifications with weekend-aware SLA warnings and zero duplicate detection.

Added

Agent Notification System (8 Types)

  • Ticket Assignment Tracking:
  • ticket_assigned: New tickets assigned to you from unassigned state
  • ticket_reassigned: Tickets reassigned to you from another agent
  • team_unassigned_new: New unassigned tickets appearing in your team's queue

  • SLA Management:

  • ticket_tto_warning: Time To Own SLA warnings with escalating urgency (⏰ 24h → ⚠️ 12h → 🟠 4h → 🔴 1h)
  • ticket_ttr_warning: Time To Resolve SLA warnings with same escalation pattern
  • ticket_sla_breach: SLA deadline exceeded alerts (🚨 icon)
  • Weekend-Aware Logic: Friday uses 72h threshold, Saturday uses 48h threshold to catch Monday/Tuesday breaches

  • Priority & Comments:

  • ticket_priority_critical: Automatic alerts when tickets escalate to critical priority (🔴 icon)
  • ticket_comment: New comments on your tickets (both public and private log types)

Portal Notification Enhancements

  • Portal notifications (from v1.2.2) now fully integrated with agent system:
  • ticket_status_changed: Status transitions
  • agent_responded: Public comments from agents
  • ticket_resolved: Resolution notifications
  • agent_assigned: Agent assignment changes

Background Job Infrastructure

  • CheckAgentTicketUpdates: New background job running every 5 minutes
  • Processes all 8 agent notification types
  • Portal-only filtering (skips users with is_portal_only='1')
  • Per-user interval checking (5-1440 minutes configurable)
  • Query optimization (skips API calls when notification types disabled)
  • Rate limiting (max 20 notifications per user per run)

  • CheckPortalTicketUpdates: Existing job (enhanced)

  • Improved query optimization
  • Better timestamp handling
  • Contact role filtering support

Admin Configuration

  • 3-State Notification Control: Configure each notification type independently
  • Disabled: Not available to users (hidden)
  • Forced: Mandatory for all users (no opt-out)
  • User Choice: Enabled by default, users can opt-out

  • Default Configuration:

  • Portal: All 4 types set to "User Choice"
  • Agent: 6 types "User Choice", 2 types "Forced" (SLA breach, priority critical)

  • Configurable Intervals:

  • Admin default: 5-1440 minutes (recommended: 15 minutes)
  • Per-user override available in personal settings

OCC Commands

  • Enhanced itop:notifications:test-user:
  • New --agent flag for testing agent notifications
  • New --portal flag for testing portal notifications (default)
  • --reset flag to clear timestamps and force full re-check
  • Displays user configuration, enabled notifications, and next execution time

API & Services

  • New ItopAPIService Methods:
  • getAgentTicketIds(): Get tickets assigned to agent
  • getTicketsApproachingDeadline(): SLA warning detection with crossing-time algorithm
  • getTeamAssignmentChanges(): Detect new unassigned team tickets
  • applyCrossingTimeAlgorithm(): Weekend-aware threshold calculation (private)

  • Team Detection:

  • Leverages existing getUserTeams() method
  • Tracks team_id changes via CMDBChangeOp
  • Verifies tickets remain unassigned (agent_id = NULL/0)

Documentation

  • New docs/NOTIFICATIONS.md: Comprehensive 345-line user & admin guide
  • Complete notification type reference with examples
  • Setup instructions for users and administrators
  • Troubleshooting section with common issues
  • FAQ with 12 frequently asked questions
  • Technical architecture details

Changed

Notification Algorithm Improvements

  • SLA Crossing-Time Algorithm: Detects threshold crossings without storing per-ticket state
  • Eliminates duplicate warnings for same SLA level
  • Dynamically calculates when each threshold (24h/12h/4h/1h) will be crossed
  • Only notifies most urgent level if multiple thresholds crossed
  • Weekend expansion: Friday (72h), Saturday (48h) for 24h threshold

  • Notification Deduplication:

  • Unique object keys: ticket_id|subject|timestamp_hash
  • Timestamp filtering prevents re-processing old changes
  • Leverages Nextcloud's native duplicate prevention

User Experience

  • Personal Settings UI: Agent notifications section (only visible to non-portal users)
  • Master toggle for agent notifications
  • Granular per-type checkboxes (only "User Choice" types shown)
  • Info box listing "Forced" notifications that cannot be disabled
  • Integrated with existing portal notification settings

  • Notification Display:

  • Escalating emoji icons based on urgency (SLA warnings)
  • Clear differentiation between public and private comments
  • Team name included in team ticket notifications
  • Clickable links route to appropriate iTop interface (portal vs admin UI)

Technical Details

New Configuration Keys (oc_appconfig)

  • agent_notification_config: JSON map of notification type → state (disabled/forced/user_choice)
  • default_notification_interval: Default check interval for all users (minutes, default: 15)

New User Preferences (oc_preferences)

  • notification_last_agent_check: Unix timestamp of last agent notification check
  • disabled_agent_notifications: JSON array of disabled notification types OR "all"
  • notification_check_interval: Per-user custom interval (minutes)

Architecture Highlights

  • Dual Background Jobs: Portal and Agent jobs run independently
  • CMDBChangeOp Detection: Leverages iTop's built-in change tracking (no external state)
  • Minimal State Storage: Only timestamps per user (no per-ticket data)
  • Query Optimization: Early exit if all notifications disabled, selective API calls
  • Portal-Only Filtering: Agent job automatically skips portal-only users

Performance

  • Per-User Intervals: Users only processed when their interval elapses (reduces API load)
  • Query Optimization: Up to 100% reduction in API calls when notification types disabled
  • Rate Limiting: Max 20 notifications per user per run prevents spam
  • Smart Caching: Team memberships cached for 30 minutes, agent names for 24 hours

Translation Updates

  • Updated en.json, de.json, de_DE.json, fr.json with agent notification types

Breaking Changes

None - Existing portal notifications continue working without changes.

Migration Notes

  • No user action required: Portal notifications work as before
  • Agent detection automatic: Users with is_portal_only='0' gain agent notification access

See Also

<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignatureWBBeIspelxxeSl4ijI5xjEbBhaAP3KUyE5ZDmHGAOynl+pivkOzx524mIVKEiJPFsoA9xoKkhpn88sMOoDHTvT9L2zvlza+mVXcqc4G01pk5mRB55fAIJGsNvx6gPe7lV84F2H7IrZwpXcKFLY6pPmaHuP13Oc86w/TULtFfsDGXkuKRD2Z65Gf9VGLmUoSkGwXTRD+iPYgceP7XrY/J+iEQp91GBFXg+UriU6sQdNrRBUlGZkGrIYeuX1XGghBEWjfrFwwQJYDxtWh9Dp/TTdkkGwo8R3kf+KxsMPu+JxD34DKvU9OOHIIKbVeudFgKF/96qNYoZMh+vYWPRkX1i2e7NCNKLkTCIfXEd7Ocs8o2bjBdts1aGV6L0ujTAqsJU7ekm60g6/7YecTgvHP+Fz45hZ2T5kwVeLeiQuHwyUgDyrNIQ7iVXPDi8UpgU0tacGnOJBlWxopgQdBGUkRUzmjIhmpmDohz18QxiJIOsXMHIlraXKJrwMSzHB+mxMPxokS4KfqPKadGDJr/ziqQPfJk+UnbNCU881NZua2aaTJuVsrBv9KKB1hqerCE3tpz0ktm4ym66Emg2qn5P5I3PR7TFxyKzNDmymaLIEkacYsk1xrX6Jv/2nIwmrD4AwR0x9U0NtwE9FUb4JnWms8TyI81l+qZcIrDlHms1DTv+yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32

Nextcloud 30

iTop Integration 1.4.2
Release Details
UpdatedAug. 11, 2026, 12:29 p.m.
Changelog

🔧 Compatibility Fixes

Fixed

  • Deprecated Exception in Notifier (#6): Notifier::prepare() now throws OCP\Notification\UnknownNotificationException instead of the deprecated plain InvalidArgumentException when a notification is not known to this notifier — Nextcloud ≥ 30 logged a deprecation warning on every notifications API poll (e.g. from mobile clients or Unified Push) whenever other apps' notifications were processed
  • CI Links Missing Object ID: Smart picker and search results for Configuration Items produced iTop URLs with an empty id= parameter (only UserRequest links worked) — CI queries use output_fields=*, which does not include the object id in iTop REST responses; the id is now taken from the response's key property in both the CI search and the preview mapper, so inserted links and previews point to the actual object
  • Custom CI Class Icons on Hardened Servers: Icon auto-discovery relied on the iTop web server exposing HTML directory listings of /datamodels/2.x/ — standard production hardening (Options -Indexes) blocks these, so all custom CI classes silently fell back to the generic Peripheral icon; the installed module list is now fetched via the REST API (ModuleInstallation) and datamodel XML URLs are derived from the iTop naming convention, with directory listings only used as an enhancement when available; a failed discovery (empty definitions map) is no longer persisted for 24h, so icons recover on the next attempt instead of staying pinned to the fallback; on servers that block the datamodel XML files entirely, the admin settings now show a hint on the Custom CI Classes section naming the affected classes and the two remedies (allow the Nextcloud server to read the datamodel XMLs, or upload icons manually); class icons in the admin settings are now clickable to upload or overwrite a custom icon (SVG or PNG, max 256 KB) via the file picker
  • Localized iTop Date Formats: iTop installations with a customized date_and_time_format (e.g. d.m.Y) delivered localized date strings via the REST API, causing "Invalid Date" in the dashboard widgets, wrong ticket sorting, and broken SLA deadline calculations — all REST responses are now normalized to Y-m-d H:i:s regardless of the server's locale configuration (supports ., /, and - separators in day-first, month-first, and year-first order), and the widgets fall back to the raw string instead of rendering "Invalid Date" for unparseable values
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignaturefId/QLAYQEVu5mLv0resY8nlf2XgkKbsnesc/bTdxlCm/xw1eU7oluiCkFaewbOoq9XEgOJbMeklp+bHzVP+L6jcwuU+yitvPV26TfYSSIsKoXk4nly1FAW4U2Dpf/ggx4JhNo7f3Wwop+25hJV7Dm083545eR8YgDHjARP9UmBJHgfJgo1drYHEEUnyGdRtd78GD+7mXJQMM3s8b48RTXvl7qH4F8gykVa/TXAGIBc/quSxG9+N6kxyAVyXT96oxUUOG3mJOfmqHGDplaYYYaWNoJI0AKkErnS2zemTLHbnKPqgx2l6OmA5UnL1JubRnbRyPPHvIGKayhuWvqvD5h90PxeirsAXvH8adM7SnMS8kpgu9zllkxmOrZvthOVOb64M8wUUVBxdHUvVZ7YcGc93GHyFtC0WQ0HbQ+IAtdZkfZz0zPY54TRhtdd9wfPfDCWLmqwIX0E28MhXV+9/bNTGiYd+MM6VHC5EioUxGS97aBC66bXyUt9vbHvA0lGDEPE58PDZCYwlhv3SqyKY1rtN8L73tWgxrgej9zKVQFpbR8az//W5DjZBTm2ef4+I0bL1nLBz1w0C2U69we2QcuV+rQkO+ohLBEN0NqYrmIeP6dEkie+N122wpN3uGN1ryDNew+PTu9DfIFvFBEqn23YRMb/EGypzMHj33aQpJaY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
iTop Integration 1.4.1
Release Details
UpdatedJuly 26, 2026, 2:08 p.m.
Changelog

🔧 Nextcloud 34 Compatibility, Token Setup Guidance & Release Polish

This release restores compatibility with Nextcloud 34, adds in-app guidance for the iTop personal token prerequisites, and fixes several issues found during the pre-release review of v1.4.0.

Added

  • iTop Configuration Hint (Admin Settings): New warning card explaining that agents need personal_tokens_allowed_profiles configured in iTop's Configuration File Editor before they can create personal tokens, including a ready-to-adapt $MyModuleSettings example
  • Personal Token Help (Personal Settings): Info hint shown when the "Personal Tokens" option is missing from the user's iTop account, pointing them to their iTop administrator

Fixed

  • Nextcloud 34 Compatibility: Replaced removed legacy \OC::$server->getURLGenerator() / getDatabaseConnection() calls with the modern \OCP\Server::get() API — the deprecated shortcut methods were removed in Nextcloud 34, causing the admin and personal settings pages to abort mid-render with an Internal Server Error; also raised the supported max-version to 34
  • Broken Admin Settings CSS: Removed a stray unclosed .ticket-type-options rule that swallowed the new config-hint styles and duplicated an existing selector
  • Template Translation Mismatch: Removed embedded HTML from translatable strings in admin and personal settings templates so they match the locale catalogs (German translations now resolve correctly), and fixed a missing %s substitution that displayed literally instead of the instance name
  • Locale File Consistency: Synced 5 new strings from .js locale files into the .json catalogs for en, de, and de_DE (server-side rendering reads .json — the strings would otherwise fall back to English)
  • Slow Custom CI Class Discovery: The ci-class-available endpoint re-crawled the entire iTop datamodel (one HTTP request per module directory and XML file) on every call — the parsed class-definition map and a negative cache for undiscoverable icons are now persisted in appdata with a 24h TTL, reducing repeat loads from ~37s to under a second
  • Class Browser Not Updating: Newly added custom CI classes now disappear from the selection panel immediately after saving instead of remaining listed
  • Debug Leftover: Removed a stray console.log from the dashboard widget and rebuilt the frontend bundle
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignatureDQlRM1dgZb1GdPGTBChvKh27m38BBFoFPHhs7jIws7L07u1co5AeWtowwauS7srSh0q6ReEiu1AyFhqC9XXWMC3vwYRFhlnlP3fzMqA2Xi4UAwI989tAhMoixMa4ecisEEWqZ9fo6FZ4rrPgU5CmWVoosLnrdd3v0G/RsCW54d4QruNxspp1RNXWe5z76pecjPrhkASIe6a+YPPa2LJz56H6TxK4aRYtGQ67ODUKm/Yn+F/ctU4hVuol38f68T2QKL0WH48eYXBV8y8D0u1hYMm3CMVeB4McxTaSkYenMOcYOxbjLTGBS6Nk/KJzvab6gi4xB/VzbvWFu5Kz7i2Va9XabBnUSOBsaBLMYf1uM+62wdxFnUFi9pc+dHpB0Pz+WBmtDA7t/YnSrZQk8KVnbUef5Rd8CIopHxMoI9BKQfMlsuLg6zbNx6hsFN/kN9mbhei3U+VfZ5ryyu3bMpZ2a4VlECvZB1h+V271LXdjNviqVWBwSrJPNOVhaPpEYn49HbOJ4FWF+ZIncMIP/VVcfWNLganCJ49ffzCZUIFffGRbxpzbYvuh8NiWqwVGb841B8QoM27MgTH5dq0HYVaB0o8mcpOYRpLtC933L0vDrldYIzrS0hGP4E+nAU0PYpuigY2bfrswWYuhvrHNF1EcrfqqW8vW2XT8L6jrNUutNXw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
iTop Integration 1.3.1
Release Details
UpdatedNov. 9, 2025, 4:15 p.m.
Changelog

🔒 Security Hardening

This release includes important security enhancements to strengthen the application's defenses.

Changed

  • Replaced direct cURL usage with Nextcloud's IClientService for proper SSL certificate verification
  • Enhanced input validation and sanitization for OQL query parameters
  • Improved data validation for numeric identifiers

Security

  • Resolved issues related to network communication security
  • Strengthened protection against malicious input in database queries
<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignaturelnQXKW/X1W4wzcMo2KRpEnsnPE+X3WtmgNn4YwtcagfRqtmdmXPJ/y+tv3P4FmMqn59c+fXHdKGkA8mx5pAp1xLl4sDw++/toeXrTAdVI6gfMeoNuKGNqrOGTRfxYoQ47zR6Oz7mmw18uDNbF6tzTEmzn3zHrwJFopziUVls2p/ZNk5lAPqpStmYnlZplx1/av4UjtMDQ5oHHArkjrGscon7cXsKHXTDjBQqTm43AgvpmTysqZKOCDRz2R9Ng122tFxw5ykn8ZSe1fT7ZG16x6S+XawsPsQKUQ+BCDAb7QkkauDPKIoZPXbuLwMl4PCQErwmq23shI5hYtrdq7uBo6XZOtjlgW5YQSm3zoAM4lXVpQSoDFn2ogup1pPOGE/flYqhTijCpuOGMzAxdvCz7/IzC9vjBwc6ML3M+2Ohf0TJKFVL4WeRWclCiy4kAy/BpXN88Dq9yiKVOMbiVD1UZuFdyGRiEYYvFrK8zt387nwtJ7yfi73lNKMm1Z0/zqfEPrdrDtGa6PtVABqPhiSsV7SAOZIJr+frx1YoYYRkTnB8EB/MzPU9QebTSduJr4yVw+Rz+4a+4w0bX7zy3DUoRMlBbrluGA2VcMWacbdEVpCrrESdvwwEFMPyjlVh2yrGj2/qGf7YfFBvtQF7aJbod826WLbqAy4rtfkEKOqwZd0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32
iTop Integration 1.3.0
Release Details
UpdatedNov. 8, 2025, 6:12 p.m.
Changelog

✨ Major New Feature: Agent Notifications System

Version 1.3.0 introduces a comprehensive notification system with 12 notification types across two independent tracks: Portal (4 types) and Agent (8 types). The system provides smart, event-driven notifications with weekend-aware SLA warnings and zero duplicate detection.

Added

Agent Notification System (8 Types)

  • Ticket Assignment Tracking:
  • ticket_assigned: New tickets assigned to you from unassigned state
  • ticket_reassigned: Tickets reassigned to you from another agent
  • team_unassigned_new: New unassigned tickets appearing in your team's queue

  • SLA Management:

  • ticket_tto_warning: Time To Own SLA warnings with escalating urgency (⏰ 24h → ⚠️ 12h → 🟠 4h → 🔴 1h)
  • ticket_ttr_warning: Time To Resolve SLA warnings with same escalation pattern
  • ticket_sla_breach: SLA deadline exceeded alerts (🚨 icon)
  • Weekend-Aware Logic: Friday uses 72h threshold, Saturday uses 48h threshold to catch Monday/Tuesday breaches

  • Priority & Comments:

  • ticket_priority_critical: Automatic alerts when tickets escalate to critical priority (🔴 icon)
  • ticket_comment: New comments on your tickets (both public and private log types)

Portal Notification Enhancements

  • Portal notifications (from v1.2.2) now fully integrated with agent system:
  • ticket_status_changed: Status transitions
  • agent_responded: Public comments from agents
  • ticket_resolved: Resolution notifications
  • agent_assigned: Agent assignment changes

Background Job Infrastructure

  • CheckAgentTicketUpdates: New background job running every 5 minutes
  • Processes all 8 agent notification types
  • Portal-only filtering (skips users with is_portal_only='1')
  • Per-user interval checking (5-1440 minutes configurable)
  • Query optimization (skips API calls when notification types disabled)
  • Rate limiting (max 20 notifications per user per run)

  • CheckPortalTicketUpdates: Existing job (enhanced)

  • Improved query optimization
  • Better timestamp handling
  • Contact role filtering support

Admin Configuration

  • 3-State Notification Control: Configure each notification type independently
  • Disabled: Not available to users (hidden)
  • Forced: Mandatory for all users (no opt-out)
  • User Choice: Enabled by default, users can opt-out

  • Default Configuration:

  • Portal: All 4 types set to "User Choice"
  • Agent: 6 types "User Choice", 2 types "Forced" (SLA breach, priority critical)

  • Configurable Intervals:

  • Admin default: 5-1440 minutes (recommended: 15 minutes)
  • Per-user override available in personal settings

OCC Commands

  • Enhanced itop:notifications:test-user:
  • New --agent flag for testing agent notifications
  • New --portal flag for testing portal notifications (default)
  • --reset flag to clear timestamps and force full re-check
  • Displays user configuration, enabled notifications, and next execution time

API & Services

  • New ItopAPIService Methods:
  • getAgentTicketIds(): Get tickets assigned to agent
  • getTicketsApproachingDeadline(): SLA warning detection with crossing-time algorithm
  • getTeamAssignmentChanges(): Detect new unassigned team tickets
  • applyCrossingTimeAlgorithm(): Weekend-aware threshold calculation (private)

  • Team Detection:

  • Leverages existing getUserTeams() method
  • Tracks team_id changes via CMDBChangeOp
  • Verifies tickets remain unassigned (agent_id = NULL/0)

Documentation

  • New docs/NOTIFICATIONS.md: Comprehensive 345-line user & admin guide
  • Complete notification type reference with examples
  • Setup instructions for users and administrators
  • Troubleshooting section with common issues
  • FAQ with 12 frequently asked questions
  • Technical architecture details

Changed

Notification Algorithm Improvements

  • SLA Crossing-Time Algorithm: Detects threshold crossings without storing per-ticket state
  • Eliminates duplicate warnings for same SLA level
  • Dynamically calculates when each threshold (24h/12h/4h/1h) will be crossed
  • Only notifies most urgent level if multiple thresholds crossed
  • Weekend expansion: Friday (72h), Saturday (48h) for 24h threshold

  • Notification Deduplication:

  • Unique object keys: ticket_id|subject|timestamp_hash
  • Timestamp filtering prevents re-processing old changes
  • Leverages Nextcloud's native duplicate prevention

User Experience

  • Personal Settings UI: Agent notifications section (only visible to non-portal users)
  • Master toggle for agent notifications
  • Granular per-type checkboxes (only "User Choice" types shown)
  • Info box listing "Forced" notifications that cannot be disabled
  • Integrated with existing portal notification settings

  • Notification Display:

  • Escalating emoji icons based on urgency (SLA warnings)
  • Clear differentiation between public and private comments
  • Team name included in team ticket notifications
  • Clickable links route to appropriate iTop interface (portal vs admin UI)

Technical Details

New Configuration Keys (oc_appconfig)

  • agent_notification_config: JSON map of notification type → state (disabled/forced/user_choice)
  • default_notification_interval: Default check interval for all users (minutes, default: 15)

New User Preferences (oc_preferences)

  • notification_last_agent_check: Unix timestamp of last agent notification check
  • disabled_agent_notifications: JSON array of disabled notification types OR "all"
  • notification_check_interval: Per-user custom interval (minutes)

Architecture Highlights

  • Dual Background Jobs: Portal and Agent jobs run independently
  • CMDBChangeOp Detection: Leverages iTop's built-in change tracking (no external state)
  • Minimal State Storage: Only timestamps per user (no per-ticket data)
  • Query Optimization: Early exit if all notifications disabled, selective API calls
  • Portal-Only Filtering: Agent job automatically skips portal-only users

Performance

  • Per-User Intervals: Users only processed when their interval elapses (reduces API load)
  • Query Optimization: Up to 100% reduction in API calls when notification types disabled
  • Rate Limiting: Max 20 notifications per user per run prevents spam
  • Smart Caching: Team memberships cached for 30 minutes, agent names for 24 hours

Translation Updates

  • Updated en.json, de.json, de_DE.json, fr.json with agent notification types

Breaking Changes

None - Existing portal notifications continue working without changes.

Migration Notes

  • No user action required: Portal notifications work as before
  • Agent detection automatic: Users with is_portal_only='0' gain agent notification access

See Also

<hr />
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhLJMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkyNjI3WhcNMzYwMjA5MTkyNjI3WjAbMRkwFwYD
VQQDDBBpbnRlZ3JhdGlvbl9pdG9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEApQCMgekkYYpaftV1ZcERCu2ZBVzkGnvDdzFoOEf16K66EYHsszZJHaIF
8rPcLf0yUPS/EXRbsZGkf3XyMBoL+9fLZgnuSABKUhnE8EMPynS50jRkf20Z76pn
leVU5fkWPYEUsUrqI8tfIEfhbWmumIpodkIYv0oRXEeqt0p/kg5gelSaGsOv/WCY
npRO2NbVG5VKKMrIbp8rc+5umRCr/2i0le9g4s0t/YqKfhNc+DuojKgncNO1CZRU
Ua/cPG63JWd0hfFLV/Jpts6tFpVYx/wpgxxTMvPnxnpuTmIVrIMYWQj+X4hJFgTT
++4yq4HvKH+xBwnJsjiuF/GdbRAgq1OOQSCeD+EwdFYRFUsK+20DlptO0pcYF+bX
A3UYERmqksAmENeOHBEPYPqU3ad3wMh5nf+J5xc4LCq/PBo3/rVrPQBhbwwox08I
icXigo7hr8st8XHpkWs+jC5tVoupAw65J0ciQR2kKE88D4ueI7HjxGtkI1LX6m+s
OFwCZZBZF5K9DnqRkHi9DgZhLdXes51brcWeIxKaXyfhWrOoRg1YMmTJiG1dWHlF
Gs+7e+JxQtGs2acB4C5h4uxxdyL1nFTvKgQNJ3haCLr5WHas6M1WDUHKIFnPqCh7
F6GoJK0FV3sGo/wQU44ST3T5GYsoDR/TSgRtDowb26wWBRBU3F8CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAeNUDvib8cBbyvoEqPVQ8j5NyVyPnMYH0mnC+n8h4f0BA
9Bc1VCa4vq6OlFOuVOcJxH+akBCqXaRmyRaV2cs+5aIjIZSTeYuaVt++ZWlDCGIU
wPcRMbZK3ai2TNHL1DPUgxn+4x+Q9oOG/qTjUYn6WcSGvP1WqkQO8IVWT9pt0gRZ
8+Jh85AxDKlmoWLndbvxwGv5F9EzaygPmHMBy8dz/LtcTmxc0jv5NGcZi3oeZSpW
i2GTmKNLTVGtPRGrvwew90h0qoF+fnv8AiuwNAQYhJxwNy9gINp36bhGYi4QUVFe
bqH2ZB7zzCqEiBmcevYLXK8jzUKzNxJa9gEaDV+i9A==
-----END CERTIFICATE-----
SignatureWBBeIspelxxeSl4ijI5xjEbBhaAP3KUyE5ZDmHGAOynl+pivkOzx524mIVKEiJPFsoA9xoKkhpn88sMOoDHTvT9L2zvlza+mVXcqc4G01pk5mRB55fAIJGsNvx6gPe7lV84F2H7IrZwpXcKFLY6pPmaHuP13Oc86w/TULtFfsDGXkuKRD2Z65Gf9VGLmUoSkGwXTRD+iPYgceP7XrY/J+iEQp91GBFXg+UriU6sQdNrRBUlGZkGrIYeuX1XGghBEWjfrFwwQJYDxtWh9Dp/TTdkkGwo8R3kf+KxsMPu+JxD34DKvU9OOHIIKbVeudFgKF/96qNYoZMh+vYWPRkX1i2e7NCNKLkTCIfXEd7Ocs8o2bjBdts1aGV6L0ujTAqsJU7ekm60g6/7YecTgvHP+Fz45hZ2T5kwVeLeiQuHwyUgDyrNIQ7iVXPDi8UpgU0tacGnOJBlWxopgQdBGUkRUzmjIhmpmDohz18QxiJIOsXMHIlraXKJrwMSzHB+mxMPxokS4KfqPKadGDJr/ziqQPfJk+UnbNCU881NZua2aaTJuVsrBv9KKB1hqerCE3tpz0ktm4ym66Emg2qn5P5I3PR7TFxyKzNDmymaLIEkacYsk1xrX6Jv/2nIwmrD4AwR0x9U0NtwE9FUb4JnWms8TyI81l+qZcIrDlHms1DTv+yM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32