Compare commits

...

164 Commits

Author SHA1 Message Date
Molkobain
78d8829d65 N°6131 - Improve robustness of tooltips helper when no DOM element passed to CombodoTooltip::InitTooltipFromMarkup() 2023-03-27 18:04:01 +02:00
Pierre Goiffon
307edd3f7a Fix AttributeDefinitionTest parse error in PHP 7.2 2023-03-21 09:03:54 +01:00
Molkobain
6bf906a72f Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	js/dashboard.js
2023-03-17 15:44:23 +01:00
Molkobain
0f016d7511 N°6112 - Dashboard: Improve robustness by trimming dashlet ID returned by server 2023-03-17 15:37:57 +01:00
Pierre Goiffon
d782987f50 README : fix requirements link 2023-03-14 17:08:55 +01:00
Molkobain
b1fd7716f6 Fix community-licenses.xml 2023-03-14 12:08:54 +01:00
Molkobain
ac7abb3049 Prepare iTop 3.0.3 release
* Increase constants version to 3.0.3
* Increase modules version to 3.0.3
* Update licenses file
2023-03-14 09:55:18 +01:00
Pierre Goiffon
3689f3d026 Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	tests/php-unit-tests/unitary-tests/core/TriggerTest.php
2023-03-10 16:24:17 +01:00
Pierre Goiffon
5ee6223434 N°5893 Add test for \TriggerOnObject::LogException 2023-03-10 16:04:55 +01:00
Molkobain
4bfc1747b7 N°5784 - Fix AttributeOneWayPassword::HasAValue() implementation 2023-03-08 10:54:55 +01:00
Molkobain
15f32bf843 N°5784 - Fix ormPassword::IsEmpty() method 2023-03-08 10:04:59 +01:00
Molkobain
0ba386c0bc N°5784 - Rename unit test file to match convention 2023-03-08 09:47:42 +01:00
Molkobain
0c3cdb202b N°5784 - Fix ormPassword::IsEmpty() using the wrong class property 2023-03-08 09:36:52 +01:00
Molkobain
03ac3d4e7c N°5784 - Fix unit test for PHP 8.2 2023-03-08 09:34:35 +01:00
acognet
6510dc5c51 N°3805 - Collectors not working on iTop 3.0 (cherry picked from 4d7bac89f3 on origin/develop) 2023-03-07 22:58:38 +01:00
Molkobain
01faf39372 Tests: Force Synchro unit tests not to verify SSL certificate as most dev / test envs are self-signed 2023-03-07 22:50:29 +01:00
Molkobain
176e373d6c N°5530 - Fix list of impacted elements (Impact Analysis) not display correctly due to mixup in async JS files loading 2023-03-07 22:03:44 +01:00
Molkobain
a34274b883 N°5784 - PHP 8.0: Fix mandatory attribute not visible in transition form due to bad emptiness test (#379)
* N°5784 - PHP 8.0: Fix mandatory attribute not visible in transition form due to bad emptiness test

* N°5784 - Rework AttributeDefinition::HasAValue() implementation after code review

* N°5784 - Add unit test
2023-03-07 10:16:14 +01:00
Pierre Goiffon
03fb78c38c N°6068 Setup : fix no formatting on error messages 2023-03-06 14:23:21 +01:00
Stephen Abello
c9e656f7a0 N°4460 - Fix configuration editor selected line contrast in Darkmoon 2023-03-06 11:40:32 +01:00
Pierre Goiffon
976566ec71 Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	setup/setuppage.class.inc.php
2023-03-06 11:26:33 +01:00
Pierre Goiffon
d908827787 N°6016 Setup Wizard : fix MissingDependencyException message logged as html in setup.log
Was the case since e831d66b (commit for parent bug N°5090)
Now we are getting the text version in the log (and still the html one on screen)

The unattended install isn't concerned : it just prints back CheckResult returned by \SetupUtils::CheckSelectedModules, with the exception text message ($e->getMessage())
2023-03-06 11:24:46 +01:00
Denis
93c0b98eb7 N°5922 - Fix plus button semantic on ext. key widget (#448)
* N°5922 - Enhance plus button on extkeywidget

* Properly reset the target class when closing the dialog

* Make icon buttons as actual clickable links for BeHat

* Apply suggestions from code review

Review by Guillaume. Thanks!

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>
2023-03-03 14:20:38 +01:00
Stephen Abello
98ab5aa1a4 N°4460 - Fix menu drawer color in Darkmoon 2023-03-03 10:59:49 +01:00
Stephen Abello
f117a2912b N°4460 - Fix minor contrast issue in Darkmoon 2023-03-03 10:50:02 +01:00
Stephen Abello
6594072617 N°4460 - Fix import contrast in Darkmoon 2023-03-03 10:43:39 +01:00
Stephen Abello
6bed56b34e Fix csv import SCSS file 2023-03-03 10:43:17 +01:00
Stephen Abello
94e8151519 N°4460 - Fix popover menu icons and separators style in Darkmoon 2023-03-03 10:24:52 +01:00
Stephen Abello
75b350f638 N°4460 - Fix ace editor style in Darkmoon 2023-03-03 10:06:47 +01:00
Stephen Abello
14cd60dd17 Fix hardcoded white color in markup 2023-03-02 16:36:07 +01:00
Stephen Abello
08f1e5a041 N°4460 - Fix configure this list contrast in Darkmoon 2023-03-02 16:36:07 +01:00
Stephen Abello
4c117d1a33 Fix hardcoded orange in backoffice style 2023-03-02 16:36:07 +01:00
Stephen Abello
f91dfbcf23 N°4460 - Fix datamodel viewer autocomplete contrast in Darkmoon 2023-03-02 16:36:07 +01:00
Stephen Abello
58497b380b Allow to overload datamodel viewer autocomplete style 2023-03-02 16:36:07 +01:00
Stephen Abello
03bff9f2c2 N°4460 - Fix export header contrast in Darkmoon 2023-03-02 16:36:07 +01:00
Stephen Abello
a34d3f91be Fix tabular fields selector SCSS variables 2023-03-02 16:36:06 +01:00
Stephen Abello
05753f174a N°4460 - Fix "load more entries" activity panel buttons contrast in Darkmoon 2023-03-02 16:36:06 +01:00
Stephen Abello
d0c89343b4 N°4460 - Fix skeletons placeholders contrast issue in Darkmoon 2023-03-02 16:36:06 +01:00
Stephen Abello
3021234895 N°4460 - Allow to customize skeleton placeholders colors using CSS3 variables 2023-03-02 16:36:06 +01:00
Stephen Abello
bccdb1bc3a N°4460 - Fix <code> contrast in Darkmoon 2023-03-02 16:36:06 +01:00
Molkobain
143410f4cd Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	core/dbobject.class.php
2023-02-28 15:20:07 +01:00
Pierre Goiffon
4cea418517 N°5893 - Log triggers exception in CRUD stack (#390)
* Log TriggerOnObjectCreate crash

* Log TriggerOnObjectUpdate crash

* Log TriggerOnObjectDelete crash

* Factorize TriggerOnObject log

* \TriggerOnObject::LogException : do not replace not persisted yet object keys
2023-02-28 15:13:28 +01:00
Molkobain
759b1825fe N°5918 - Fix activity panel disappearing when DoCheckToWrite fails 2023-02-28 13:33:47 +01:00
Anne-Catherine
370c1345d9 N°2916 - Import of IPv6 addresses fails when reconciliation is done on the IP (#382) 2023-02-28 12:08:32 +01:00
Anne-Catherine
af8f06c8c3 N°5603 - Autocomplete fails with error for an external key pointing to an abstract class with no friendlyname (#375) 2023-02-27 16:18:36 +01:00
Pierre Goiffon
bfe55183d0 N°6023 Fix error log
Thanks @Hipska !
2023-02-27 15:09:49 +01:00
odain
939771aa15 N°6022 - Make synchro scripts work by http via token authentication with SYNCHRO scopes 2023-02-27 11:07:52 +01:00
Molkobain
b174e4cab3 N°4517 - PHP 8.1: Fix deprecated notice for null value passed to string parameter of native PHP functions 2023-02-24 22:40:17 +01:00
Molkobain
61bd8b6bb4 N°4517 - PHP 8.1: Fix deprecated notice for null value passed to string parameter of native PHP functions 2023-02-24 21:40:10 +01:00
Pierre Goiffon
5c9eb7fa38 N°6020 PHPUnit for \utils::EscapeHtml and EscapedHtmlDecode methods
This will ensure conversion back and forth is working as expected (in other words, parameters to the php functions stays the same in both methods)
2023-02-23 18:56:28 +01:00
Pierre Goiffon
e960a4ad53 N°6023 Fix cannot load SVG files in AttributeImage since 3.0.0 (#449)
Caused by merge error in ddd6bf2

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>
2023-02-23 18:38:03 +01:00
Molkobain
7aad60ed1b Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	composer.json
#	composer.lock
#	lib/composer/autoload_classmap.php
#	lib/composer/autoload_static.php
#	lib/composer/installed.php
#	lib/composer/platform_check.php
#	setup/setuputils.class.inc.php
2023-02-23 16:21:56 +01:00
Molkobain
97965277c7 N°6017 - Update OAuth dependencies 2023-02-23 15:57:32 +01:00
Pierre Goiffon
93aee5883b N°6020 New \utils::EscapedHtmlDecode method 2023-02-23 15:17:46 +01:00
Molkobain
18ed5ed526 N°6019 - Increase PHP min version to 7.1.3 to enable dependencies update 2023-02-23 14:53:48 +01:00
Pierre Goiffon
bbf6476570 Merge remote-tracking branch 'origin/support/2.7' into support/3.0 2023-02-23 12:05:38 +01:00
Pierre Goiffon
94c4f8c929 N°6016 MissingDependencyException : better log message (#355)
The error displayed on screen was already improved (see #280)
This commit improves the log message we can have for example by running unattended install.
2023-02-23 12:04:56 +01:00
Pierre Goiffon
d40cf7fe3b ReOrder LogChannels const 2023-02-23 11:52:19 +01:00
Pierre Goiffon
6997c0fd83 Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	core/log.class.inc.php
2023-02-23 11:47:49 +01:00
Pierre Goiffon
822922df5c N°5588 - Improve PDF export robustness when AttributeImage dimensions cannot be determined (#350)
Can happen for example on SVG images
Now the export won't crash anymore, and we'll get a log (export channel, warning level) with  the object and attribute causing a problem as context

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>
2023-02-23 11:45:29 +01:00
Pierre Goiffon
cb2be0eccd N°5121 New AttributeURL validation use case
In comment as it isn't handled yet
2023-02-23 11:16:50 +01:00
Pierre Goiffon
f55fc8d264 N°6014 Validation pattern for URL : now handles commas in params (#356)
Seen on PRTG URLs

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>
2023-02-23 10:59:38 +01:00
Molkobain
ea2140258c N°5317 - Handle overlapping tables when table cells have fixed widths 2023-02-22 18:57:56 +01:00
Stephen Abello
31f2666941 Merge branch 'support/2.7' into support/3.0
# Conflicts:
#	js/wizardhelper.js
2023-02-22 15:46:13 +01:00
Stephen Abello
cac7e94a67 N°5729 - Fix disabled button in bulk update/transition when picking a value in a drop-down list 2023-02-22 15:42:20 +01:00
Stephen Abello
da02a05fa3 Merge branch 'support/2.7' into support/3.0 2023-02-22 10:18:38 +01:00
Stephen Abello
6d019615d0 N°5865 - Restore DoCheckToWrite error messages in portal 2023-02-22 10:17:34 +01:00
Molkobain
ccdd315357 N°5919 - Add missing linkset descriptions in french and other languages 2023-02-21 22:14:57 +01:00
Eric Espie
9f81e4875a Merge branch 'hotfix/5944_GetClassesForInterface_filter' into support/3.0 2023-02-14 09:16:49 +01:00
Molkobain
4f102d764a Merge remote-tracking branch 'origin/support/2.7' into support/3.0 2023-02-10 23:18:37 +01:00
Molkobain
dbd58cfeb6 Tests: Force RestAPI unit tests not to verify SSL certificate as most dev / test envs are self-signed 2023-02-10 23:07:27 +01:00
Eric Espie
99b7d66cf2 N°5944 - Wrong filter for utils::GetClassesForInterface() 2023-02-03 11:10:37 +01:00
Anne-Catherine
12ef74ec42 N°5849 - Fix wrong encoding of external keys in "Header with statstics" dashlet (#384)
N°5849 - Fix wrong encoding of external keys in "Header with statstics" dashlet #384
2023-01-30 16:06:10 +01:00
Molkobain
3ca4122673 N°5834 - Fix activity panel disappearing when creating a Ticket in 'resolved' state 2023-01-20 11:30:05 +01:00
Pierre Goiffon
efa20e77d0 N°3769 Add data-input-id HTML attribute to fields in a transition form
Was only present in object edit mode :(
2023-01-19 17:53:14 +01:00
Eric Espie
effc4141c7 N°5900 - DB integrity analysis crashes when too many errors - module version 2023-01-19 09:30:37 +01:00
Eric Espie
f75a51d59e N°5900 - DB integrity analysis crashes when too many errors - limit the results to 100 to avoid memory errors 2023-01-19 08:51:02 +01:00
Eric Espie
9dc54d6e4c N°5901 - Warnings in Details part of file system Tab 2023-01-18 16:39:40 +01:00
Eric Espie
640b1b9176 ✏️ Added missing use of class Toolbar 2023-01-18 16:38:16 +01:00
Molkobain
3459dc5997 N°5897 - Improve deprecated logs relevance for PHP "trigger_deprecation" 2023-01-17 16:29:25 +01:00
Pierre Goiffon
de7c9d965e 💡 PHPDoc in \DeprecatedCallsLog 2023-01-17 15:37:23 +01:00
Molkobain
4c127b6f61 Revert "N°4517 - PHP 8.1: Fix return type hint for iterable classes"
This reverts commit 61be903eb2.
2023-01-16 14:38:20 +01:00
Molkobain
61be903eb2 N°4517 - PHP 8.1: Fix return type hint for iterable classes 2023-01-16 14:21:00 +01:00
Pierre Goiffon
a50ed02057 N°4660 Fix OQLTest 2023-01-16 11:39:38 +01:00
Pierre Goiffon
0a7c8f9fd1 Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	tests/php-unit-tests/unitary-tests/core/OQLTest.php
#	tests/php-unit-tests/unitary-tests/core/iTopConfigParserTest.php
#	tests/php-unit-tests/unitary-tests/webservices/RestTest.php
2023-01-16 11:36:02 +01:00
Pierre Goiffon
f65e14397c N°4660 Fix permissions changes in tests 2023-01-16 11:22:23 +01:00
Pierre Goiffon
d7b94fb123 N°3769 Add data-input-type HTML attribute to fields in a transition form
Was only present in object edit mode :(
2023-01-12 16:40:31 +01:00
Pierre Goiffon
80a9ded404 Merge remote-tracking branch 'origin/support/2.7' into support/3.0 2023-01-12 10:43:09 +01:00
Pierre Goiffon
c696a81c3a N°5821 JenkinsFile : introduce buildDiscarder 2023-01-12 10:42:06 +01:00
Pierre Goiffon
b9ed00d53f N°4660 Fix iTopConfigParserTest setting permissions of iTop config file
Alternative method to restore config file
chmod cannot be used with +w
In \Config::WriteToFile we are using fopen with mode=w, so using the same
In consequence we are not modifying anymore the iTop config file permissions \o/
2023-01-11 16:04:21 +01:00
Molkobain
c4508ea80c N°4660 - Fix data synchro unit test failure due to another test not restoring correct user permissions on conf file 2023-01-11 14:26:23 +01:00
Molkobain
16390c9b00 N°5857 - PHPUnit: Replace usage of deprecated assetContains with assertStringContainsString 2023-01-11 13:26:54 +01:00
Molkobain
1271a895d1 N°5857 - PHPUnit: Replace usage of deprecated assetContains with assertStringContainsString 2023-01-11 11:59:01 +01:00
Eric Espie
030f1e2463 Fix Status test 2023-01-11 10:28:32 +01:00
Pierre Goiffon
5729d6a9cd 🎨 StatusIncTest : fix phpdoc, replace @expectedException 2023-01-11 10:02:59 +01:00
Molkobain
a5efef900c N°5608 - Harmonize namespaces and merge duplicated test files 2023-01-10 23:02:54 +01:00
Molkobain
c851a10982 Merge remote-tracking branch 'origin/support/2.7' into support/3.0 2023-01-10 22:49:13 +01:00
Molkobain
845adf43c6 N°5608 - Harmonize namespaces and merge duplicated test files 2023-01-10 22:36:35 +01:00
Molkobain
5916e4ea39 N°5608 - Ensure both old & new tests structure are ran for extensions for backward compatibility 2023-01-10 22:03:40 +01:00
Molkobain
7f37de777e N°5608 - Fix unit tests following restructuring Part III
* Missed a usage of "use_legacy_search" conf param on the last commit
* Fix log tests which didn't moved correctly from Git PoV 😕
2023-01-10 21:11:10 +01:00
Molkobain
bcf880f327 N°5608 - Fix unit tests following restructuring Part II
"use_legacy_search" conf param was removed some time ago
2023-01-10 19:23:54 +01:00
Thomas Casteleyn
b593beb8c7 N°5867 Display binary data size in SynchroReplica details (#286) 2023-01-10 18:53:00 +01:00
Molkobain
6aa9aa2831 N°5608 - Fix unit tests following restructuring Part I 2023-01-10 18:15:53 +01:00
Molkobain
d177ee4a7f Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	tests/manual-visual-tests/Backoffice/RenderAllUiBlocks.php
#	tests/php-unit-tests/ItopDataTestCase.php
#	tests/php-unit-tests/ItopTestCase.php
#	tests/php-unit-tests/integration-tests/dictionaries-test/fr.dictionary.itop.core.KO.wrong_php
#	tests/php-unit-tests/integration-tests/dictionaries-test/fr.dictionary.itop.core.OK.php
#	tests/php-unit-tests/integration-tests/iTopModulesPhpVersionChecklistTest.php
#	tests/php-unit-tests/integration-tests/iTopXmlVersionChecklistTest.php
#	tests/php-unit-tests/phpunit.xml.dist
#	tests/php-unit-tests/unitary-tests/application/SCSSCompilationTest.php
#	tests/php-unit-tests/unitary-tests/application/Session/SessionTest.php
#	tests/php-unit-tests/unitary-tests/application/ThemeHandlerTest.php
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/DO_NOT_CHANGE.css-variables.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/DO_NOT_CHANGE.light-grey.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/README.md
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/_included_file3.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/cross_reference1.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/cross_reference2.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/feature1/_feature1.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/included_file1.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/included_scss/included_file2.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/included_scss/included_file4.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/multi_imports.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/shortcut.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/shortcut2.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/simple_import.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/simple_import2.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/typography.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/css/ui-lightness/DO_NOT_CHANGE.jqueryui.scss
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/css/ui-lightness/images/ui-icons_1c94c4_256x240.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/css/ui-lightness/images/ui-icons_222222_256x240.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/css/ui-lightness/images/ui-icons_E87C1E_256x240.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/css/ui-lightness/images/ui-icons_F26522_256x240.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/css/ui-lightness/images/ui-icons_ffffff_256x240.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/ac-background.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/actions_right.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/bg.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/breadcrumb-separator.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/calendar.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/delete.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/desc.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/error.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/eye-closed-555.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/eye-closed-fff.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/eye-open-555.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/eye-open-fff.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/full-screen.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/green-header.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/green-square.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/indicator.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/info-mini.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/minus.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/ok.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/orange-header.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/plus.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/red-header.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/truncated.png
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/tv-collapsable-last.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/tv-collapsable.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/tv-expandable-last.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/tv-expandable.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/tv-item-last.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/testimages/images/tv-item.gif
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/themes/basque-red/main.css
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/themes/basque-red/main_imagemodified.css
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/themes/basque-red/main_importmodified.css
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/themes/basque-red/main_stylesheet.css
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/themes/basque-red/main_testcompilethemes.css
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/themes/basque-red/main_varchanged.css
#	tests/php-unit-tests/unitary-tests/application/theme-handler/expected/themes/basque-red/theme-parameters.json
#	tests/php-unit-tests/unitary-tests/application/theme-handler/getimages/expected-getimages.json
#	tests/php-unit-tests/unitary-tests/application/theme-handler/getimages/test-getimages.scss
#	tests/php-unit-tests/unitary-tests/core/ActionEmailTest.php
#	tests/php-unit-tests/unitary-tests/core/AttributeDefTest.inc.php
#	tests/php-unit-tests/unitary-tests/core/AttributeURLDefaultPattern.php
#	tests/php-unit-tests/unitary-tests/core/AttributeURLTest.php
#	tests/php-unit-tests/unitary-tests/core/BulkChangeTest.inc.php
#	tests/php-unit-tests/unitary-tests/core/CSVParserTest.php
#	tests/php-unit-tests/unitary-tests/core/DBObjectTest.php
#	tests/php-unit-tests/unitary-tests/core/DBSearchAddConditionPointingTo.php
#	tests/php-unit-tests/unitary-tests/core/ExpressionEvaluateTest.php
#	tests/php-unit-tests/unitary-tests/core/GetSelectFilterTest.php
#	tests/php-unit-tests/unitary-tests/core/InlineImageTest.php
#	tests/php-unit-tests/unitary-tests/core/Log/ExceptionLogTest.php
#	tests/php-unit-tests/unitary-tests/core/Log/ExceptionLogTest/Exceptions.php
#	tests/php-unit-tests/unitary-tests/core/Log/LogAPITest.php
#	tests/php-unit-tests/unitary-tests/core/Log/LogFileNameBuilderTest.php
#	tests/php-unit-tests/unitary-tests/core/LogAPITest.php
#	tests/php-unit-tests/unitary-tests/core/LogFileNameBuilderTest.php
#	tests/php-unit-tests/unitary-tests/core/MetaModelTest.php
#	tests/php-unit-tests/unitary-tests/core/OQLTest.php
#	tests/php-unit-tests/unitary-tests/core/UniquenessConstraintTest.php
#	tests/php-unit-tests/unitary-tests/core/XMLDataLoaderTest.php
#	tests/php-unit-tests/unitary-tests/core/dictApcuTest.php
#	tests/php-unit-tests/unitary-tests/core/dictTest.php
#	tests/php-unit-tests/unitary-tests/core/ormCaseLogTest.php
#	tests/php-unit-tests/unitary-tests/core/ormPasswordTest.php
#	tests/php-unit-tests/unitary-tests/core/ormStyleTest.php
#	tests/php-unit-tests/unitary-tests/setup/MFCompilerTest.php
#	tests/php-unit-tests/unitary-tests/setup/SubMFCompiler.php
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/1.7_to_1.6.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/1.7_to_1.6.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/1.6_to_1.7_2.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/1.6_to_1.7_2.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/1.7.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/1.7_to_1.6.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/1.7_to_1.6.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/1.7_to_1.6_2.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/1.7_to_1.6_2.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/1.7_to_3.0.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/1.7_to_3.0.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/3.0_to_1.7.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/3.0_to_1.7.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/Bug_4569.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/Convert-samples/Bug_4569.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_deleted_to_deleted.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_deleted_to_deleted.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_deleted_to_in-definition.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_deleted_to_in-definition.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_deleted_to_not-in-definition.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_deleted_to_not-in-definition.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_in-definition_to_deleted.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_in-definition_to_deleted.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_in-definition_to_in-definition.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_in-definition_to_in-definition.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_in-definition_to_not-in-definition.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_in-definition_to_not-in-definition.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_not-in-definition_to_deleted.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_not-in-definition_to_deleted.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_not-in-definition_to_in-definition.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_not-in-definition_to_in-definition.input.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_not-in-definition_to_not-in-definition.expected.xml
#	tests/php-unit-tests/unitary-tests/setup/iTopDesignFormat/MoveNode-samples/from_not-in-definition_to_not-in-definition.input.xml
#	tests/php-unit-tests/unitary-tests/setup/ressources/datamodels/datamodel-branding.xml
#	tests/php-unit-tests/unitary-tests/sources/application/Helper/WebResourcesHelperTest.php
#	tests/php-unit-tests/unitary-tests/sources/application/status/StatusIncTest.php
#	tests/php-unit-tests/unitary-tests/sources/application/status/status.php
#	tests/php-unit-tests/unitary-tests/synchro/DataSynchroTest.php
2023-01-10 15:27:44 +01:00
Molkobain
fbc0a898ae N°5608 - Move test files to corresponding directories after branch rebase 2023-01-10 12:11:12 +01:00
Molkobain
36f8e58e25 N°5608 - Use new ItopTestCase::RequireOnceXXX in unit tests 2023-01-10 12:11:12 +01:00
Molkobain
6a7dbb06b0 N°5608 - Add methods to require_once an iTop or a unit test file to avoid crashes when tests dir is moved 2023-01-10 12:11:12 +01:00
Molkobain
5721a324c1 Tests: Always display test status for better feedback 2023-01-06 22:30:09 +01:00
Molkobain
7de6c72154 Tests: Rename provider method name to match convention 2023-01-06 22:30:09 +01:00
Molkobain
c0cee02351 N°5608 - Factorize all core modules tests to a single test suite 2023-01-06 22:30:09 +01:00
Molkobain
bb674fb873 N°5608 - Move/rename "status" unit tests to match their counterpart location/name 2023-01-06 22:30:09 +01:00
Molkobain
6136eadd31 N°5608 - Fix some broken require paths since move/rename 2023-01-06 22:30:08 +01:00
Molkobain
87cb73c038 N°5608 - Rename "test" folder to "tests" to better match conventions 2023-01-06 22:30:08 +01:00
Molkobain
11d8547cef N°5608 - Move/rename unit tests to match their counterpart location/name 2023-01-06 22:30:08 +01:00
Molkobain
0998c73a1a N°5608 - Add README files 2023-01-06 22:30:07 +01:00
Molkobain
471f66649a N°5608 - Rename unitary test folders for better understanding 2023-01-06 22:30:07 +01:00
Molkobain
e8bf9cf688 N°5608 - Move "twig" PHP unit test to new folder
Notice: Test was not working, still not working
2023-01-06 22:30:07 +01:00
Molkobain
4f88a0e7d2 N°5608 - Move legacy PHP unit tests (not run by CI) to a dedicated folder 2023-01-06 22:30:07 +01:00
Molkobain
c6b0e273e6 N°5608 - Rename "VisualTests" folder to match new convention 2023-01-06 22:30:07 +01:00
Molkobain
d9539f9d01 N°5608 - Add comments to main autoloader 2023-01-06 22:30:06 +01:00
Molkobain
a3e309acb5 N°5608 - Revert "authent-local" test suite to its original rank as it is crashing the CI 🤔 2023-01-06 22:30:06 +01:00
Molkobain
c06cbfd4a9 N°5608 - Rename "coreExtensions" test suite to correct datamodel module (authent-local) 2023-01-06 22:30:06 +01:00
Molkobain
1d7e4e1a42 N°5608 - Move unit tests to a dedicated folder and start reorganizing to match iTop folder structure 2023-01-06 22:30:06 +01:00
Eric Espie
524e65a29b 📝 fix PHPDoc 2023-01-05 09:23:48 +01:00
Eric Espie
df7d7c877d N°5490 - PHP 8.0: Fix crash of bulk modify 2023-01-03 08:50:18 +01:00
Eric Espie
4bcad431aa 📝 Change packages for auto-documentation 2022-12-29 15:59:59 +01:00
Eric Espie
5fe32aac15 Merge branch 'support/2.7' into support/3.0
# Conflicts:
#	application/applicationextension.inc.php
2022-12-29 12:40:37 +01:00
Eric Espie
88d9a29599 📝 Change packages for auto-documentation 2022-12-29 12:38:31 +01:00
Eric Espie
92a36dcfdd 📝 Change packages for auto-documentation 2022-12-29 12:24:56 +01:00
Eric Espie
23b4d4cb6b Merge branch 'support/2.7' into support/3.0 2022-12-28 09:52:52 +01:00
Eric Espie
b37e74b407 📝 Change packages for auto-documentation 2022-12-28 09:51:46 +01:00
Pierre Goiffon
cb6232cc05 Merge remote-tracking branch 'origin/support/2.7' into support/3.0 2022-12-15 15:36:43 +01:00
Pierre Goiffon
0d49c605e2 💡 Fix \DBSearch::FromOQL phpdoc + modifiers order 2022-12-15 15:36:14 +01:00
Molkobain
6d47b0f4f8 N°4517 - PHP 8.0: Fix undefined array key due to type cast being done before coalesce 2022-12-14 20:34:40 +01:00
Eric Espie
e1c28a5c22 Merge branch 'support/2.7' into support/3.0 2022-12-14 15:45:27 +01:00
Eric Espie
296ee019a0 Merge branch 'support/2.7' into support/3.0 - nothing to do 2022-12-14 15:44:05 +01:00
Molkobain
7c2f8f4d93 N°5765 - Setup: Never cache folder permissions test response (#374) 2022-12-14 09:33:54 +01:00
Pierre Goiffon
1f76ff940d N°5797 Replace wrong config load (#338) 2022-12-13 18:23:09 +01:00
Eric Espie
bb26e48d38 Update version to next release 2.7.9 2022-12-12 16:19:42 +01:00
Eric Espie
26042b990f Merge branch 'support/2.7' into support/3.0
# Conflicts:
#	datamodels/2.x/itop-portal-base/portal/src/Twig/AppExtension.php
2022-12-08 08:34:16 +01:00
Eric Espie
cf433f2f80 N°5725 - Twig update 'filter', 'map' and 'reduce' filters 2022-12-08 08:25:11 +01:00
Eric Espie
ae94e58a43 N°5725 - Twig update 'filter', 'map' and 'reduce' filters 2022-12-07 13:53:15 +01:00
Eric Espie
f66692d5cf Merge branch 'support/2.7' into support/3.0
# Conflicts:
#	datamodels/2.x/itop-portal-base/portal/src/Twig/AppExtension.php
2022-12-07 13:44:54 +01:00
Eric Espie
2b917f6647 Merge branch 'support/2.7' into support/3.0
# Conflicts:
#	datamodels/2.x/itop-oauth-client/src/Service/PopupMenuExtension.php
2022-12-07 13:42:36 +01:00
Eric Espie
cda017fa4f N°5725 - Twig update 'filter', 'map' and 'reduce' filters 2022-12-07 13:37:52 +01:00
Pierre Goiffon
dad22f6f83 📄 Update Licenses 2022-12-07 11:04:33 +01:00
Eric Espie
9474f43d61 Merge branch 'support/2.7' into support/3.0
# Conflicts:
#	datamodels/2.x/itop-oauth-client/src/Service/PopupMenuExtension.php
2022-12-02 11:20:31 +01:00
Eric Espie
9077f7ba37 N°5430 - OAuth authentication : customize redirect landing URL - remove unnecessary parameter to JS function OAuthConnect 2022-12-02 11:17:01 +01:00
Eric Espie
4d365c8a44 Merge branch 'support/2.7' into support/3.0 2022-12-02 09:26:40 +01:00
Eric Espie
957ff40f30 N°5155 - Email by SMTP with self-signed certificate (changed default values to the previous behaviour) 2022-12-02 09:25:53 +01:00
Eric Espie
7bb12c35ea Merge branch 'support/2.7' into support/3.0
# Conflicts:
#	core/config.class.inc.php
2022-11-30 14:27:32 +01:00
Eric Espie
aff9c7748b N°5155 - Email by SMTP with self-signed certificate 2022-11-30 14:18:11 +01:00
Eric Espie
e518d34bc9 N°5553 - OAuth 2 : Hide Client Secret
* client_id is now 255 chars (AttributeString)
 * client_secret is now 64 chars (AttributePassword) and cannot be anymore in the uniqueness rules
 * The modification of redirect_url, client_id or client_secret change the status to inactive and generate a session message to ask for token regeneration
2022-11-30 14:15:37 +01:00
Eric Espie
51a305b445 N°5725 - Twig update 'filter', 'map' and 'reduce' filters (twig functions signature changed) 2022-11-30 13:40:44 +01:00
Eric Espie
5577f4a62e Merge remote-tracking branch 'origin/support/2.7' into support/3.0 2022-11-30 13:36:18 +01:00
Eric Espie
f0141530b9 N°5725 - Twig update 'filter', 'map' and 'reduce' filters (+1 squashed commits)
Squashed commits:

[00148dec5] N°5725 - Twig update 'filter', 'map' and 'reduce' filters
2022-11-30 13:28:33 +01:00
Pierre Goiffon
92a802947d Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	setup/wizardsteps.class.inc.php
2022-11-29 19:02:51 +01:00
xtophe38
ce5096a896 N°5758 Change setup test for GDPR consent (#336)
We were using SetupUtils::IsProductVersion, but this was blocking for certain packages like TeemIP standalone.
After this change we are now relying on a new method : \SetupUtils::IsConnectableToITopHub. It will check the iTop Hub Connector module presence instead.
2022-11-29 19:00:17 +01:00
Pierre Goiffon
5efd45eafc Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	pages/ajax.render.php
2022-11-29 18:18:24 +01:00
Pierre Goiffon
23e0ed5e56 N°4449 Test for FPD detection in RuntimeDashboard 2022-11-29 18:10:17 +01:00
Pierre Goiffon
d412a52fcc N°4449 Fix FPD in dashboard export/import 2022-11-29 18:10:17 +01:00
Molkobain
cf5745b985 Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	core/pdfbulkexport.class.inc.php
2022-11-26 00:09:10 +01:00
Molkobain
3e18ad590f Fix image attributes not being visible in PDF exports 2022-11-25 19:30:35 +01:00
Eric Espie
b174aa9aeb Merge remote-tracking branch 'origin/support/2.7' into support/3.0
# Conflicts:
#	datamodels/2.x/itop-oauth-client/vendor/composer/InstalledVersions.php
#	datamodels/2.x/itop-oauth-client/vendor/composer/installed.php
2022-11-25 17:37:01 +01:00
491 changed files with 5156 additions and 6032 deletions

4
.gitignore vendored
View File

@@ -19,7 +19,7 @@
# composer reserver directory, from sources, populate/update using "composer install"
vendor/*
test/vendor/*
tests/*/vendor/*
# all conf but listing prevention
/conf/**
@@ -46,7 +46,7 @@ test/vendor/*
!/log/web.config
# PHPUnit cache file
/test/.phpunit.result.cache
/tests/php-unit-tests/.phpunit.result.cache
# Jetbrains

8
Jenkinsfile vendored
View File

@@ -1,6 +1,14 @@
def infra
node(){
properties([
buildDiscarder(
logRotator(
daysToKeepStr: "28",
numToKeepStr: "500")
)
])
checkout scm
infra = load '/var/lib/jenkins/workspace/itop-test-infra_master/src/Infra.groovy'

View File

@@ -37,7 +37,7 @@ iTop also offers mass import tools to help you being even more efficient.
- [iTop Forums][1]: community support
- [iTop Tickets][2]: for feature requests and bug reports
- [Releases download][3]
- [Software requirements][4]
- [iTop requirements][4]
- [Documentation][5] covering both iTop and its official extensions
- [iTop Hub][6] : discover and install extensions !
@@ -45,7 +45,7 @@ iTop also offers mass import tools to help you being even more efficient.
[1]: https://sourceforge.net/p/itop/discussion/
[2]: https://sourceforge.net/p/itop/tickets/
[3]: https://sourceforge.net/projects/itop/files/itop/
[4]: https://www.itophub.io/wiki/page?id=latest:install:upgrading_itop
[4]: https://www.itophub.io/wiki/page?id=latest:install:requirements
[5]: https://www.itophub.io/wiki
[6]: https://store.itophub.io/en_US/

View File

@@ -30,9 +30,9 @@ require_once(APPROOT.'application/newsroomprovider.class.inc.php');
* You may implement such interfaces in a module file (e.g. main.mymodule.php)
*
* @api
* @package LoginExtensibilityAPI
* @copyright Copyright (C) 2010-2021 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
* @package Extensibility
* @since 2.7.0
*/
interface iLoginExtension
@@ -40,12 +40,16 @@ interface iLoginExtension
/**
* Return the list of supported login modes for this plugin
*
* @api
*
* @return array of supported login modes
*/
public function ListSupportedLoginModes();
}
/**
* @api
* @package LoginExtensibilityAPI
* @since 2.7.0
*/
interface iLoginFSMExtension extends iLoginExtension
@@ -57,6 +61,7 @@ interface iLoginFSMExtension extends iLoginExtension
* if LoginWebPage::LOGIN_FSM_RETURN_OK is returned then the login is OK and terminated
* if LoginWebPage::LOGIN_FSM_RETURN_IGNORE is returned then the FSM will proceed to next plugin or state
*
* @api
* @param string $sLoginState (see LoginWebPage::LOGIN_STATE_...)
* @param int $iErrorCode (see LoginWebPage::EXIT_CODE_...)
*
@@ -66,6 +71,8 @@ interface iLoginFSMExtension extends iLoginExtension
}
/**
* @api
* @package LoginExtensibilityAPI
* @since 2.7.0
*/
abstract class AbstractLoginFSMExtension implements iLoginFSMExtension
@@ -112,6 +119,7 @@ abstract class AbstractLoginFSMExtension implements iLoginFSMExtension
/**
* Initialization
*
* @api
* @param int $iErrorCode (see LoginWebPage::EXIT_CODE_...)
*
* @return int LoginWebPage::LOGIN_FSM_RETURN_ERROR, LoginWebPage::LOGIN_FSM_RETURN_OK or LoginWebPage::LOGIN_FSM_RETURN_IGNORE
@@ -125,6 +133,7 @@ abstract class AbstractLoginFSMExtension implements iLoginFSMExtension
* Detect login mode explicitly without respecting configured order (legacy mode)
* In most case do nothing here
*
* @api
* @param int $iErrorCode (see LoginWebPage::EXIT_CODE_...)
*
* @return int LoginWebPage::LOGIN_FSM_RETURN_ERROR, LoginWebPage::LOGIN_FSM_RETURN_OK or LoginWebPage::LOGIN_FSM_RETURN_IGNORE
@@ -141,6 +150,7 @@ abstract class AbstractLoginFSMExtension implements iLoginFSMExtension
* 1 - display login form
* 2 - read the values posted by the user
*
* @api
* @param int $iErrorCode (see LoginWebPage::EXIT_CODE_...)
*
* @return int LoginWebPage::LOGIN_FSM_RETURN_ERROR, LoginWebPage::LOGIN_FSM_RETURN_OK or LoginWebPage::LOGIN_FSM_RETURN_IGNORE
@@ -154,6 +164,7 @@ abstract class AbstractLoginFSMExtension implements iLoginFSMExtension
* Control the validity of the data provided by the user
* Automatic user provisioning can be done here
*
* @api
* @param int $iErrorCode (see LoginWebPage::EXIT_CODE_...)
*
* @return int LoginWebPage::LOGIN_FSM_RETURN_ERROR, LoginWebPage::LOGIN_FSM_RETURN_OK or LoginWebPage::LOGIN_FSM_RETURN_IGNORE
@@ -164,6 +175,7 @@ abstract class AbstractLoginFSMExtension implements iLoginFSMExtension
}
/**
* @api
* @param int $iErrorCode (see LoginWebPage::EXIT_CODE_...)
*
* @return int LoginWebPage::LOGIN_FSM_RETURN_ERROR, LoginWebPage::LOGIN_FSM_RETURN_OK or LoginWebPage::LOGIN_FSM_RETURN_IGNORE
@@ -174,6 +186,7 @@ abstract class AbstractLoginFSMExtension implements iLoginFSMExtension
}
/**
* @api
* @param int $iErrorCode (see LoginWebPage::EXIT_CODE_...)
*
* @return int LoginWebPage::LOGIN_FSM_RETURN_ERROR, LoginWebPage::LOGIN_FSM_RETURN_OK or LoginWebPage::LOGIN_FSM_RETURN_IGNORE
@@ -184,6 +197,7 @@ abstract class AbstractLoginFSMExtension implements iLoginFSMExtension
}
/**
* @api
* @param int $iErrorCode (see LoginWebPage::EXIT_CODE_...)
*
* @return int LoginWebPage::LOGIN_FSM_RETURN_ERROR, LoginWebPage::LOGIN_FSM_RETURN_OK or LoginWebPage::LOGIN_FSM_RETURN_IGNORE
@@ -194,6 +208,7 @@ abstract class AbstractLoginFSMExtension implements iLoginFSMExtension
}
/**
* @api
* @param int $iErrorCode (see LoginWebPage::EXIT_CODE_...)
*
* @return int LoginWebPage::LOGIN_FSM_RETURN_ERROR, LoginWebPage::LOGIN_FSM_RETURN_OK or LoginWebPage::LOGIN_FSM_RETURN_IGNORE
@@ -205,22 +220,28 @@ abstract class AbstractLoginFSMExtension implements iLoginFSMExtension
}
/**
* @api
* @package LoginExtensibilityAPI
* @since 2.7.0
*/
interface iLogoutExtension extends iLoginExtension
{
/**
* Execute all actions to log out properly
* @api
*/
public function LogoutAction();
}
/**
* @api
* @package UIExtensibilityAPI
* @since 2.7.0
*/
interface iLoginUIExtension extends iLoginExtension
{
/**
* @api
* @return LoginTwigContext
*/
public function GetTwigContext();
@@ -228,18 +249,20 @@ interface iLoginUIExtension extends iLoginExtension
/**
* @api
* @package Extensibility
* @package PreferencesExtensibilityAPI
* @since 2.7.0
*/
interface iPreferencesExtension
{
/**
* @api
* @param \WebPage $oPage
*
*/
public function DisplayPreferences(WebPage $oPage);
/**
* @api
* @param \WebPage $oPage
* @param string $sOperation
*
@@ -252,7 +275,7 @@ interface iPreferencesExtension
* Extend this class instead of implementing iPreferencesExtension if you don't need to overload all methods
*
* @api
* @package Extensibility
* @package PreferencesExtensibilityAPI
* @since 2.7.0
*/
abstract class AbstractPreferencesExtension implements iPreferencesExtension
@@ -298,7 +321,7 @@ abstract class AbstractPreferencesExtension implements iPreferencesExtension
* A recommended pattern is to cache data by the mean of static members.
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
*/
interface iApplicationUIExtension
{
@@ -320,6 +343,7 @@ interface iApplicationUIExtension
* }
* </code>
*
* @api
* @param DBObject $oObject The object being displayed
* @param WebPage $oPage The output context
* @param boolean $bEditMode True if the edition form is being displayed
@@ -333,6 +357,7 @@ interface iApplicationUIExtension
*
* The method is called rigth after all the tabs have been displayed
*
* @api
* @param DBObject $oObject The object being displayed
* @param WebPage $oPage The output context
* @param boolean $bEditMode True if the edition form is being displayed
@@ -347,6 +372,7 @@ interface iApplicationUIExtension
* The method is called after the changes from the standard form have been
* taken into account, and before saving the changes into the database.
*
* @api
* @param DBObject $oObject The object being edited
* @param string $sFormPrefix Prefix given to the HTML form inputs
*
@@ -361,6 +387,7 @@ interface iApplicationUIExtension
* javascript into the edition form, and if that code requires to store temporary data
* (this is the case when a file must be uploaded).
*
* @api
* @param string $sTempId Unique temporary identifier made of session_id and transaction_id. It identifies the object in a unique way.
*
* @return void
@@ -372,6 +399,7 @@ interface iApplicationUIExtension
*
* Sorry, the verb has been reserved. You must implement it, but it is not called as of now.
*
* @api
* @param DBObject $oObject The object being displayed
*
* @return string[] desc
@@ -383,6 +411,7 @@ interface iApplicationUIExtension
*
* Sorry, the verb has been reserved. You must implement it, but it is not called as of now.
*
* @api
* @param DBObject $oObject The object being displayed
*
* @return string Path of the icon, relative to the modules directory.
@@ -402,6 +431,7 @@ interface iApplicationUIExtension
* * HILIGHT_CLASS_OK
* * HILIGHT_CLASS_NONE
*
* @api
* @param DBObject $oObject The object being displayed
*
* @return integer The value representing the mood of the object
@@ -428,6 +458,7 @@ interface iApplicationUIExtension
*
* See also iPopupMenuExtension for greater flexibility
*
* @api
* @param DBObjectSet $oSet A set of persistent objects (DBObject)
*
* @return array
@@ -439,7 +470,7 @@ interface iApplicationUIExtension
* Extend this class instead of implementing iApplicationUIExtension if you don't need to overload
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
* @since 2.7.0
*/
abstract class AbstractApplicationUIExtension implements iApplicationUIExtension
@@ -513,7 +544,7 @@ abstract class AbstractApplicationUIExtension implements iApplicationUIExtension
* or through the GUI.
*
* @api
* @package Extensibility
* @package ORMExtensibilityAPI
*/
interface iApplicationObjectExtension
{
@@ -526,6 +557,7 @@ interface iApplicationObjectExtension
* If the extension returns false, then the framework will perform the usual evaluation.
* Otherwise, the answer is definitively "yes, the object has changed".
*
* @api
* @param \cmdbAbstractObject $oObject The target object
*
* @return boolean True if something has changed for the target object
@@ -538,6 +570,7 @@ interface iApplicationObjectExtension
* The GUI calls this verb and reports any issue.
* Anyhow, this API can be called in other contexts such as the CSV import tool.
*
* @api
* @param \cmdbAbstractObject $oObject The target object
*
* @return string[] A list of errors message. An error message is made of one line and it can be displayed to the end-user.
@@ -551,6 +584,7 @@ interface iApplicationObjectExtension
*
* Please not that it is not possible to cascade deletion by this mean: only stopper issues can be handled.
*
* @api
* @param \cmdbAbstractObject $oObject The target object
*
* @return string[] A list of errors message. An error message is made of one line and it can be displayed to the end-user.
@@ -566,6 +600,7 @@ interface iApplicationObjectExtension
* * {@see DBObject::ListPreviousValuesForUpdatedAttributes()} : list of changed attributes and their values before the change
* * {@see DBObject::Get()} : for a given attribute the new value that was persisted
*
* @api
* @param \cmdbAbstractObject $oObject The target object
* @param CMDBChange|null $oChange A change context. Since 2.0 it is fine to ignore it, as the framework does maintain this information
* once for all the changes made within the current page
@@ -581,6 +616,7 @@ interface iApplicationObjectExtension
*
* The method is called right <b>after</b> the object has been written to the database.
*
* @api
* @param \cmdbAbstractObject $oObject The target object
* @param CMDBChange|null $oChange A change context. Since 2.0 it is fine to ignore it, as the framework does maintain this information
* once for all the changes made within the current page
@@ -594,6 +630,7 @@ interface iApplicationObjectExtension
*
* The method is called right <b>before</b> the object will be deleted from the database.
*
* @api
* @param \cmdbAbstractObject $oObject The target object
* @param CMDBChange|null $oChange A change context. Since 2.0 it is fine to ignore it, as the framework does maintain this information
* once for all the changes made within the current page
@@ -607,7 +644,7 @@ interface iApplicationObjectExtension
* Extend this class instead of iApplicationObjectExtension if you don't need to overload all methods
*
* @api
* @package Extensibility
* @package ORMExtensibilityAPI
* @since 2.7.0
*/
abstract class AbstractApplicationObjectExtension implements iApplicationObjectExtension
@@ -667,7 +704,7 @@ abstract class AbstractApplicationObjectExtension implements iApplicationObjectE
* by the application, as long as the class definition is included somewhere in the code
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
* @since 2.0
*/
interface iPopupMenuExtension
@@ -676,18 +713,21 @@ interface iPopupMenuExtension
* Insert an item into the Actions menu of a list
*
* $param is a DBObjectSet containing the list of objects
* @api
*/
const MENU_OBJLIST_ACTIONS = 1;
/**
* Insert an item into the Toolkit menu of a list
*
* $param is a DBObjectSet containing the list of objects
* @api
*/
const MENU_OBJLIST_TOOLKIT = 2;
/**
* Insert an item into the Actions menu on an object details page
*
* $param is a DBObject instance: the object currently displayed
* @api
*/
const MENU_OBJDETAILS_ACTIONS = 3;
/**
@@ -697,12 +737,14 @@ interface iPopupMenuExtension
* is being displayed.
*
* $param is a Dashboard instance: the dashboard currently displayed
* @api
*/
const MENU_DASHBOARD_ACTIONS = 4;
/**
* Insert an item into the User menu (upper right corner)
*
* $param is null
* @api
*/
const MENU_USER_ACTIONS = 5;
/**
@@ -710,6 +752,7 @@ interface iPopupMenuExtension
*
* $param is an array('portal_id' => $sPortalId, 'object' => $oObject) containing the portal id and a DBObject instance (the object on
* the current line)
* @api
*/
const PORTAL_OBJLISTITEM_ACTIONS = 7;
/**
@@ -717,6 +760,7 @@ interface iPopupMenuExtension
*
* $param is an array('portal_id' => $sPortalId, 'object' => $oObject) containing the portal id and a DBObject instance (the object
* currently displayed)
* @api
*/
const PORTAL_OBJDETAILS_ACTIONS = 8;
@@ -754,6 +798,7 @@ interface iPopupMenuExtension
* This method is called by the framework for each menu.
* The items will be inserted in the menu in the order of the returned array.
*
* @api
* @param int $iMenuId The identifier of the type of menu, as listed by the constants MENU_xxx
* @param mixed $param Depends on $iMenuId, see the constants defined above
*
@@ -766,7 +811,7 @@ interface iPopupMenuExtension
* Base class for the various types of custom menus
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
* @since 2.0
*/
abstract class ApplicationPopupMenuItem
@@ -776,7 +821,7 @@ abstract class ApplicationPopupMenuItem
/** @ignore */
protected $sLabel;
/** @ignore */
protected $sTooltip;
protected $sTooltip;
/** @ignore */
protected $sIconClass;
/** @ignore */
@@ -833,6 +878,7 @@ abstract class ApplicationPopupMenuItem
}
/**
* @api
* @param $aCssClasses
*/
public function SetCssClasses($aCssClasses)
@@ -843,6 +889,7 @@ abstract class ApplicationPopupMenuItem
/**
* Adds a CSS class to the CSS classes that will be put on the menu item
*
* @api
* @param $sCssClass
*/
public function AddCssClass($sCssClass)
@@ -853,7 +900,7 @@ abstract class ApplicationPopupMenuItem
/**
* @param $sTooltip
*
*
* @since 3.0.0
*/
public function SetTooltip($sTooltip)
@@ -863,24 +910,24 @@ abstract class ApplicationPopupMenuItem
/**
* @return string
*
*
* @since 3.0.0
*/
public function GetTooltip()
{
return $this->sTooltip;
}
/**
* @param $sIconClass
*
*
* @since 3.0.0
*/
public function SetIconClass($sIconClass)
{
$this->sIconClass = $sIconClass;
}
}
/**
* @return string
*
@@ -890,7 +937,7 @@ abstract class ApplicationPopupMenuItem
{
return $this->sIconClass;
}
/**
* Returns the components to create a popup menu item in HTML
*
@@ -912,7 +959,7 @@ abstract class ApplicationPopupMenuItem
* Note: This works only in the backoffice, {@see \URLButtonItem} for the end-user portal
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
* @since 2.0
*/
class URLPopupMenuItem extends ApplicationPopupMenuItem
@@ -925,6 +972,7 @@ class URLPopupMenuItem extends ApplicationPopupMenuItem
/**
* Constructor
*
* @api
* @param string $sUID The unique identifier of this menu in iTop... make sure you pass something unique enough
* @param string $sLabel The display label of the menu (must be localized)
* @param string $sUrl If the menu is an hyperlink, provide the absolute hyperlink here
@@ -948,7 +996,7 @@ class URLPopupMenuItem extends ApplicationPopupMenuItem
'tooltip' => $this->sTooltip
);
}
/** @ignore */
public function GetUrl()
{
@@ -968,7 +1016,7 @@ class URLPopupMenuItem extends ApplicationPopupMenuItem
* Note: This works only in the backoffice, {@see \JSButtonItem} for the end-user portal
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
* @since 2.0
*/
class JSPopupMenuItem extends ApplicationPopupMenuItem
@@ -1018,13 +1066,13 @@ class JSPopupMenuItem extends ApplicationPopupMenuItem
{
return $this->aIncludeJSFiles;
}
/** @ignore */
public function GetJsCode()
{
return $this->sJsCode;
}
/** @ignore */
public function GetUrl()
{
@@ -1037,7 +1085,7 @@ class JSPopupMenuItem extends ApplicationPopupMenuItem
* will automatically reduce several consecutive separators to just one
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
* @since 2.0
*/
class SeparatorPopupMenuItem extends ApplicationPopupMenuItem
@@ -1046,6 +1094,7 @@ class SeparatorPopupMenuItem extends ApplicationPopupMenuItem
/**
* Constructor
* @api
*/
public function __construct()
{
@@ -1063,7 +1112,7 @@ class SeparatorPopupMenuItem extends ApplicationPopupMenuItem
* Class for adding an item as a button that browses to the given URL
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
* @since 2.0
*/
class URLButtonItem extends URLPopupMenuItem
@@ -1075,7 +1124,7 @@ class URLButtonItem extends URLPopupMenuItem
* Class for adding an item as a button that runs some JS code
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
* @since 2.0
*/
class JSButtonItem extends JSPopupMenuItem
@@ -1099,7 +1148,7 @@ class JSButtonItem extends JSPopupMenuItem
* the specified place and can use the passed iTopWebPage object to add javascript or CSS definitions
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
* @since 2.0
* @deprecated 3.0.0 If you need to include:
* * JS/CSS files/snippets, use {@see \iBackofficeLinkedScriptsExtension}, {@see \iBackofficeLinkedStylesheetsExtension}, etc instead
@@ -1110,6 +1159,7 @@ interface iPageUIExtension
/**
* Add content to the header of the page
*
* @api
* @param iTopWebPage $oPage The page to insert stuff into.
*
* @return string The HTML content to add into the page
@@ -1119,6 +1169,7 @@ interface iPageUIExtension
/**
* Add content to the footer of the page
*
* @api
* @param iTopWebPage $oPage The page to insert stuff into.
*
* @return string The HTML content to add into the page
@@ -1128,6 +1179,7 @@ interface iPageUIExtension
/**
* Add content to the "admin banner"
*
* @api
* @param iTopWebPage $oPage The page to insert stuff into.
*
* @return string The HTML content to add into the page
@@ -1151,7 +1203,7 @@ interface iPageUIExtension
* the specified place and can use the passed iTopWebPage object to add javascript or CSS definitions
*
* @api
* @package Extensibility
* @package UIBlockExtensibilityAPI
* @since 3.0.0
*/
interface iPageUIBlockExtension
@@ -1182,7 +1234,7 @@ interface iPageUIBlockExtension
* Extend this class instead of iPageUIExtension if you don't need to overload all methods
*
* @api
* @package Extensibility
* @package UIExtensibilityAPI
* @since 2.7.0
* @deprecated since 3.0.0 use AbstractPageUIBlockExtension instead
*/
@@ -1224,7 +1276,7 @@ abstract class AbstractPageUIExtension implements iPageUIExtension
* Extend this class instead of iPageUIExtension if you don't need to overload all methods
*
* @api
* @package Extensibility
* @package UIBlockExtensibilityAPI
* @since 3.0.0
*/
abstract class AbstractPageUIBlockExtension implements iPageUIBlockExtension
@@ -1259,6 +1311,7 @@ abstract class AbstractPageUIBlockExtension implements iPageUIBlockExtension
*
* @see \iTopWebPage::$a_linked_scripts
* @api
* @package BackofficeUIExtensibilityAPI
* @since 3.0.0
*/
interface iBackofficeLinkedScriptsExtension
@@ -1276,6 +1329,7 @@ interface iBackofficeLinkedScriptsExtension
*
* @see \iTopWebPage::$a_early_scripts
* @api
* @package BackofficeUIExtensibilityAPI
* @since 3.0.0
*/
interface iBackofficeEarlyScriptExtension
@@ -1292,6 +1346,7 @@ interface iBackofficeEarlyScriptExtension
*
* @see \iTopWebPage::$a_scripts
* @api
* @package BackofficeUIExtensibilityAPI
* @since 3.0.0
*/
interface iBackofficeScriptExtension
@@ -1308,6 +1363,7 @@ interface iBackofficeScriptExtension
*
* @see \iTopWebPage::$a_init_scripts
* @api
* @package BackofficeUIExtensibilityAPI
* @since 3.0.0
*/
interface iBackofficeInitScriptExtension
@@ -1324,6 +1380,7 @@ interface iBackofficeInitScriptExtension
*
* @see \iTopWebPage::$a_ready_scripts
* @api
* @package BackofficeUIExtensibilityAPI
* @since 3.0.0
*/
interface iBackofficeReadyScriptExtension
@@ -1340,6 +1397,7 @@ interface iBackofficeReadyScriptExtension
*
* @see \iTopWebPage::$a_linked_stylesheets
* @api
* @package BackofficeUIExtensibilityAPI
* @since 3.0.0
*/
interface iBackofficeLinkedStylesheetsExtension
@@ -1356,6 +1414,7 @@ interface iBackofficeLinkedStylesheetsExtension
*
* @see \iTopWebPage::$a_styles
* @api
* @package BackofficeUIExtensibilityAPI
* @since 3.0.0
*/
interface iBackofficeStyleExtension
@@ -1372,6 +1431,7 @@ interface iBackofficeStyleExtension
*
* @see \iTopWebPage::$a_dict_entries
* @api
* @package BackofficeUIExtensibilityAPI
* @since 3.0.0
*/
interface iBackofficeDictEntriesExtension
@@ -1388,6 +1448,7 @@ interface iBackofficeDictEntriesExtension
*
* @see \iTopWebPage::$a_dict_entries_prefixes
* @api
* @package BackofficeUIExtensibilityAPI
* @since 3.0.0
*/
interface iBackofficeDictEntriesPrefixesExtension
@@ -1403,7 +1464,7 @@ interface iBackofficeDictEntriesPrefixesExtension
* Implement this interface to add content to any enhanced portal page
*
* @api
* @package Extensibility
* @package PortalExtensibilityAPI
*
* @since 2.4.0 interface creation
* @since 2.7.0 change method signatures due to Silex to Symfony migration
@@ -1417,6 +1478,7 @@ interface iPortalUIExtension
/**
* Returns an array of CSS file urls
*
* @api
* @param \Symfony\Component\DependencyInjection\Container $oContainer
*
* @return array
@@ -1426,6 +1488,7 @@ interface iPortalUIExtension
/**
* Returns inline (raw) CSS
*
* @api
* @param \Symfony\Component\DependencyInjection\Container $oContainer
*
* @return string
@@ -1435,6 +1498,7 @@ interface iPortalUIExtension
/**
* Returns an array of JS file urls
*
* @api
* @param \Symfony\Component\DependencyInjection\Container $oContainer
*
* @return array
@@ -1444,6 +1508,7 @@ interface iPortalUIExtension
/**
* Returns raw JS code
*
* @api
* @param \Symfony\Component\DependencyInjection\Container $oContainer
*
* @return string
@@ -1453,6 +1518,7 @@ interface iPortalUIExtension
/**
* Returns raw HTML code to put at the end of the <body> tag
*
* @api
* @param \Symfony\Component\DependencyInjection\Container $oContainer
*
* @return string
@@ -1462,6 +1528,7 @@ interface iPortalUIExtension
/**
* Returns raw HTML code to put at the end of the #main-wrapper element
*
* @api
* @param \Symfony\Component\DependencyInjection\Container $oContainer
*
* @return string
@@ -1471,6 +1538,7 @@ interface iPortalUIExtension
/**
* Returns raw HTML code to put at the end of the #topbar and #sidebar elements
*
* @api
* @param \Symfony\Component\DependencyInjection\Container $oContainer
*
* @return string
@@ -1482,7 +1550,7 @@ interface iPortalUIExtension
* Extend this class instead of iPortalUIExtension if you don't need to overload all methods
*
* @api
* @package Extensibility
* @package PortalExtensibilityAPI
* @since 2.4.0
*/
abstract class AbstractPortalUIExtension implements iPortalUIExtension
@@ -1548,7 +1616,7 @@ abstract class AbstractPortalUIExtension implements iPortalUIExtension
* Implement this interface to add new operations to the REST/JSON web service
*
* @api
* @package Extensibility
* @package RESTExtensibilityAPI
* @since 2.0.1
*/
interface iRestServiceProvider
@@ -1556,6 +1624,7 @@ interface iRestServiceProvider
/**
* Enumerate services delivered by this class
*
* @api
* @param string $sVersion The version (e.g. 1.0) supported by the services
*
* @return array An array of hash 'verb' => verb, 'description' => description
@@ -1565,6 +1634,7 @@ interface iRestServiceProvider
/**
* Enumerate services delivered by this class
*
* @api
* @param string $sVersion The version (e.g. 1.0) supported by the services
* @param string $sVerb
* @param array $aParams
@@ -1578,69 +1648,90 @@ interface iRestServiceProvider
* Minimal REST response structure. Derive this structure to add response data and error codes.
*
* @api
* @package Extensibility
* @package RESTExtensibilityAPI
* @since 2.0.1
*/
class RestResult
{
/**
* Result: no issue has been encountered
* @api
*/
const OK = 0;
/**
* Result: missing/wrong credentials or the user does not have enough rights to perform the requested operation
* @api
*/
const UNAUTHORIZED = 1;
/**
* Result: the parameter 'version' is missing
* @api
*/
const MISSING_VERSION = 2;
/**
* Result: the parameter 'json_data' is missing
* @api
*/
const MISSING_JSON = 3;
/**
* Result: the input structure is not a valid JSON string
* @api
*/
const INVALID_JSON = 4;
/**
* Result: the parameter 'auth_user' is missing, authentication aborted
* @api
*/
const MISSING_AUTH_USER = 5;
/**
* Result: the parameter 'auth_pwd' is missing, authentication aborted
* @api
*/
const MISSING_AUTH_PWD = 6;
/**
* Result: no operation is available for the specified version
* @api
*/
const UNSUPPORTED_VERSION = 10;
/**
* Result: the requested operation is not valid for the specified version
* @api
*/
const UNKNOWN_OPERATION = 11;
/**
* Result: the requested operation cannot be performed because it can cause data (integrity) loss
* @api
*/
const UNSAFE = 12;
/**
* Result: the request page number is not valid. It must be an integer greater than 0
* @api
*/
const INVALID_PAGE = 13;
/**
* Result: the operation could not be performed, see the message for troubleshooting
* @api
*/
const INTERNAL_ERROR = 100;
/**
* Default constructor - ok!
* @api
*/
public function __construct()
{
$this->code = RestResult::OK;
}
/**
* @var int
* @api
*/
public $code;
/**
* @var string
* @api
*/
public $message;
}
@@ -1648,7 +1739,7 @@ class RestResult
* Helpers for implementing REST services
*
* @api
* @package Extensibility
* @package RESTExtensibilityAPI
*/
class RestUtils
{
@@ -1797,6 +1888,7 @@ class RestUtils
/**
* Read and interpret object search criteria from a Rest/Json structure
*
* @api
* @param string $sClass Name of the class
* @param StdClass $oCriteria Hash of attribute code => value (can be a substructure or a scalar, depending on the nature of the
* attriute)
@@ -1906,6 +1998,7 @@ class RestUtils
/**
* Search objects from a polymorph search specification (Rest/Json)
*
* @api
* @param string $sClass Name of the class
* @param mixed $key Either search criteria (substructure), or an object or an OQL string.
* @param int $iLimit The limit of results to return

View File

@@ -3374,13 +3374,14 @@ EOF
// Consider only the "expected" fields for the target state
if (array_key_exists($sAttCode, $aExpectedAttributes)) {
$iExpectCode = $aExpectedAttributes[$sAttCode];
// Prompt for an attribute if
// - the attribute must be changed or must be displayed to the user for confirmation
// - or the field is mandatory and currently empty
if (($iExpectCode & (OPT_ATT_MUSTCHANGE | OPT_ATT_MUSTPROMPT)) ||
(($iExpectCode & OPT_ATT_MANDATORY) && ($this->Get($sAttCode) == ''))) {
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
(($iExpectCode & OPT_ATT_MANDATORY) && (false === $this->HasAValue($sAttCode)))) {
$aArgs = array('this' => $this);
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
// If the field is mandatory, set it to the only possible value
if ((!$oAttDef->IsNullAllowed()) || ($iExpectCode & OPT_ATT_MANDATORY)) {
if ($oAttDef->IsExternalKey()) {
@@ -3409,32 +3410,35 @@ EOF
}
}
}
$sInputType = '';
$sInputId = 'att_'.$iFieldIndex;
$sHTMLValue = cmdbAbstractObject::GetFormElementForField($oPage, $sClass, $sAttCode, $oAttDef,
$this->Get($sAttCode), $this->GetEditValue($sAttCode), 'att_'.$iFieldIndex, '', $iExpectCode,
$aArgs);
$aAttrib = array(
$this->Get($sAttCode), $this->GetEditValue($sAttCode), $sInputId, '', $iExpectCode,
$aArgs, true, $sInputType);
$aAttrib = array(
'label' => '<span>'.$oAttDef->GetLabel().'</span>',
'value' => "<span id=\"field_att_$iFieldIndex\">$sHTMLValue</span>",
);
//add attrib for data-attribute
// Prepare metadata attributes
$sAttCode = $oAttDef->GetCode();
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
$sAttCode = $oAttDef->GetCode();
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
$sAttDefClass = get_class($oAttDef);
$sAttLabel = MetaModel::GetLabel($sClass, $sAttCode);
$sAttLabel = MetaModel::GetLabel($sClass, $sAttCode);
$aAttrib['attcode'] = $sAttCode;
$aAttrib['atttype'] = $sAttDefClass;
$aAttrib['attcode'] = $sAttCode;
$aAttrib['atttype'] = $sAttDefClass;
$aAttrib['attlabel'] = $sAttLabel;
// - Attribute flags
$aAttrib['attflags'] = $this->GetFormAttributeFlags($sAttCode) ;
$aAttrib['attflags'] = $this->GetFormAttributeFlags($sAttCode);
// - How the field should be rendered
$aAttrib['layout'] = (in_array($oAttDef->GetEditClass(), static::GetAttEditClassesToRenderAsLargeField())) ? 'large' : 'small';
$aAttrib['layout'] = (in_array($oAttDef->GetEditClass(), static::GetAttEditClassesToRenderAsLargeField())) ? 'large' : 'small';
$aAttrib['inputid'] = $sInputId;
$aAttrib['inputtype'] = $sInputType;
// - For simple fields, we get the raw (stored) value as well
$bExcludeRawValue = false;
foreach (static::GetAttDefClassesToExcludeFromMarkupMetadataRawValue() as $sAttDefClassToExclude)
{
foreach (static::GetAttDefClassesToExcludeFromMarkupMetadataRawValue() as $sAttDefClassToExclude) {
if (is_a($sAttDefClass, $sAttDefClassToExclude, true)) {
$bExcludeRawValue = true;
break;
@@ -3442,8 +3446,8 @@ EOF
}
$aAttrib['value_raw'] = ($bExcludeRawValue === false) ? $this->Get($sAttCode) : '';
$aDetails[] = $aAttrib;
$aFieldsMap[$sAttCode] = 'att_'.$iFieldIndex;
$aDetails[] = $aAttrib;
$aFieldsMap[$sAttCode] = $sInputId;
$iFieldIndex++;
$bExistFieldToDisplay = true;
}

View File

@@ -1549,6 +1549,29 @@ JS
return $this->sDefinitionFile;
}
/**
* @param string $sDashboardFileRelative can also be an absolute path (compatibility with old URL)
*
* @return string full path to the Dashboard file
* @throws \SecurityException if path isn't under approot
* @uses utils::RealPath()
* @since 2.7.8 3.0.3 3.1.0 N°4449 remove FPD
*/
public static function GetDashboardFileFromRelativePath($sDashboardFileRelative)
{
if (utils::RealPath($sDashboardFileRelative, APPROOT)) {
// compatibility with old URL containing absolute path !
return $sDashboardFileRelative;
}
$sDashboardFile = APPROOT.$sDashboardFileRelative;
if (false === utils::RealPath($sDashboardFile, APPROOT)) {
throw new SecurityException('Invalid dashboard file !');
}
return $sDashboardFile;
}
/**
* @param string $sDefinitionFile
*/

View File

@@ -1045,9 +1045,19 @@ JS
$aCount = $aCounts[$sStateValue];
$sHyperlink = $aCount['link'];
$sCountLabel = $aCount['label'];
$oPill = PillFactory::MakeForState($sClass, $sStateValue)
->SetTooltip($sStateLabel)
->AddHtml("<span class=\"ibo-dashlet-header-dynamic--count\">$sCountLabel</span><span class=\"ibo-dashlet-header-dynamic--label ibo-text-truncated-with-ellipsis\">".utils::HtmlEntities($sStateLabel)."</span>");
$oPill = PillFactory::MakeForState($sClass, $sStateValue);
// N°5849 - Unencode label for ExternalKey attribute because friendlyname is already html encoded thanks to DBObject::GetName() in AttributeExternalKey::GetAllowedValues(). (A fix in this function may have too much impact).
if ($oAttDef instanceof AttributeExternalKey) {
$sPillTooltip = utils::HtmlEntityDecode($sStateLabel);
$sPillLabel = $sStateLabel;
} else {
$sPillTooltip = $sStateLabel;
$sPillLabel = utils::HtmlEntities($sStateLabel);
}
$oPill->SetTooltip($sPillTooltip)
->AddHtml("<span class=\"ibo-dashlet-header-dynamic--count\">$sCountLabel</span><span class=\"ibo-dashlet-header-dynamic--label ibo-text-truncated-with-ellipsis\">".$sPillLabel."</span>");
if ($sHyperlink != '-') {
$oPill->SetUrl($sHyperlink);
}

View File

@@ -5,6 +5,7 @@
*/
use Combodo\iTop\Application\UI\Base\Component\Form\FormUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory;
use Combodo\iTop\Core\MetaModel\FriendlyNameType;
@@ -323,12 +324,12 @@ EOF
EOF
);
$sHTMLValue .= "<div class=\"ibo-input-select--action-buttons\">";
$sHTMLValue .= " <div class=\"ibo-input-select--action-button ibo-input-select--action-button--clear ibo-is-hidden\" id=\"mini_clear_{$this->iId}\" onClick=\"oACWidget_{$this->iId}.Clear();\" data-tooltip-content='".Dict::S('UI:Button:Clear')."'><i class=\"fas fa-times\"></i></div>";
$sHTMLValue .= " <a href=\"#\" class=\"ibo-input-select--action-button ibo-input-select--action-button--clear ibo-is-hidden\" id=\"mini_clear_{$this->iId}\" onClick=\"oACWidget_{$this->iId}.Clear();\" data-tooltip-content='".Dict::S('UI:Button:Clear')."'><i class=\"fas fa-times\"></i></a>";
}
if ($bCreate && $bExtensions) {
$sCallbackName = (MetaModel::IsAbstract($this->sTargetClass)) ? 'SelectObjectClass' : 'CreateObject';
$sHTMLValue .= "<div class=\"ibo-input-select--action-button ibo-input-select--action-button--create\" id=\"mini_add_{$this->iId}\" onClick=\"oACWidget_{$this->iId}.{$sCallbackName}();\" data-tooltip-content='".Dict::S('UI:Button:Create')."'><i class=\"fas fa-plus\"></i></div>";
$sHTMLValue .= "<a href=\"#\" class=\"ibo-input-select--action-button ibo-input-select--action-button--create\" id=\"mini_add_{$this->iId}\" onClick=\"oACWidget_{$this->iId}.{$sCallbackName}();\" data-tooltip-content='".Dict::S('UI:Button:Create')."'><i class=\"fas fa-plus\"></i></a>";
$oPage->add_ready_script(
<<<JS
if ($('#ajax_{$this->iId}').length == 0)
@@ -339,7 +340,7 @@ JS
);
}
if ($bExtensions && MetaModel::IsHierarchicalClass($this->sTargetClass) !== false) {
$sHTMLValue .= "<div class=\"ibo-input-select--action-button ibo-input-select--action-button--hierarchy\" id=\"mini_tree_{$this->iId}\" onClick=\"oACWidget_{$this->iId}.HKDisplay();\" data-tooltip-content='".Dict::S('UI:Button:SearchInHierarchy')."'><i class=\"fas fa-sitemap\"></i></div>";
$sHTMLValue .= "<a href=\"#\" class=\"ibo-input-select--action-button ibo-input-select--action-button--hierarchy\" id=\"mini_tree_{$this->iId}\" onClick=\"oACWidget_{$this->iId}.HKDisplay();\" data-tooltip-content='".Dict::S('UI:Button:SearchInHierarchy')."'><i class=\"fas fa-sitemap\"></i></a>";
$oPage->add_ready_script(
<<<JS
if ($('#ac_tree_{$this->iId}').length == 0)
@@ -350,7 +351,7 @@ JS
);
}
if ($oAllowedValues->CountExceeds($iMaxComboLength)) {
$sHTMLValue .= " <div class=\"ibo-input-select--action-button ibo-input-select--action-button--search\" id=\"mini_search_{$this->iId}\" onClick=\"oACWidget_{$this->iId}.Search();\" data-tooltip-content='".Dict::S('UI:Button:Search')."'><i class=\"fas fa-search\"></i></div>";
$sHTMLValue .= " <a href=\"#\" class=\"ibo-input-select--action-button ibo-input-select--action-button--search\" id=\"mini_search_{$this->iId}\" onClick=\"oACWidget_{$this->iId}.Search();\" data-tooltip-content='".Dict::S('UI:Button:Search')."'><i class=\"fas fa-search\"></i></a>";
}
$sHTMLValue .= "</div>";
$sHTMLValue .= "</div>";
@@ -904,7 +905,7 @@ JS
{
// For security reasons: check that the "proposed" class is actually a subclass of the linked class
// and that the current user is allowed to create objects of this class
$aSubClasses = MetaModel::EnumChildClasses($this->sTargetClass);
$aSubClasses = MetaModel::EnumChildClasses($this->sTargetClass, ENUM_CHILD_CLASSES_ALL);
$aPossibleClasses = array();
foreach($aSubClasses as $sCandidateClass)
{
@@ -924,6 +925,7 @@ JS
$sDialogTitleEscaped = addslashes($sDialogTitle);
$oPage->add_ready_script("$('#ac_create_$this->iId').dialog({ width: 'auto', height: 'auto', maxHeight: $(window).height() - 50, autoOpen: false, modal: true, title: '$sDialogTitleEscaped'});\n");
$oPage->add_ready_script("$('#ac_create_{$this->iId} form').removeAttr('onsubmit');");
$oPage->add_ready_script("$('#ac_create_{$this->iId} form').find('select').attr('id', 'ac_create_{$this->iId}_select');");
$oPage->add_ready_script("$('#ac_create_{$this->iId} form').on('submit.uilinksWizard', oACWidget_{$this->iId}.DoSelectObjectClass);");
}

View File

@@ -60,7 +60,7 @@ class UISearchFormForeignKeys
$oPage->add(<<<HTML
<form id="ObjectsAddForm_{$this->m_iInputId}">
<div id="SearchResultsToAdd_{$this->m_iInputId}" style="vertical-align:top;background: #fff;height:100%;overflow:auto;padding:0;border:0;">
<div id="SearchResultsToAdd_{$this->m_iInputId}" style="vertical-align:top;height:100%;overflow:auto;padding:0;border:0;">
<div style="background: #fff; border:0; text-align:center; vertical-align:middle;"><p>{$sEmptyList}</p></div>
</div>
<input type="hidden" id="count_{$this->m_iInputId}" value="0"/>

View File

@@ -158,7 +158,7 @@ class utils
self::$m_aParamsFromFile = array();
}
$aParamLines = explode("\n", $sParams);
$aParamLines = explode("\n", $sParams ?? '');
foreach ($aParamLines as $sLine)
{
$sLine = trim($sLine);
@@ -1467,19 +1467,19 @@ class utils
$oDashboard = $param;
$sDashboardId = $oDashboard->GetId();
$sDashboardFile = $oDashboard->GetDefinitionFile();
$sDashboardFileRelative = utils::LocalPath($sDashboardFile);
$sDlgTitle = addslashes(Dict::S('UI:ImportDashboardTitle'));
$sDlgText = addslashes(Dict::S('UI:ImportDashboardText'));
$sCloseBtn = addslashes(Dict::S('UI:Button:Cancel'));
$sDashboardFileJS = addslashes($sDashboardFile);
$sDashboardFileURL = urlencode($sDashboardFile);
$sDashboardFileJS = addslashes($sDashboardFileRelative);
$sDashboardFileURL = urlencode($sDashboardFileRelative);
$sUploadDashboardTransactId = utils::GetNewTransactionId();
$aResult = array(
new SeparatorPopupMenuItem(),
new URLPopupMenuItem('UI:ExportDashboard', Dict::S('UI:ExportDashBoard'), utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php?operation=export_dashboard&id='.$sDashboardId.'&file='.$sDashboardFileURL),
new JSPopupMenuItem('UI:ImportDashboard', Dict::S('UI:ImportDashBoard'), "UploadDashboard({dashboard_id: '$sDashboardId', file: '$sDashboardFileJS', title: '$sDlgTitle', text: '$sDlgText', close_btn: '$sCloseBtn', transaction: '$sUploadDashboardTransactId' })"),
);
if ($oDashboard->GetReloadURL())
{
if ($oDashboard->GetReloadURL()) {
$aResult[] = new SeparatorPopupMenuItem();
$aResult[] = new URLPopupMenuItem('UI:Menu:PrintableVersion', Dict::S('UI:Menu:PrintableVersion'), $oDashboard->GetReloadURL().'&printable=1', '_blank');
}
@@ -1687,7 +1687,7 @@ class utils
// If cURL is available, let's use it, since it provides a greater control over the various HTTP/SSL options
// For instance fopen does not allow to work around the bug: http://stackoverflow.com/questions/18191672/php-curl-ssl-routinesssl23-get-server-helloreason1112
// by setting the SSLVERSION to 3 as done below.
$aHeaders = explode("\n", $sOptionnalHeaders);
$aHeaders = explode("\n", $sOptionnalHeaders ?? '');
// N°3267 - Webservices: Fix optional headers not being taken into account
// See https://www.php.net/curl_setopt CURLOPT_HTTPHEADER
$aHTTPHeaders = array();
@@ -1864,20 +1864,37 @@ class utils
return html_entity_decode($sValue, ENT_QUOTES, 'UTF-8');
}
/**
* @param string $sValue value encoded with {@see self::EscapeHtml()}
*
* @return string decoded value
*
* @uses \htmlspecialchars_decode()
* @link https://www.php.net/manual/en/function.htmlspecialchars-decode.php
* @since 3.0.3 3.1.0 N°6020 method creation
*/
public static function EscapedHtmlDecode($sValue)
{
return htmlspecialchars_decode(
$sValue,
ENT_QUOTES | ENT_DISALLOWED | ENT_HTML5
);
}
/**
* Convert a string containing some (valid) HTML markup to plain text
*
* @param string $sHtml
*
* @return string
*/
public static function HtmlToText($sHtml)
{
try
{
try {
//return '<?xml encoding="UTF-8">'.$sHtml;
return \Html2Text\Html2Text::convert('<?xml encoding="UTF-8">'.$sHtml);
}
catch(Exception $e)
{
catch (Exception $e) {
return $e->getMessage();
}
}
@@ -2254,7 +2271,7 @@ class utils
$aParams = array();
foreach(explode('&', $sQuery) as $sChunk)
{
$aParts = explode('=', $sChunk);
$aParts = explode('=', $sChunk ?? '');
if (count($aParts) != 2) continue;
$aParams[$aParts[0]] = urldecode($aParts[1]);
}
@@ -2401,7 +2418,7 @@ class utils
$aCleanHeaders = array();
foreach( $aHeaders as $sKey => $sValue )
{
$aTokens = explode(':', $sValue, 2);
$aTokens = explode(':', $sValue ?? '', 2);
if(isset($aTokens[1]))
{
$aCleanHeaders[trim($aTokens[0])] = trim($aTokens[1]);
@@ -2745,12 +2762,18 @@ HTML;
$bSkipped = true;
}
else {
foreach ($aExcludedPath as $sExcludedPath) {
// Note: We use '#' as delimiters as usual '/' is often used in paths.
if ($sExcludedPath !== '' && preg_match('#'.$sExcludedPath.'#', $sPHPFile) === 1) {
$bSkipped = true;
break;
$sPHPFile = self::LocalPath($sPHPFile);
if ($sPHPFile !== false) {
$sPHPFile = '/'.$sPHPFile; // for regex
foreach ($aExcludedPath as $sExcludedPath) {
// Note: We use '#' as delimiters as usual '/' is often used in paths.
if ($sExcludedPath !== '' && preg_match('#'.$sExcludedPath.'#', $sPHPFile) === 1) {
$bSkipped = true;
break;
}
}
} else {
$bSkipped = true; // file not found
}
}
@@ -2788,7 +2811,7 @@ HTML;
$aResultPref = [];
$aShortcutPrefs = appUserPreferences::GetPref('keyboard_shortcuts', []);
// Note: Mind the 4 blackslashes, see utils::GetClassesForInterface()
$aShortcutClasses = utils::GetClassesForInterface('iKeyboardShortcut', '', array('[\\\\/]lib[\\\\/]', '[\\\\/]node_modules[\\\\/]', '[\\\\/]test[\\\\/]'));
$aShortcutClasses = utils::GetClassesForInterface('iKeyboardShortcut', '', array('[\\\\/]lib[\\\\/]', '[\\\\/]node_modules[\\\\/]', '[\\\\/]test[\\\\/]', '[\\\\/]tests[\\\\/]'));
foreach ($aShortcutClasses as $cShortcutPlugin) {
$sTriggeredElement = $cShortcutPlugin::GetShortcutTriggeredElementSelector();
@@ -2796,7 +2819,7 @@ HTML;
$sKey = isset($aShortcutPrefs[$aShortcutKey['id']]) ? $aShortcutPrefs[$aShortcutKey['id']] : $aShortcutKey['key'];
// Format key for display
$aKeyParts = explode('+', $sKey);
$aKeyParts = explode('+', $sKey ?? '');
$aFormattedKeyParts = [];
foreach ($aKeyParts as $sKeyPart) {
$aFormattedKeyParts[] = ucfirst(trim($sKeyPart));

View File

@@ -23,6 +23,6 @@ define('ITOP_DESIGN_LATEST_VERSION', '3.0');
* @used-by utils::GetItopVersionWikiSyntax()
* @used-by iTopModulesPhpVersionIntegrationTest
*/
define('ITOP_CORE_VERSION', '3.0.2');
define('ITOP_CORE_VERSION', '3.0.3');
require_once APPROOT.'bootstrap.inc.php';

View File

@@ -13,6 +13,7 @@
"ext-mysqli": "*",
"ext-soap": "*",
"combodo/tcpdf": "~6.4.4",
"firebase/php-jwt": "~6.4.0",
"guzzlehttp/guzzle": "^6.5.8",
"laminas/laminas-mail": "^2.11",
"laminas/laminas-servicemanager": "^3.5",

26
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "86ca84263f7f271dfc10e5e63bd02385",
"content-hash": "bad4899b1df95e6ab4ab2e42e4213acd",
"packages": [
{
"name": "combodo/tcpdf",
@@ -266,25 +266,31 @@
},
{
"name": "firebase/php-jwt",
"version": "v5.5.1",
"version": "v6.4.0",
"source": {
"type": "git",
"url": "https://github.com/firebase/php-jwt.git",
"reference": "83b609028194aa042ea33b5af2d41a7427de80e6"
"reference": "4dd1e007f22a927ac77da5a3fbb067b42d3bc224"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/83b609028194aa042ea33b5af2d41a7427de80e6",
"reference": "83b609028194aa042ea33b5af2d41a7427de80e6",
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/4dd1e007f22a927ac77da5a3fbb067b42d3bc224",
"reference": "4dd1e007f22a927ac77da5a3fbb067b42d3bc224",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
"php": "^7.1||^8.0"
},
"require-dev": {
"phpunit/phpunit": ">=4.8 <=9"
"guzzlehttp/guzzle": "^6.5||^7.4",
"phpspec/prophecy-phpunit": "^1.1",
"phpunit/phpunit": "^7.5||^9.5",
"psr/cache": "^1.0||^2.0",
"psr/http-client": "^1.0",
"psr/http-factory": "^1.0"
},
"suggest": {
"ext-sodium": "Support EdDSA (Ed25519) signatures",
"paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present"
},
"type": "library",
@@ -317,9 +323,9 @@
],
"support": {
"issues": "https://github.com/firebase/php-jwt/issues",
"source": "https://github.com/firebase/php-jwt/tree/v5.5.1"
"source": "https://github.com/firebase/php-jwt/tree/v6.4.0"
},
"time": "2021-11-08T20:18:51+00:00"
"time": "2023-02-09T21:01:23+00:00"
},
{
"name": "guzzlehttp/guzzle",
@@ -4752,7 +4758,7 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=7.1.3 <8.0.0",
"php": ">=7.1.3 <8.1.0",
"ext-ctype": "*",
"ext-dom": "*",
"ext-gd": "*",

View File

@@ -110,7 +110,7 @@ class apcFile
*/
static public function GetCacheFileName($sKey = '')
{
$sPath = str_replace(array(' ', '/', '\\', '.'), '-', $sKey);
$sPath = str_replace(array(' ', '/', '\\', '.'), '-', $sKey ?? '');
return utils::GetCachePath().'apc-emul/'.$sPath;
}

View File

@@ -181,7 +181,7 @@ abstract class AsyncTask extends DBObject
if (is_array($aRetries) && array_key_exists(get_class($this), $aRetries))
{
$aConfig = $aRetries[get_class($this)];
$bExponential = (bool)$aConfig['exponential_delay'] ?? $bExponential;
$bExponential = (bool) ($aConfig['exponential_delay'] ?? $bExponential);
}
return $bExponential;
}

View File

@@ -705,6 +705,18 @@ abstract class AttributeDefinition
return is_null($proposedValue);
}
/**
* @param mixed $proposedValue
*
* @return bool True if $proposedValue is an actual value set in the attribute, false is the attribute remains "empty"
* @since 3.0.3, 3.1.0 N°5784
*/
public function HasAValue($proposedValue): bool
{
// Default implementation, we don't really know what type $proposedValue will be
return is_null($proposedValue);
}
/**
* force an allowed value (type conversion and possibly forces a value as mySQL would do upon writing!
*
@@ -1384,6 +1396,15 @@ class AttributeDashboard extends AttributeDefinition
{
return '';
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
// Always return false for now, we don't consider a custom version of a dashboard
return false;
}
}
/**
@@ -2233,6 +2254,22 @@ class AttributeLinkedSet extends AttributeDefinition
{
return false;
}
/**
* @inheritDoc
* @param \ormLinkSet $proposedValue
*/
public function HasAValue($proposedValue): bool
{
// Protection against wrong value type
if (false === ($proposedValue instanceof ormLinkSet))
{
return parent::HasAValue($proposedValue);
}
// We test if there is at least 1 item in the linkset (new or existing), not if an item is being added to it.
return $proposedValue->Count() > 0;
}
}
/**
@@ -2614,6 +2651,14 @@ class AttributeInteger extends AttributeDBField
return is_null($proposedValue);
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
return utils::IsNotNullOrEmptyString($proposedValue);
}
public function MakeRealValue($proposedValue, $oHostObj)
{
if (is_null($proposedValue))
@@ -2713,6 +2758,14 @@ class AttributeObjectKey extends AttributeDBFieldVoid
return ($proposedValue == 0);
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
return ((int) $proposedValue) !== 0;
}
public function MakeRealValue($proposedValue, $oHostObj)
{
if (is_null($proposedValue))
@@ -2912,6 +2965,14 @@ class AttributeDecimal extends AttributeDBField
return is_null($proposedValue);
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
return utils::IsNotNullOrEmptyString($proposedValue);
}
public function MakeRealValue($proposedValue, $oHostObj)
{
if (is_null($proposedValue))
@@ -3323,6 +3384,14 @@ class AttributeString extends AttributeDBField
return ($proposedValue == '');
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
return utils::IsNotNullOrEmptyString($proposedValue);
}
public function MakeRealValue($proposedValue, $oHostObj)
{
if (is_null($proposedValue))
@@ -4478,6 +4547,22 @@ class AttributeCaseLog extends AttributeLongText
return ($proposedValue->GetText() == '');
}
/**
* @inheritDoc
* @param \ormCaseLog $proposedValue
*/
public function HasAValue($proposedValue): bool
{
// Protection against wrong value type
if (false === ($proposedValue instanceof ormCaseLog)) {
return parent::HasAValue($proposedValue);
}
// We test if there is at least 1 entry in the log, not if the user is adding one
return $proposedValue->GetEntryCount() > 0;
}
public function ScalarToSQL($value)
{
if (!is_string($value) && !is_null($value))
@@ -6798,6 +6883,14 @@ class AttributeExternalKey extends AttributeDBFieldVoid
return ($proposedValue == 0);
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
return ((int) $proposedValue) !== 0;
}
public function MakeRealValue($proposedValue, $oHostObj)
{
if (is_null($proposedValue))
@@ -7530,6 +7623,16 @@ class AttributeExternalField extends AttributeDefinition
return $oExtAttDef->IsNull($proposedValue);
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
$oExtAttDef = $this->GetExtAttDef();
return $oExtAttDef->HasAValue($proposedValue);
}
public function MakeRealValue($proposedValue, $oHostObj)
{
$oExtAttDef = $this->GetExtAttDef();
@@ -7664,6 +7767,17 @@ class AttributeExternalField extends AttributeDefinition
*/
class AttributeURL extends AttributeString
{
/**
* @var string
* SCHEME....... USER....................... PASSWORD.......................... HOST/IP........... PORT.......... PATH......................... GET............................................ ANCHOR..........................
* Example: http://User:passWord@127.0.0.1:8888/patH/Page.php?arrayArgument[2]=something:blah20#myAnchor
* @link http://www.php.net/manual/fr/function.preg-match.php#93824 regexp source
* @since 3.0.1 N°4515 handle Alfresco and Sharepoint URLs
* @since 3.0.3 moved from Config to AttributeURL constant
*/
public const DEFAULT_VALIDATION_PATTERN = /** @lang RegExp */
'(https?|ftp)\://([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;?&=\$_.-]+)?@)?([a-zA-Z0-9-.]{3,})(\:[0-9]{2,5})?(/([a-zA-Z0-9:%+\$_-]\.?)+)*/?(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:[\]@&%=+/\$_.,-]*)?(#[a-zA-Z0-9_.-][a-zA-Z0-9+\$_.-]*)?';
/**
* Useless constructor, but if not present PHP 7.4.0/7.4.1 is crashing :( (N°2329)
*
@@ -8105,6 +8219,20 @@ class AttributeBlob extends AttributeDefinition
return $oFormField;
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
if (false === ($proposedValue instanceof ormDocument)) {
return parent::HasAValue($proposedValue);
}
// Empty file (no content, just a filename) are supported since PR {@link https://github.com/Combodo/combodo-email-synchro/pull/17}, so we check for both empty content and empty filename to determine that a document has no value
return utils::IsNotNullOrEmptyString($proposedValue->GetData()) && utils::IsNotNullOrEmptyString($proposedValue->GetFileName());
}
}
/**
@@ -9131,6 +9259,17 @@ class AttributeStopWatch extends AttributeDefinition
return $sRet;
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
// A stopwatch always has a value
return true;
}
}
/**
@@ -9616,6 +9755,23 @@ class AttributeOneWayPassword extends AttributeDefinition implements iAttributeN
return '*****';
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
// Protection against wrong value type
if (false === ($proposedValue instanceof ormPassword)) {
// On object creation, the attribute value is "" instead of an ormPassword...
if (is_string($proposedValue)) {
return utils::IsNotNullOrEmptyString($proposedValue);
}
return parent::HasAValue($proposedValue);
}
return $proposedValue->IsEmpty() === false;
}
}
// Indexed array having two dimensions
@@ -9665,6 +9821,15 @@ class AttributeTable extends AttributeDBField
return (count($proposedValue) == 0);
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
return count($proposedValue) > 0;
}
public function GetEditValue($sValue, $oHostObj = null)
{
return '';
@@ -10186,6 +10351,18 @@ abstract class AttributeSet extends AttributeDBFieldVoid
return $proposedValue->Count() == 0;
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
if (false === ($proposedValue instanceof ormSet)) {
return parent::HasAValue($proposedValue);
}
return $proposedValue->Count() > 0;
}
/**
* To be overloaded for localized enums
*
@@ -12893,6 +13070,21 @@ class AttributeCustomFields extends AttributeDefinition
return $bEquals;
}
/**
* @inheritDoc
*/
public function HasAValue($proposedValue): bool
{
// Protection against wrong value type
if (false === ($proposedValue instanceof ormCustomFieldsValue)) {
return parent::HasAValue($proposedValue);
}
return count($proposedValue->GetValues()) > 0;
}
}
class AttributeArchiveFlag extends AttributeBoolean

View File

@@ -11,7 +11,7 @@ define('UTF8_BOM', chr(239).chr(187).chr(191)); // 0xEF, 0xBB, 0xBF
/**
* CellChangeSpec
* A series of classes, keeping the information about a given cell: could it be changed or not (and why)?
* A series of classes, keeping the information about a given cell: could it be changed or not (and why)?
*
* @package iTopORM
*/
@@ -144,7 +144,7 @@ class CellStatus_Ambiguous extends CellStatus_Issue
/**
* RowStatus
* A series of classes, keeping the information about a given row: could it be changed or not (and why)?
* A series of classes, keeping the information about a given row: could it be changed or not (and why)?
*
* @package iTopORM
*/
@@ -220,7 +220,7 @@ class RowStatus_Issue extends RowStatus
*/
class BulkChange
{
protected $m_sClass;
protected $m_sClass;
protected $m_aData; // Note: hereafter, iCol maybe actually be any acceptable key (string)
// #@# todo: rename the variables to sColIndex
protected $m_aAttList; // attcode => iCol
@@ -261,7 +261,7 @@ class BulkChange
$this->m_sReportCsvSep = $sSeparator;
$this->m_sReportCsvDelimiter = $sDelimiter;
}
protected function ResolveExternalKey($aRowData, $sAttCode, &$aResults)
{
$oExtKey = MetaModel::GetAttributeDef($this->m_sClass, $sAttCode);
@@ -318,7 +318,7 @@ class BulkChange
{
$aResults = array();
$aErrors = array();
// External keys reconciliation
//
foreach($this->m_aExtKeys as $sAttCode => $aKeyConfig)
@@ -408,12 +408,12 @@ class BulkChange
$aErrors[$sAttCode] = Dict::S('UI:CSVReport-Value-Issue-NotFound');
$aResults[$sAttCode]= new CellStatus_SearchIssue();
break;
case 1:
// Do change the external key attribute
$oTargetObj->Set($sAttCode, $iForeignKey);
break;
default:
$aErrors[$sAttCode] = Dict::Format('UI:CSVReport-Value-Issue-FoundMany', $iCount);
$aResults[$sAttCode]= new CellStatus_Ambiguous($oTargetObj->Get($sAttCode), $iCount, $sOQL);
@@ -446,7 +446,7 @@ class BulkChange
}
}
}
// Set the object attributes
//
foreach ($this->m_aAttList as $sAttCode => $iCol)
@@ -467,30 +467,21 @@ class BulkChange
$iFlags = ($oTargetObj->IsNew())
? $oTargetObj->GetInitialStateAttributeFlags($sAttCode, $aReasons)
: $oTargetObj->GetAttributeFlags($sAttCode, $aReasons);
if ( (($iFlags & OPT_ATT_READONLY) == OPT_ATT_READONLY) && ( $oTargetObj->Get($sAttCode) != $aRowData[$iCol]) ) {
if ((($iFlags & OPT_ATT_READONLY) == OPT_ATT_READONLY) && ($oTargetObj->Get($sAttCode) != $oAttDef->MakeValueFromString($aRowData[$iCol], $this->m_bLocalizedValues))) {
$aErrors[$sAttCode] = Dict::Format('UI:CSVReport-Value-Issue-Readonly', $sAttCode, $oTargetObj->Get($sAttCode), $aRowData[$iCol]);
}
else if ($oAttDef->IsLinkSet() && $oAttDef->IsIndirect())
{
try
{
} else if ($oAttDef->IsLinkSet() && $oAttDef->IsIndirect()) {
try {
$oSet = $oAttDef->MakeValueFromString($aRowData[$iCol], $this->m_bLocalizedValues);
$oTargetObj->Set($sAttCode, $oSet);
}
catch(CoreException $e)
{
catch (CoreException $e) {
$aErrors[$sAttCode] = Dict::Format('UI:CSVReport-Value-Issue-Format', $e->getMessage());
}
}
else
{
} else {
$value = $oAttDef->MakeValueFromString($aRowData[$iCol], $this->m_bLocalizedValues);
if (is_null($value) && (strlen($aRowData[$iCol]) > 0))
{
if (is_null($value) && (strlen($aRowData[$iCol]) > 0)) {
$aErrors[$sAttCode] = Dict::Format('UI:CSVReport-Value-Issue-NoMatch', $sAttCode);
}
else
{
} else {
$res = $oTargetObj->CheckValue($sAttCode, $value);
if ($res === true)
{
@@ -504,7 +495,7 @@ class BulkChange
}
}
}
// Reporting on fields
//
$aChangedFields = $oTargetObj->ListChanges();
@@ -556,7 +547,7 @@ class BulkChange
}
}
}
// Checks
//
$res = $oTargetObj->CheckConsistency();
@@ -567,12 +558,12 @@ class BulkChange
}
return $aResults;
}
protected function PrepareMissingObject(&$oTargetObj, &$aErrors)
{
$aResults = array();
$aErrors = array();
// External keys
//
foreach($this->m_aExtKeys as $sAttCode => $aKeyConfig)
@@ -585,7 +576,7 @@ class BulkChange
$aResults[$iCol] = new CellStatus_Void('?');
}
}
// Update attributes
//
foreach($this->m_aOnDisappear as $sAttCode => $value)
@@ -596,7 +587,7 @@ class BulkChange
}
$oTargetObj->Set($sAttCode, $value);
}
// Reporting on fields
//
$aChangedFields = $oTargetObj->ListChanges();
@@ -616,7 +607,7 @@ class BulkChange
$aResults[$iCol]= new CellStatus_Void($oTargetObj->Get($sAttCode));
}
}
// Checks
//
$res = $oTargetObj->CheckConsistency();
@@ -674,14 +665,14 @@ class BulkChange
}
$aResult[$iRow] = $this->PrepareObject($oTargetObj, $aRowData, $aErrors);
if (count($aErrors) > 0)
{
$sErrors = implode(', ', $aErrors);
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue(Dict::S('UI:CSVReport-Row-Issue-Attribute'));
return $oTargetObj;
}
// Check that any external key will have a value proposed
$aMissingKeys = array();
foreach (MetaModel::GetExternalKeys($this->m_sClass) as $sExtKeyAttCode => $oExtKey)
@@ -689,7 +680,7 @@ class BulkChange
if (!$oExtKey->IsNullAllowed())
{
if (!array_key_exists($sExtKeyAttCode, $this->m_aExtKeys) && !array_key_exists($sExtKeyAttCode, $this->m_aAttList))
{
{
$aMissingKeys[] = $oExtKey->GetLabel();
}
}
@@ -747,12 +738,12 @@ class BulkChange
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue(Dict::S('UI:CSVReport-Row-Issue-Attribute'));
return;
}
$aChangedFields = $oTargetObj->ListChanges();
if (count($aChangedFields) > 0)
{
$aResult[$iRow]["__STATUS__"] = new RowStatus_Modify(count($aChangedFields));
// Optionaly record the results
//
if ($oChange)
@@ -796,7 +787,7 @@ class BulkChange
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue(Dict::S('UI:CSVReport-Row-Issue-Attribute'));
return;
}
$aChangedFields = $oTargetObj->ListChanges();
if (count($aChangedFields) > 0)
{
@@ -821,7 +812,7 @@ class BulkChange
$aResult[$iRow]["__STATUS__"] = new RowStatus_Disappeared(0);
}
}
public function Process(CMDBChange $oChange = null)
{
if ($oChange)
@@ -866,7 +857,7 @@ class BulkChange
foreach ($this->m_aAttList as $sAttCode => $iCol)
{
if ($sAttCode == 'id') continue;
$oAttDef = MetaModel::GetAttributeDef($this->m_sClass, $sAttCode);
if ($oAttDef instanceof AttributeDateTime) // AttributeDate is derived from AttributeDateTime
{
@@ -953,22 +944,22 @@ class BulkChange
{
// The value has to be found or verified
list($sQuery, $aMatches) = $this->ResolveExternalKey($aRowData, $sAttCode, $aResult[$iRow]);
if (count($aMatches) == 1)
{
$oRemoteObj = reset($aMatches); // first item
$valuecondition = $oRemoteObj->GetKey();
$aResult[$iRow][$sAttCode] = new CellStatus_Void($oRemoteObj->GetKey());
}
}
elseif (count($aMatches) == 0)
{
$aResult[$iRow][$sAttCode] = new CellStatus_SearchIssue();
}
}
else
{
$aResult[$iRow][$sAttCode] = new CellStatus_Ambiguous(null, count($aMatches), $sQuery);
}
}
}
}
else
{
@@ -990,7 +981,7 @@ class BulkChange
}
else
{
$oReconciliationFilter->AddCondition($sAttCode, $valuecondition, '=');
$oReconciliationFilter->AddCondition($sAttCode, $valuecondition, '=', true);
}
}
if ($bSkipQuery)
@@ -1110,7 +1101,7 @@ class BulkChange
}
}
$oBulkChanges->Seek(0);
$aDetails = array();
while ($oChange = $oBulkChanges->Fetch())
{
@@ -1274,7 +1265,7 @@ EOF
$oOldTarget = MetaModel::GetObject($oAttDef->GetTargetClass(), $oOperation->Get('oldvalue'));
$sOldValue = $oOldTarget->GetHyperlink();
}
$sNewValue = Dict::S('UI:UndefinedObject');
if ($oOperation->Get('newvalue') != 0)
{
@@ -1300,11 +1291,11 @@ EOF
}
else
{
$aAttributes[$sAttCode] = 1;
$aAttributes[$sAttCode] = 1;
}
}
}
$aDetails = array();
foreach($aObjects as $iUId => $aObjData)
{
@@ -1356,6 +1347,6 @@ EOF
$aConfig[$sAttCode] = array('label' => MetaModel::GetLabel($sClass, $sAttCode), 'description' => MetaModel::GetDescription($sClass, $sAttCode));
}
$oPage->table($aConfig, $aDetails);
}
}
}

View File

@@ -576,13 +576,29 @@ class Config
'source_of_value' => '',
'show_in_conf_sample' => false,
],
'email_css' => [
'type' => 'string',
'description' => 'CSS that will override the standard stylesheet used for the notifications',
'default' => "",
'value' => "",
'email_transport_smtp.allow_self_signed' => array(
'type' => 'bool',
'description' => 'Allow self signed peer certificates',
'default' => false,
'value' => false,
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'email_transport_smtp.verify_peer' => array(
'type' => 'bool',
'description' => 'Verify peer certificate',
'default' => true,
'value' => true,
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'email_css' => [
'type' => 'string',
'description' => 'CSS that will override the standard stylesheet used for the notifications',
'default' => "",
'value' => "",
'source_of_value' => '',
'show_in_conf_sample' => false,
],
'email_default_sender_address' => [
'type' => 'string',
@@ -883,16 +899,11 @@ class Config
'show_in_conf_sample' => false,
],
'url_validation_pattern' => [
'type' => 'string',
'description' => 'Regular expression to validate/detect the format of an URL (URL attributes and Wiki formatting for Text attributes)',
'default' => /** @lang RegExp */
'(https?|ftp)\://([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;?&=\$_.-]+)?@)?([a-zA-Z0-9-.]{3,})(\:[0-9]{2,5})?(/([a-zA-Z0-9:%+\$_-]\.?)+)*/?(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:[\]@&%=+/\$_.-]*)?(#[a-zA-Z0-9_.-][a-zA-Z0-9+\$_.-]*)?',
// SCHEME....... USER....................... PASSWORD.......................... HOST/IP........... PORT.......... PATH......................... GET............................................ ANCHOR..........................
// Example: http://User:passWord@127.0.0.1:8888/patH/Page.php?arrayArgument[2]=something:blah20#myAnchor
// RegExp source: http://www.php.net/manual/fr/function.preg-match.php#93824
// Update with N°4515
'value' => '',
'source_of_value' => '',
'type' => 'string',
'description' => 'Regular expression to validate/detect the format of an URL (URL attributes and Wiki formatting for Text attributes)',
'default' => AttributeURL::DEFAULT_VALIDATION_PATTERN,
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => true,
],
'email_validation_pattern' => [

View File

@@ -396,6 +396,8 @@ abstract class DBObject implements iDisplay
$this->m_aOrigValues = array();
$this->m_aLoadedAtt = array();
$this->m_bCheckStatus = true;
$this->m_aCheckIssues = [];
$this->m_bSecurityIssue = [];
// Get the key
//
@@ -2790,12 +2792,6 @@ abstract class DBObject implements iDisplay
$this->DoComputeValues();
$this->OnInsert();
if ($this->m_iKey < 0)
{
// This was a temporary "memory" key: discard it so that DBInsertSingleTable will not try to use it!
$this->m_iKey = null;
}
// If not automatically computed, then check that the key is given by the caller
if (!MetaModel::IsAutoIncrementKey($sRootClass))
{
@@ -2812,6 +2808,12 @@ abstract class DBObject implements iDisplay
throw new CoreCannotSaveObjectException(array('issues' => $aIssues, 'class' => get_class($this), 'id' => $this->GetKey()));
}
if ($this->m_iKey < 0)
{
// This was a temporary "memory" key: discard it so that DBInsertSingleTable will not try to use it!
$this->m_iKey = null;
}
// Stop watches
$sState = $this->GetState();
if ($sState != '')
@@ -2923,13 +2925,14 @@ abstract class DBObject implements iDisplay
$oSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnObjectCreate AS t WHERE t.target_class IN (:class_list)"), array(), $aParams);
while ($oTrigger = $oSet->Fetch())
{
/** @var \Trigger $oTrigger */
/** @var \TriggerOnObjectCreate $oTrigger */
try
{
$oTrigger->DoActivate($this->ToArgs('this'));
}
catch(Exception $e)
{
$oTrigger->LogException($e, $this);
utils::EnrichRaisedException($oTrigger, $e);
}
}
@@ -3394,6 +3397,7 @@ abstract class DBObject implements iDisplay
$oTrigger->DoActivate($this->ToArgs('this'));
}
catch (Exception $e) {
$oTrigger->LogException($e, $this);
utils::EnrichRaisedException($oTrigger, $e);
}
}
@@ -3573,13 +3577,13 @@ abstract class DBObject implements iDisplay
$aParams);
while ($oTrigger = $oSet->Fetch())
{
/** @var \Trigger $oTrigger */
/** @var \TriggerOnObjectDelete $oTrigger */
try
{
$oTrigger->DoActivate($this->ToArgs('this'));
}
catch(Exception $e)
{
catch(Exception $e) {
$oTrigger->LogException($e, $this);
utils::EnrichRaisedException($oTrigger, $e);
}
}
@@ -3968,6 +3972,7 @@ abstract class DBObject implements iDisplay
$oTrigger->DoActivate($this->ToArgs('this'));
}
catch (Exception $e) {
$oTrigger->LogException($e, $this);
utils::EnrichRaisedException($oTrigger, $e);
}
}
@@ -3979,6 +3984,7 @@ abstract class DBObject implements iDisplay
$oTrigger->DoActivate($this->ToArgs('this'));
}
catch (Exception $e) {
$oTrigger->LogException($e, $this);
utils::EnrichRaisedException($oTrigger, $e);
}
}
@@ -3995,6 +4001,20 @@ abstract class DBObject implements iDisplay
return $bSuccess;
}
/**
* @param string $sAttCode
*
* @return bool True if $sAttCode has an actual value set, false is the attribute remains "empty"
* @throws \ArchivedObjectException
* @throws \CoreException
* @since 3.0.3, 3.1.0 N°5784
*/
public function HasAValue(string $sAttCode): bool
{
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
return $oAttDef->HasAValue($this->Get($sAttCode));
}
/**
* Helper to recover the default value (aka when an object is being created)
* Suitable for use as a lifecycle action

View File

@@ -773,14 +773,14 @@ abstract class DBSearch
* @see DBSearch::ToOQL()
*
* @param string $sQuery The OQL to convert to a DBSearch
* @param mixed[string] $aParams array of <mixed> params index by <string> name
* @param array $aParams array of <mixed> params index by <string> name
* @param ModelReflection|null $oMetaModel The MetaModel to use when checking the consistency of the OQL
*
* @return DBObjectSearch|DBUnionSearch
*
* @throws OQLException
*/
static public function FromOQL($sQuery, $aParams = null, ModelReflection $oMetaModel=null)
public static function FromOQL($sQuery, $aParams = null, ModelReflection $oMetaModel=null)
{
if (empty($sQuery))
{

View File

@@ -34,32 +34,36 @@ abstract class HTMLSanitizer
/**
* Sanitize an HTML string with the configured sanitizer, falling back to HTMLDOMSanitizer in case of Exception or invalid configuration
*
* @param string $sHTML
* @param string $sConfigKey eg. 'html_sanitizer', 'svg_sanitizer'
*
* @return string
*/
public static function Sanitize($sHTML)
public static function Sanitize($sHTML, $sConfigKey = 'html_sanitizer')
{
$sSanitizerClass = MetaModel::GetConfig()->Get('html_sanitizer');
if(!class_exists($sSanitizerClass))
{
IssueLog::Warning('The configured "html_sanitizer" class "'.$sSanitizerClass.'" is not a valid class. Will use HTMLDOMSanitizer as the default sanitizer.');
$sSanitizerClass = 'HTMLDOMSanitizer';
}
else if(!is_subclass_of($sSanitizerClass, 'HTMLSanitizer'))
{
IssueLog::Warning('The configured "html_sanitizer" class "'.$sSanitizerClass.'" is not a subclass of HTMLSanitizer. Will use HTMLDOMSanitizer as the default sanitizer.');
$sSanitizerClass = utils::GetConfig()->Get($sConfigKey);
if (!class_exists($sSanitizerClass)) {
IssueLog::Warning('The configured "'.$sConfigKey.'" class "'.$sSanitizerClass.'" is not a valid class. Will use HTMLDOMSanitizer as the default sanitizer.');
$sSanitizerClass = 'HTMLDOMSanitizer';
} else if (!is_subclass_of($sSanitizerClass, 'HTMLSanitizer')) {
if ($sConfigKey === 'html_sanitizer') {
IssueLog::Warning('The configured "'.$sConfigKey.'" class "'.$sSanitizerClass.'" is not a subclass of HTMLSanitizer. Will use HTMLDOMSanitizer as the default sanitizer.');
$sSanitizerClass = 'HTMLDOMSanitizer';
}
if ($sConfigKey === 'svg_sanitizer') {
IssueLog::Error('The configured "'.$sConfigKey.'" class "'.$sSanitizerClass.'" is not a subclass of '.HTMLSanitizer::class.' ! Won\'t sanitize string.');
return $sHTML;
}
}
try
{
try {
$oSanitizer = new $sSanitizerClass();
$sCleanHTML = $oSanitizer->DoSanitize($sHTML);
}
catch(Exception $e)
{
if($sSanitizerClass != 'HTMLDOMSanitizer')
{
catch (Exception $e) {
if ($sSanitizerClass != 'HTMLDOMSanitizer') {
IssueLog::Warning('Failed to sanitize an HTML string with "'.$sSanitizerClass.'". The following exception occured: '.$e->getMessage());
IssueLog::Warning('Will try to sanitize with HTMLDOMSanitizer.');
// try again with the HTMLDOMSanitizer

View File

@@ -242,7 +242,7 @@ class InlineImage extends DBObject
public static function OnFormCancel($sTempId): bool
{
// Protection against unfortunate massive delete of inline images when a null temp ID is passed
if (strlen($sTempId) === 0) {
if (utils::IsNullOrEmptyString($sTempId)) {
IssueLog::Trace('OnFormCancel "error" $sTempId is null or empty', LogChannels::INLINE_IMAGE, array(
'$sTempId' => $sTempId,
'$sUser' => UserRights::GetUser(),

View File

@@ -544,13 +544,6 @@ class LogChannels
{
public const APC = 'apc';
/**
* @var string
* @since 3.0.1 N°4849
* @since 2.7.7 N°4635
*/
public const NOTIFICATIONS = 'notifications';
/**
* @since 3.0.0
*/
@@ -572,8 +565,21 @@ class LogChannels
public const DEADLOCK = 'DeadLock';
/**
* @var string
* @since 2.7.9 3.0.3 3.1.0 N°5588
*/
public const EXPORT = 'export';
public const INLINE_IMAGE = 'InlineImage';
/**
* @var string
* @since 3.0.1 N°4849
* @since 2.7.7 N°4635
*/
public const NOTIFICATIONS = 'notifications';
public const PORTAL = 'portal';
}
@@ -1022,6 +1028,7 @@ class DeprecatedCallsLog extends LogAPI
public const ENUM_CHANNEL_FILE = 'deprecated-file';
public const CHANNEL_DEFAULT = self::ENUM_CHANNEL_PHP_METHOD;
/** @var string Warning this constant won't be used directly ! To see the real default level check {@see GetLevelDefault()} */
public const LEVEL_DEFAULT = self::LEVEL_ERROR;
/** @var \FileLog we want our own instance ! */
@@ -1096,7 +1103,12 @@ class DeprecatedCallsLog extends LogAPI
}
$aStack = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 4);
$iStackDeprecatedMethodLevel = 2; // level 0 = current method, level 1 = @trigger_error, level 2 = method containing the `trigger_error` call
$iStackDeprecatedMethodLevel = 2; // level 0 = current method, level 1 = @trigger_error, level 2 = method containing the `trigger_error` call (can be either 'trigger_deprecation' or the faulty method), level 3 = In some cases, method containing the 'trigger_deprecation' call
// In case current level is actually a 'trigger_deprecation' call, try to go one level further to get the real deprecated method
if (array_key_exists($iStackDeprecatedMethodLevel, $aStack) && ($aStack[$iStackDeprecatedMethodLevel]['function'] === 'trigger_deprecation') && array_key_exists($iStackDeprecatedMethodLevel + 1, $aStack)) {
$iStackDeprecatedMethodLevel++;
}
$sDeprecatedObject = $aStack[$iStackDeprecatedMethodLevel]['class'];
$sDeprecatedMethod = $aStack[$iStackDeprecatedMethodLevel]['function'];
if (($sDeprecatedObject === __CLASS__) && ($sDeprecatedMethod === 'Log')) {
@@ -1141,7 +1153,6 @@ class DeprecatedCallsLog extends LogAPI
* - else call parent method
*
* In other words, when in dev mode all deprecated calls will be logged to file
*
*/
protected static function GetLevelDefault(string $sConfigKey)
{

View File

@@ -66,7 +66,7 @@ class ormPassword
public function IsEmpty()
{
return ($this->m_hashed == null);
return utils::IsNullOrEmptyString($this->m_sHashed);
}
public function GetHash()

View File

@@ -21,6 +21,19 @@ use Combodo\iTop\Application\UI\Base\Layout\MultiColumn\MultiColumnUIBlockFactor
*/
class PDFBulkExport extends HTMLBulkExport
{
/**
* @var string For sample purposes
* @internal
* @since 2.7.8
*/
const ENUM_OUTPUT_TYPE_SAMPLE = 'sample';
/**
* @var string For the real export
* @internal
* @since 2.7.8
*/
const ENUM_OUTPUT_TYPE_REAL = 'real';
public function DisplayUsage(Page $oP)
{
$oP->p(" * pdf format options:");
@@ -197,46 +210,46 @@ EOF
return $sPDF;
}
/**
* @inheritDoc
* @since 2.7.8
*/
protected function GetSampleData($oObj, $sAttCode)
{
if ($sAttCode !== 'id')
{
$oAttDef = MetaModel::GetAttributeDef(get_class($oObj), $sAttCode);
// As sample data will be displayed in the web browser, AttributeImage needs to be rendered with a regular HTML format, meaning its "src" looking like "data:image/png;base64,iVBORw0KGgoAAAANSUh..."
// Whereas for the PDF generation it needs to be rendered with a TCPPDF-compatible format, meaning its "src" looking like "@iVBORw0KGgoAAAANSUh..."
if ($oAttDef instanceof AttributeImage) {
return $this->GetAttributeImageValue($oObj, $sAttCode, static::ENUM_OUTPUT_TYPE_SAMPLE);
}
}
return parent::GetSampleData($oObj, $sAttCode);
}
/**
* @param \DBObject $oObj
* @param string $sAttCode
*
* @return int|string
* @throws \Exception
*/
protected function GetValue($oObj, $sAttCode)
{
switch($sAttCode)
{
switch ($sAttCode) {
case 'id':
$sRet = parent::GetValue($oObj, $sAttCode);
break;
default:
$value = $oObj->Get($sAttCode);
if ($value instanceof ormDocument)
{
if ($value instanceof ormDocument) {
$oAttDef = MetaModel::GetAttributeDef(get_class($oObj), $sAttCode);
if ($oAttDef instanceof AttributeImage)
{
// To limit the image size in the PDF output, we have to enforce the size as height/width because max-width/max-height have no effect
//
$iDefaultMaxWidthPx = 48;
$iDefaultMaxHeightPx = 48;
if ($value->IsEmpty())
{
$iNewWidth = $iDefaultMaxWidthPx;
$iNewHeight = $iDefaultMaxHeightPx;
$sUrl = $oAttDef->Get('default_image');
}
else
{
list($iWidth, $iHeight) = utils::GetImageSize($value->GetData());
$iMaxWidthPx = min($iDefaultMaxWidthPx, $oAttDef->Get('display_max_width'));
$iMaxHeightPx = min($iDefaultMaxHeightPx, $oAttDef->Get('display_max_height'));
$fScale = min($iMaxWidthPx / $iWidth, $iMaxHeightPx / $iHeight);
$iNewWidth = $iWidth * $fScale;
$iNewHeight = $iHeight * $fScale;
$sUrl = 'data:'.$value->GetMimeType().';base64,'.base64_encode($value->GetData());
}
$sRet = ($sUrl !== null) ? '<img src="'.$sUrl.'" style="width: '.$iNewWidth.'px; height: '.$iNewHeight.'px">' : '';
$sRet = '<div class="ibo-input-image--image-view">'.$sRet.'</div>';
$sRet = $this->GetAttributeImageValue($oObj, $sAttCode, static::ENUM_OUTPUT_TYPE_REAL);
}
else
{
@@ -251,6 +264,76 @@ EOF
return $sRet;
}
/**
* @param \DBObject $oObj
* @param string $sAttCode
* @param string $sOutputType {@see \PDFBulkExport::ENUM_OUTPUT_TYPE_SAMPLE}, {@see \PDFBulkExport::ENUM_OUTPUT_TYPE_REAL}
*
* @return string Rendered value of $oAttDef / $oValue according to the desired $sOutputType
* @throws \ArchivedObjectException
* @throws \CoreException
*
* @since 2.7.8 N°2244 method creation
* @since 2.7.9 N°5588 signature change to get the object so that we can log all the needed information
*/
protected function GetAttributeImageValue(DBObject $oObj, string $sAttCode, string $sOutputType)
{
$oValue = $oObj->Get($sAttCode);
$oAttDef = MetaModel::GetAttributeDef(get_class($oObj), $sAttCode);
// To limit the image size in the PDF output, we have to enforce the size as height/width because max-width/max-height have no effect
//
$iDefaultMaxWidthPx = 48;
$iDefaultMaxHeightPx = 48;
if ($oValue->IsEmpty()) {
$iNewWidth = $iDefaultMaxWidthPx;
$iNewHeight = $iDefaultMaxHeightPx;
$sUrl = $oAttDef->Get('default_image');
} else {
$iMaxWidthPx = min($iDefaultMaxWidthPx, $oAttDef->Get('display_max_width'));
$iMaxHeightPx = min($iDefaultMaxHeightPx, $oAttDef->Get('display_max_height'));
list($iWidth, $iHeight) = utils::GetImageSize($oValue->GetData());
if ((is_null($iWidth)) || (is_null($iHeight)) || ($iWidth === 0) || ($iHeight === 0)) {
// Avoid division by zero exception (SVGs, corrupted images, ...)
$iNewWidth = $iDefaultMaxWidthPx;
$iNewHeight = $iDefaultMaxHeightPx;
$sAttCode = $oAttDef->GetCode();
IssueLog::Warning('AttributeImage: Cannot read image size', LogChannels::EXPORT, [
'ObjClass' => get_class($oObj),
'ObjKey' => $oObj->GetKey(),
'ObjFriendlyName' => $oObj->GetName(),
'AttCode' => $sAttCode,
]);
} else {
$fScale = min($iMaxWidthPx / $iWidth, $iMaxHeightPx / $iHeight);
$iNewWidth = $iWidth * $fScale;
$iNewHeight = $iHeight * $fScale;
}
$sValueAsBase64 = base64_encode($oValue->GetData());
switch ($sOutputType) {
case static::ENUM_OUTPUT_TYPE_SAMPLE:
$sUrl = 'data:'.$oValue->GetMimeType().';base64,'.$sValueAsBase64;
break;
case static::ENUM_OUTPUT_TYPE_REAL:
default:
// TCPDF requires base64-encoded images to be rendered without the usual "data:<MIMETYPE>;base64" header but with an "@"
// @link https://tcpdf.org/examples/example_009/
$sUrl = '@'.$sValueAsBase64;
break;
}
}
$sRet = ($sUrl !== null) ? '<img src="'.$sUrl.'" style="width: '.$iNewWidth.'px; height: '.$iNewHeight.'px;">' : '';
$sRet = '<div class="ibo-input-image--image-view">'.$sRet.'</div>';
return $sRet;
}
public function GetSupportedFormats()
{
return array('pdf' => Dict::S('Core:BulkExport:PDFFormat'));

View File

@@ -30,18 +30,40 @@
/**
* Element of the response formed by RestResultWithObjects
*
* @package REST Services
* @package RESTExtensibilityAPI
* @api
*/
class ObjectResult
{
/**
* @var int
* @api
*/
public $code;
/**
* @var string
* @api
*/
public $message;
/**
* @var mixed|null
* @api
*/
public $class;
/**
* @var mixed|null
* @api
*/
public $key;
/**
* @var array
* @api
*/
public $fields;
/**
* Default constructor
* @api
*/
public function __construct($sClass = null, $iId = null)
{
@@ -54,11 +76,17 @@ class ObjectResult
/**
* Helper to make an output value for a given attribute
*
*
* @api
* @param DBObject $oObject The object being reported
* @param string $sAttCode The attribute code (must be valid)
* @param boolean $bExtendedOutput Output all of the link set attributes ?
*
* @return string A scalar representation of the value
* @throws \ArchivedObjectException
* @throws \CoreException
* @throws \CoreUnexpectedValue
* @throws \MySQLException
*/
protected function MakeResultValue(DBObject $oObject, $sAttCode, $bExtendedOutput = false)
{
@@ -112,11 +140,17 @@ class ObjectResult
/**
* Report the value for the given object attribute
*
*
* @api
* @param DBObject $oObject The object being reported
* @param string $sAttCode The attribute code (must be valid)
* @param boolean $bExtendedOutput Output all of the link set attributes ?
*
* @return void
* @throws \ArchivedObjectException
* @throws \CoreException
* @throws \CoreUnexpectedValue
* @throws \MySQLException
*/
public function AddField(DBObject $oObject, $sAttCode, $bExtendedOutput = false)
{
@@ -129,8 +163,7 @@ class ObjectResult
/**
* REST response for services managing objects. Derive this structure to add information and/or constants
*
* @package Extensibility
* @package REST Services
* @package RESTExtensibilityAPI
* @api
*/
class RestResultWithObjects extends RestResult
@@ -139,13 +172,19 @@ class RestResultWithObjects extends RestResult
/**
* Report the given object
*
* @param int An error code (RestResult::OK is no issue has been found)
*
* @api
* @param int $iCode An error code (RestResult::OK is no issue has been found)
* @param string $sMessage Description of the error if any, an empty string otherwise
* @param DBObject $oObject The object being reported
* @param array $aFieldSpec An array of class => attribute codes (Cf. RestUtils::GetFieldList). List of the attributes to be reported.
* @param array|null $aFieldSpec An array of class => attribute codes (Cf. RestUtils::GetFieldList). List of the attributes to be reported.
* @param boolean $bExtendedOutput Output all of the link set attributes ?
*
* @return void
* @throws \ArchivedObjectException
* @throws \CoreException
* @throws \CoreUnexpectedValue
* @throws \MySQLException
*/
public function AddObject($iCode, $sMessage, $oObject, $aFieldSpec = null, $bExtendedOutput = false)
{
@@ -183,16 +222,30 @@ class RestResultWithObjects extends RestResult
}
}
/**
* @package RESTExtensibilityAPI
* @api
*/
class RestResultWithRelations extends RestResultWithObjects
{
public $relations;
/**
* @api
*/
public function __construct()
{
parent::__construct();
$this->relations = array();
}
/**
* @param $sSrcKey
* @param $sDestKey
*
* @return void
* @api
*/
public function AddRelation($sSrcKey, $sDestKey)
{
if (!array_key_exists($sSrcKey, $this->relations))
@@ -206,7 +259,7 @@ class RestResultWithRelations extends RestResultWithObjects
/**
* Deletion result codes for a target object (either deleted or updated)
*
* @package Extensibility
* @package RESTExtensibilityAPI
* @api
* @since 2.0.1
*/
@@ -214,30 +267,37 @@ class RestDelete
{
/**
* Result: Object deleted as per the initial request
* @api
*/
const OK = 0;
/**
* Result: general issue (user rights or ... ?)
* Result: general issue (user rights or ... ?)
* @api
*/
const ISSUE = 1;
/**
* Result: Must be deleted to preserve database integrity
* Result: Must be deleted to preserve database integrity
* @api
*/
const AUTO_DELETE = 2;
/**
* Result: Must be deleted to preserve database integrity, but that is NOT possible
* Result: Must be deleted to preserve database integrity, but that is NOT possible
* @api
*/
const AUTO_DELETE_ISSUE = 3;
/**
* Result: Must be deleted to preserve database integrity, but this must be requested explicitely
* Result: Must be deleted to preserve database integrity, but this must be requested explicitly
* @api
*/
const REQUEST_EXPLICITELY = 4;
/**
* Result: Must be updated to preserve database integrity
* @api
*/
const AUTO_UPDATE = 5;
/**
* Result: Must be updated to preserve database integrity, but that is NOT possible
* @api
*/
const AUTO_UPDATE_ISSUE = 6;
}

View File

@@ -250,21 +250,48 @@ abstract class TriggerOnObject extends Trigger
public function IsTargetObject($iObjectId, $aChanges = array())
{
$sFilter = trim($this->Get('filter'));
if (strlen($sFilter) > 0)
{
if (strlen($sFilter) > 0) {
$oSearch = DBObjectSearch::FromOQL($sFilter);
$oSearch->AddCondition('id', $iObjectId, '=');
$oSearch->AllowAllData();
$oSet = new DBObjectSet($oSearch);
$bRet = ($oSet->Count() > 0);
}
else
{
} else {
$bRet = true;
}
return $bRet;
}
/**
* @param Exception $oException
* @param \DBObject $oObject
*
* @return void
*
* @uses \IssueLog::Error()
*
* @since 2.7.9 3.0.3 3.1.0 N°5893
*/
public function LogException($oException, $oObject)
{
$sObjectKey = $oObject->GetKey(); // if object wasn't persisted yet, then we'll have a negative value
$aContext = [
'exception.class' => get_class($oException),
'exception.message' => $oException->getMessage(),
'trigger.class' => get_class($this),
'trigger.id' => $this->GetKey(),
'trigger.friendlyname' => $this->GetRawName(),
'object.class' => get_class($oObject),
'object.id' => $sObjectKey,
'object.friendlyname' => $oObject->GetRawName(),
'current_user' => UserRights::GetUser(),
'exception.stack' => $oException->getTraceAsString(),
];
IssueLog::Error('A trigger did throw an exception', null, $aContext);
}
}
/**

View File

@@ -225,108 +225,106 @@ class ValueSetObjects extends ValueSetDefinition
$this->m_aValues = array();
if ($this->m_bAllowAllData)
{
$oFilter = DBObjectSearch::FromOQL_AllData($this->m_sFilterExpr);
$oFilter = $this->GetFilter($sOperation, $sContains);
$oObjects = new DBObjectSet($oFilter, $this->m_aOrderBy, $aArgs, null, $this->m_iLimit, 0, $this->m_bSort);
if (empty($this->m_sValueAttCode)) {
$aAttToLoad = array($oFilter->GetClassAlias() => array('friendlyname'));
} else {
$aAttToLoad = array($oFilter->GetClassAlias() => array($this->m_sValueAttCode));
}
else
{
$oObjects->OptimizeColumnLoad($aAttToLoad);
while ($oObject = $oObjects->Fetch()) {
if (empty($this->m_sValueAttCode)) {
$this->m_aValues[$oObject->GetKey()] = $oObject->GetName();
} else {
$this->m_aValues[$oObject->GetKey()] = $oObject->Get($this->m_sValueAttCode);
}
}
return true;
}
/**
* Get filter for functions LoadValues and LoadValuesForAutocomplete
*
* @param $sOperation
* @param $sContains
*
* @return \DBObjectSearch|\DBSearch|\DBUnionSearch|false|mixed
* @throws \CoreException
* @throws \OQLException
* @since 3.0.3 3.1.0
*/
protected function GetFilter($sOperation, $sContains)
{
$this->m_sContains = $sContains;
$this->m_sOperation = $sOperation;
if ($this->m_bAllowAllData) {
$oFilter = DBObjectSearch::FromOQL_AllData($this->m_sFilterExpr);
} else {
$oFilter = DBObjectSearch::FromOQL($this->m_sFilterExpr);
$oFilter->SetShowObsoleteData(utils::ShowObsoleteData());
}
if (!$oFilter) return false;
if (!is_null($this->m_oExtraCondition))
{
if (!$oFilter) {
return false;
}
if (!is_null($this->m_oExtraCondition)) {
$oFilter = $oFilter->Intersect($this->m_oExtraCondition);
}
foreach($this->m_aModifierProperties as $sPluginClass => $aProperties)
{
foreach ($aProperties as $sProperty => $value)
{
foreach ($this->m_aModifierProperties as $sPluginClass => $aProperties) {
foreach ($aProperties as $sProperty => $value) {
$oFilter->SetModifierProperty($sPluginClass, $sProperty, $value);
}
}
$oExpression = DBObjectSearch::GetPolymorphicExpression($oFilter->GetClass(), 'friendlyname');
$aFields = $oExpression->ListRequiredFields();
$sClass = $oFilter->GetClass();
/*foreach($aFields as $sField)
{
$aFieldItems = explode('.', $sField);
if ($aFieldItems[0] != $sClass)
{
$sOperation = 'contains';
break;
}
}*/
switch ($sOperation)
{
switch ($this->m_sOperation) {
case 'equals':
$aAttributes = MetaModel::GetFriendlyNameAttributeCodeList($sClass);
$sClassAlias = $oFilter->GetClassAlias();
$aFilters = array();
$oValueExpr = new ScalarExpression($sContains);
foreach($aAttributes as $sAttribute)
{
$oNewFilter = $oFilter->DeepClone();
$oNameExpr = new FieldExpression($sAttribute, $sClassAlias);
$oCondition = new BinaryExpression($oNameExpr, '=', $oValueExpr);
$oNewFilter->AddConditionExpression($oCondition);
$aFilters[] = $oNewFilter;
case 'start_with':
if ($this->m_sOperation === 'start_with') {
$this->m_sContains .= '%';
$sOperator = 'LIKE';
} else {
$sOperator = '=';
}
$aAttributes = MetaModel::GetFriendlyNameAttributeCodeList($sClass);
if (count($aAttributes) > 0) {
$sClassAlias = $oFilter->GetClassAlias();
$aFilters = array();
$oValueExpr = new ScalarExpression($this->m_sContains);
foreach ($aAttributes as $sAttribute) {
$oNewFilter = $oFilter->DeepClone();
$oNameExpr = new FieldExpression($sAttribute, $sClassAlias);
$oCondition = new BinaryExpression($oNameExpr, $sOperator, $oValueExpr);
$oNewFilter->AddConditionExpression($oCondition);
$aFilters[] = $oNewFilter;
}
// Unions are much faster than OR conditions
$oFilter = new DBUnionSearch($aFilters);
} else {
$oValueExpr = new ScalarExpression($this->m_sContains);
$oNameExpr = new FieldExpression('friendlyname', $oFilter->GetClassAlias());
$oNewCondition = new BinaryExpression($oNameExpr, $sOperator, $oValueExpr);
$oFilter->AddConditionExpression($oNewCondition);
}
// Unions are much faster than OR conditions
$oFilter = new DBUnionSearch($aFilters);
break;
case 'start_with':
$aAttributes = MetaModel::GetFriendlyNameAttributeCodeList($sClass);
$sClassAlias = $oFilter->GetClassAlias();
$aFilters = array();
$oValueExpr = new ScalarExpression($sContains.'%');
foreach($aAttributes as $sAttribute)
{
$oNewFilter = $oFilter->DeepClone();
$oNameExpr = new FieldExpression($sAttribute, $sClassAlias);
$oCondition = new BinaryExpression($oNameExpr, 'LIKE', $oValueExpr);
$oNewFilter->AddConditionExpression($oCondition);
$aFilters[] = $oNewFilter;
}
// Unions are much faster than OR conditions
$oFilter = new DBUnionSearch($aFilters);
break;
default:
$oValueExpr = new ScalarExpression('%'.$sContains.'%');
$oValueExpr = new ScalarExpression('%'.$this->m_sContains.'%');
$oNameExpr = new FieldExpression('friendlyname', $oFilter->GetClassAlias());
$oNewCondition = new BinaryExpression($oNameExpr, 'LIKE', $oValueExpr);
$oFilter->AddConditionExpression($oNewCondition);
break;
}
$oObjects = new DBObjectSet($oFilter, $this->m_aOrderBy, $aArgs, null, $this->m_iLimit, 0, $this->m_bSort);
if (empty($this->m_sValueAttCode))
{
$aAttToLoad = array($oFilter->GetClassAlias() => array('friendlyname'));
}
else
{
$aAttToLoad = array($oFilter->GetClassAlias() => array($this->m_sValueAttCode));
}
$oObjects->OptimizeColumnLoad($aAttToLoad);
while ($oObject = $oObjects->Fetch())
{
if (empty($this->m_sValueAttCode))
{
$this->m_aValues[$oObject->GetKey()] = $oObject->GetName();
}
else
{
$this->m_aValues[$oObject->GetKey()] = $oObject->Get($this->m_sValueAttCode);
}
}
return true;
return $oFilter;
}
public function GetValuesDescription()
{
return 'Filter: '.$this->m_sFilterExpr;
@@ -376,73 +374,12 @@ class ValueSetObjects extends ValueSetDefinition
*/
protected function LoadValuesForAutocomplete($aArgs, $sContains = '', $sOperation = 'contains')
{
$this->m_sContains = $sContains;
$this->m_sOperation = $sOperation;
$this->m_aValues = array();
if ($this->m_bAllowAllData) {
$oFilter = DBObjectSearch::FromOQL_AllData($this->m_sFilterExpr);
} else {
$oFilter = DBObjectSearch::FromOQL($this->m_sFilterExpr);
$oFilter->SetShowObsoleteData(utils::ShowObsoleteData());
}
if (!$oFilter) {
return false;
}
if (!is_null($this->m_oExtraCondition)) {
$oFilter = $oFilter->Intersect($this->m_oExtraCondition);
}
foreach ($this->m_aModifierProperties as $sPluginClass => $aProperties) {
foreach ($aProperties as $sProperty => $value) {
$oFilter->SetModifierProperty($sPluginClass, $sProperty, $value);
}
}
//$oExpression = DBObjectSearch::GetPolymorphicExpression($oFilter->GetClass(), 'friendlyname');
$oFilter = $this->GetFilter($sOperation, $sContains);
$sClass = $oFilter->GetClass();
$sClassAlias = $oFilter->GetClassAlias();
switch ($sOperation) {
case 'equals':
$aAttributes = MetaModel::GetFriendlyNameAttributeCodeList($sClass);
$aFilters = array();
$oValueExpr = new ScalarExpression($sContains);
foreach ($aAttributes as $sAttribute) {
$oNewFilter = $oFilter->DeepClone();
$oNameExpr = new FieldExpression($sAttribute, $sClassAlias);
$oCondition = new BinaryExpression($oNameExpr, '=', $oValueExpr);
$oNewFilter->AddConditionExpression($oCondition);
$aFilters[] = $oNewFilter;
}
// Unions are much faster than OR conditions
$oFilter = new DBUnionSearch($aFilters);
break;
case 'start_with':
$aAttributes = MetaModel::GetFriendlyNameAttributeCodeList($sClass);
$aFilters = array();
$oValueExpr = new ScalarExpression($sContains.'%');
foreach($aAttributes as $sAttribute)
{
$oNewFilter = $oFilter->DeepClone();
$oNameExpr = new FieldExpression($sAttribute, $sClassAlias);
$oCondition = new BinaryExpression($oNameExpr, 'LIKE', $oValueExpr);
$oNewFilter->AddConditionExpression($oCondition);
$aFilters[] = $oNewFilter;
}
// Unions are much faster than OR conditions
$oFilter = new DBUnionSearch($aFilters);
break;
default:
$oValueExpr = new ScalarExpression('%'.$sContains.'%');
$oNameExpr = new FieldExpression('friendlyname', $sClassAlias);
$oNewCondition = new BinaryExpression($oNameExpr, 'LIKE', $oValueExpr);
$oFilter->AddConditionExpression($oNewCondition);
break;
}
$oObjects = new DBObjectSet($oFilter, $this->m_aOrderBy, $aArgs, null, $this->m_iLimit, 0, $this->m_bSort);
if (empty($this->m_sValueAttCode)) {
$aAttToLoad = ['friendlyname'];

View File

@@ -1,46 +1,60 @@
/*
* @copyright Copyright (C) 2010-2021 Combodo SARL
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
$ibo-table-preview--header-cell--padding: $ibo-spacing-200 $ibo-spacing-600 $ibo-spacing-200 $ibo-spacing-200 !default;
$ibo-table-preview--header-cell--background-color: $ibo-color-white-200 !default;
$ibo-table-preview--header-cell--border-width: 1px 1px 0 !default;
$ibo-table-preview--body-cell--padding-x: $ibo-spacing-200 !default;
$ibo-table-preview--body-cell--border-width: 0 1px !default;
$ibo-table-preview--body-cell--last--border-bottom-width: 1px !default;
$ibo-preview-header--margin-bottom: $ibo-spacing-200 !default;
$ibo-table-preview--remove-column--top: $ibo-spacing-300 !default;
$ibo-table-preview--remove-column--right: $ibo-spacing-300 !default;
$ibo-table-preview--remove-column--font-size: 8px !default;
$ibo-form-part-interactive-fields--margin-top: $ibo-spacing-600 !default;
.ibo-table-preview {
margin-top: 20px;
overflow-x: auto;
th {
position: relative;
padding: 5px;
padding-right: $ibo-spacing-600;
border-width: 1px 1px 0;
padding: $ibo-table-preview--header-cell--padding;
border-width: $ibo-table-preview--header-cell--border-width;
border-style: groove groove none;
background: $ibo-color-white-200;
background: $ibo-table-preview--header-cell--background-color;
}
td {
padding-right: 5px;
padding-left: 5px;
border-width: 0 1px;
padding-right: $ibo-table-preview--body-cell--padding-x;
padding-left: $ibo-table-preview--body-cell--padding-x;
border-width: $ibo-table-preview--body-cell--border-width;
border-style: none groove;
}
tr:last-child td {
border-bottom-width: 1px;
border-bottom-width: $ibo-table-preview--body-cell--last--border-bottom-width;
border-bottom-style: groove;
}
}
.ibo-preview-header {
margin-bottom: 5px;
margin-bottom: $ibo-preview-header--margin-bottom;
}
.ibo-table-preview--remove-column {
position: absolute;
top: $ibo-spacing-300;
right: $ibo-spacing-300;
top: $ibo-table-preview--remove-column--top;
right: $ibo-table-preview--remove-column--right;
display: inline-block;
cursor: pointer;
font-size: 8px;
font-size: $ibo-table-preview--remove-column--font-size;
}
#form_part_interactive_fields_xlsx, #form_part_interactive_fields_csv, #form_part_interactive_fields_pdf {
margin-top: $ibo-spacing-600;
margin-top: $ibo-form-part-interactive-fields--margin-top;
}

View File

@@ -20,7 +20,7 @@ $ibo-datatable--row--background-color--is-selected: $ibo-color-primary-300 !defa
$ibo-datatable--selection-validation-buttons-toolbar--margin-top: 10px !default;
$ibo-list-column--max-height: 150px !default;
$ibo-datatable--sort-order--color: $ibo-color-orange-600 !default;
$ibo-datatable--sort-order--color: $ibo-color-primary-600 !default;
$ibo-fieldsorter--selected--background-color: $ibo-color-blue-200 !default;

View File

@@ -253,3 +253,6 @@ $ibo-field--enable-bulk--checkbox--margin-left: $ibo-spacing-300 !default;
margin-left: $ibo-field--enable-bulk--checkbox--margin-left;
}
.ibo-input-select--action-buttons a {
@extend %ibo-hyperlink-inherited-colors;
}

View File

@@ -3,7 +3,14 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
$ibo-csv-import--cell-message-padding:3px;
$ibo-csv-import--cell-message--padding-top: 3px !default;
$ibo-csv-import--cell-modified--color: $ibo-color-blue-700 !default;
$ibo-csv-import--cell-error--color: $ibo-color-red-700 !default;
$ibo-csv-import--row--border-color: $ibo-color-grey-400 !default;
$ibo-csv-import--row-error--background-color: $ibo-color-red-200 !default;
$ibo-csv-import--download-file--color: $ibo-color-primary-400 !default;
$ibo-csv-import--download-file--font-size: 4em !default;
$ibo-csv-import--download-file--margin: 20px !default;
#tabs1-import .ibo-field--label {
max-width: 50%;
@@ -11,37 +18,37 @@ $ibo-csv-import--cell-message-padding:3px;
div.ibo-csv-import--cell-modified {
font-weight: bold;
color: $ibo-color-blue-700;
color: $ibo-csv-import--cell-modified--color;
}
div.ibo-csv-import--cell-error {
font-weight: bold;
color: $ibo-color-red-700;
color: $ibo-csv-import--cell-error--color;
}
div.ibo-csv-import--cell-message {
padding-top: $ibo-csv-import--cell-message-padding;
padding-top: $ibo-csv-import--cell-message--padding-top;
}
tr.ibo-csv-import--row-unchanged td {
border-bottom: 1px $ibo-color-grey-400 solid;
border-bottom: 1px $ibo-csv-import--row--border-color solid;
}
.wizContainer table tr.ibo-csv-import--row-error td {
border-bottom: 1px $ibo-color-grey-400 solid;
background-color: $ibo-color-red-200;
border-bottom: 1px $ibo-csv-import--row--border-color solid;
background-color: $ibo-csv-import--row-error--background-color;
}
tr.ibo-csv-import--row-modified td {
border-bottom: 1px $ibo-color-grey-400 solid;
border-bottom: 1px $ibo-csv-import--row--border-color solid;
}
tr.ibo-csv-import--row-added td {
border-bottom: 1px $ibo-color-grey-400 solid;
border-bottom: 1px $ibo-csv-import--row--border-color solid;
}
.ibo-csv-import--download-file {
font-size: 4em;
color: $ibo-color-primary-400;
margin: 20px;
font-size: $ibo-csv-import--download-file--font-size;
color: $ibo-csv-import--download-file--color;
margin: $ibo-csv-import--download-file--margin;
}

View File

@@ -6,6 +6,10 @@
$ibo-datamodel-viewer--parent--spacer--padding-y: $ibo-spacing-0 !default;
$ibo-datamodel-viewer--parent--spacer--padding-x: $ibo-spacing-300 !default;
$ibo-datamodel-viewer--classes-list--selectize-input--background-color: $ibo-color-white-100 !default;
$ibo-datamodel-viewer--classes-list--selectize-input--color: $ibo-color-grey-800 !default;
$ibo-datamodel-viewer--classes-list--selectize-input--border-color: $ibo-color-grey-500 !default;
$ibo-datamodel-viewer--attributes-table--first-column--width: 3px !default;
$ibo-datamodel-viewer--origin-cell--diameter: 8px !default;
@@ -45,6 +49,15 @@ $ibo-datamodel-viewer--lifecycle-image--margin-bottom: $ibo-spacing-500 !default
padding: $ibo-datamodel-viewer--parent--spacer--padding-y $ibo-datamodel-viewer--parent--spacer--padding-x;
}
// Overwrite selectize rules with !important
.ibo-datamodel-viewer--classes-list .selectize-input{
background-color: $ibo-datamodel-viewer--classes-list--selectize-input--background-color !important;
background-image: none !important;
color: $ibo-datamodel-viewer--classes-list--selectize-input--color;
box-shadow: none !important;
border-color: $ibo-datamodel-viewer--classes-list--selectize-input--border-color !important;
}
#ibo-datamodel-viewer--attributes-table{
> tbody tr td:first-child{
width: $ibo-datamodel-viewer--attributes-table--first-column--width;

View File

@@ -159,6 +159,16 @@ body.ibo-has-fullscreen-descendant {
border-spacing: 2px;
}
/*
* N°5317 - Handle overlapping tables when table cells have fixed widths
* Force table cell NOT to have a fixed width and to wrap when necessary
*/
td {
width: unset !important;
word-break: break-word !important;
white-space: unset !important;
}
/* Preserve original text color in code blocks, except for the Highlight.js blocks which have their own colors */
& > code,
code:not(.hljs) {

View File

@@ -6,4 +6,5 @@
@import "base";
@import "base-palette";
@import "semantic-palette";
@import "lifecycle-palette";
@import "lifecycle-palette";
@import "skeleton-palette";

View File

@@ -0,0 +1,17 @@
/*
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* Skeleton palette */
/* - Colors used by skeletons svg to display placeholders */
$ibo-skeleton-start-color: $ibo-color-grey-200 !default;
$ibo-skeleton-stop-color: $ibo-color-blue-grey-100 !default;
/* CSS variables */
/* Skeleton CSS3 variables are not ibo prefixed as they are not iTop backoffice exclusives*/
:root {
--skeleton-start-color: #{$ibo-skeleton-start-color};
--skeleton-stop-color: #{$ibo-skeleton-stop-color};
}

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'authent-cas/3.0.2',
'authent-cas/3.0.3',
array(
// Identification
//

View File

@@ -27,7 +27,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'authent-external/3.0.2',
'authent-external/3.0.3',
array(
// Identification
//

View File

@@ -9,7 +9,7 @@ if (function_exists('ldap_connect'))
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'authent-ldap/3.0.2',
'authent-ldap/3.0.3',
array(
// Identification
//

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'authent-local/3.0.2',
'authent-local/3.0.3',
array(
// Identification
//

View File

@@ -12,6 +12,7 @@
<stylesheets>
<stylesheet id="fullmoon">../css/backoffice/main.scss</stylesheet>
<stylesheet id="editor">combodo-backoffice-darkmoon-theme/scss/editor.scss</stylesheet>
<stylesheet id="ace_editor">combodo-backoffice-darkmoon-theme/scss/ace_editor.scss</stylesheet>
</stylesheets>
<precompiled_stylesheet>combodo-backoffice-darkmoon-theme/precompiled-themes/main.css</precompiled_stylesheet>
</theme>

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-backoffice-darkmoon-theme/3.0.2',
'combodo-backoffice-darkmoon-theme/3.0.3',
array(
// Identification
//

View File

@@ -0,0 +1,96 @@
.ace-eclipse .ace_gutter {
background: unset !important;
border-right: unset !important;
color: $ibo-color-grey-400 !important;
}
.ace-eclipse .ace_print-margin {
width: 1px !important;
background: $ibo-color-grey-500 !important;
}
.ace-eclipse {
background-color: $ibo-color-grey-800 !important;
color: $ibo-color-grey-200 !important;
}
.ace-eclipse .ace_entity.ace_other.ace_attribute-name,
.ace-eclipse .ace_storage {
color: $ibo-color-grey-200 !important;
}
.ace-eclipse .ace_cursor {
color: $ibo-color-grey-200 !important;
}
.ace-eclipse .ace_string.ace_regexp {
color: $ibo-color-red-600 !important;
}
.ace-eclipse .ace_marker-layer .ace_active-line {
&:only-child {
background: $ibo-color-grey-600 !important;
}
&:not(:only-child) {
background: $ibo-color-grey-700 !important;
}
}
.ace-eclipse .ace_marker-layer .ace_selection {
background: $ibo-color-grey-500 !important;
}
.ace-eclipse.ace_multiselect .ace_selection.ace_start {
box-shadow: 0 0 3px 0px $ibo-color-grey-800 !important;
}
.ace-eclipse .ace_marker-layer .ace_step {
background: $nord13 !important;
}
.ace-eclipse .ace_marker-layer .ace_bracket {
margin: -1px 0 0 -1px !important;
border: 1px solid $ibo-color-primary-300 !important;
}
.ace-eclipse .ace_gutter-active-line {
background-color: $ibo-color-grey-600 !important;
}
.ace-eclipse .ace_marker-layer .ace_selected-word {
border: 1px solid $ibo-color-primary-300 !important;
}
.ace-eclipse .ace_invisible {
color: $ibo-color-grey-500 !important;
}
.ace-eclipse .ace_keyword,
.ace-eclipse .ace_meta,
.ace-eclipse .ace_support.ace_class,
.ace-eclipse .ace_support.ace_type {
color: $ibo-color-primary-500 !important;
}
.ace-eclipse .ace_constant.ace_character,
.ace-eclipse .ace_constant.ace_other {
color: $ibo-color-grey-200 !important;
}
.ace-eclipse .ace_constant.ace_language {
color: $ibo-color-primary-800 !important;
}
.ace-eclipse .ace_constant.ace_escape {
color: $nord13 !important;
}
.ace-eclipse .ace_constant.ace_numeric {
color: $nord15 !important;
}
.ace-eclipse .ace_fold {
background-color: $ibo-color-grey-500 !important;
border-color: $ibo-color-grey-200 !important;
}
.ace-eclipse .ace_entity.ace_name.ace_function,
.ace-eclipse .ace_entity.ace_name.ace_tag,
.ace-eclipse .ace_support.ace_function,
.ace-eclipse .ace_variable,
.ace-eclipse .ace_variable.ace_language {
color: #8fbcbb !important;
}
.ace-eclipse .ace_string {
color: $nord14 !important;
}
.ace-eclipse .ace_comment {
color: $nord7 !important;
}
.ace-eclipse .ace_indent-guide {
box-shadow: inset -1px 0 0 0 $ibo-color-grey-600 !important;
}
.ace-eclipse .ace_indent-guide-active {
box-shadow: inset -1px 0 0 0 $ibo-color-grey-400 !important;
}

View File

@@ -50,8 +50,8 @@ $text : $ibo-color-grey-100;
$text-invert: $ibo-color-grey-800;
$text-light : $ibo-color-grey-200;
$text-strong: inherit;
$code: $ibo-color-primary-800;
$code-background: $ibo-color-grey-300;
$code: $ibo-color-primary-400;
$code-background: $ibo-color-grey-700;
$pre-background: $ibo-color-grey-600;
$ibo-scrollbar--scrollbar-track-background-color: $ibo-color-grey-700;
@@ -145,6 +145,10 @@ $ibo-vendors-datatables--row--background-color--is-even: $ibo-color-grey-800;
$ibo-datatable--row--background-color--is-hover: $ibo-color-blue-900;
$ibo-datatable--row--background-color--is-selected: $ibo-color-blue-700;
$ibo-fieldsorter--selected--background-color: $ibo-color-blue-800;
$ibo-table-preview--header-cell--background-color: $ibo-color-grey-500;
$ibo-field--value--color: $ibo-body-text-color;
$ibo-title--text-color: $ibo-body-text-color;
@@ -173,8 +177,9 @@ $ibo-input-select-selectize--item--active--text-color: $ibo-color-grey-100;
$ibo-input-select-selectize--item--active--background-color: $ibo-color-grey-500;
$ibo-vendors-selectize-input--color: $ibo-body-text-color;
$ibo-popover-menu--separator--background-color: $ibo-color-grey-500;
$ibo-popover-menu--item-separator--background-color: $ibo-color-grey-500;
$ibo-popover-menu--item--text-color: $ibo-color-grey-200;
$ibo-popover-menu--item--icon--color: $ibo-color-grey-300;
$ibo-popover-menu--background-color: $ibo-color-grey-700;
$ibo-popover-menu--item--hover-background-color: $ibo-color-grey-500;
@@ -189,9 +194,17 @@ $ibo-tab-container--extra-tab-toggler--background-color--on-hover: $ibo-color-gr
$ibo-activity-panel--header--background-color: $ibo-color-grey-400;
$ibo-activity-panel--tab-toggler--is-active--background-color: $ibo-color-grey-200;
$ibo-activity-panel--tab-toolbar--background-color: $ibo-activity-panel--tab-toggler--is-active--background-color;
$ibo-activity-panel--load-entries-button--background-color: $ibo-color-grey-500;
$ibo-caselog-entry-form--background-color: $ibo-activity-panel--tab-toolbar--background-color;
$ibo-object-details--tag--separator--background-color: $ibo-color-grey-300;
$ibo-skeleton-start-color: $ibo-color-grey-500;
$ibo-skeleton-stop-color: $ibo-color-grey-400;
$ibo-tab--temporary-remote-content--button--color: $ibo-color-grey-200;
$ibo-tab--temporary-remote-content--button--hover--color: $ibo-color-grey-200;
$ibo-tab--temporary-remote-content--button--hover--background-color: $ibo-color-grey-800;
$ibo-activity-panel--tab-toolbar--text-color: $ibo-color-grey-800;
$ibo-activity-panel--tab-toolbar-action--color: $ibo-color-grey-800;
@@ -216,7 +229,7 @@ $ibo-search-form-panel--criteria--color: $ibo-color-grey-100;
$ibo-search-form-panel--more-criteria--background-color: $ibo-color-grey-800;
$ibo-search-form-panel--more-criteria--color: $ibo-color-grey-100;
$ibo-search-form-panel--more-criteria--icon--color: $ibo-color-primary-500;
$ibo-search-form-panel--criteria--border-color: $ibo-color-grey-500;
$ibo-search-form-panel--criteria--border-color: $ibo-color-grey-900;
$ibo-search-form-panel--multiple-choice--hover--color: $ibo-color-grey-500;
$ibo-search-form-panel--items--hover--color: $ibo-search-form-panel--multiple-choice--hover--color;
@@ -251,4 +264,16 @@ $ibo-vendors-c3--legend--background-color: $ibo-color-white-100;
$ibo-vendors-c3--legend-item--fill: $ibo-color-grey-100;
$ibo-vendors-c3--axis--fill: $ibo-color-grey-200;
$ibo-run-query--highlight--background-color: $ibo-color-primary-700;
$ibo-run-query--highlight--background-color: $ibo-color-primary-700;
$ibo-datamodel-viewer--classes-list--selectize-input--background-color: $ibo-color-grey-700;
$ibo-datamodel-viewer--classes-list--selectize-input--border-color: $ibo-color-grey-500;
$ibo-datamodel-viewer--classes-list--selectize-input--color: $ibo-color-grey-200;
$ibo-datamodel-viewer--lifecycle--code--color: $ibo-color-grey-300;
$ibo-datamodel-viewer--lifecycle--stimuli--color: $ibo-color-blue-300;
$ibo-datamodel-viewer--lifecycle--attribute-option--color: $ibo-color-pink-300;
$ibo-datamodel-viewer--schema--tooltip--fill: $ibo-color-grey-600;
$ibo-csv-import--row-error--background-color: $ibo-color-red-950;
$ibo-csv-import--cell-error--color: $ibo-color-red-500;
$ibo-csv-import--cell-modified--color: $ibo-color-blue-500;

View File

@@ -21,6 +21,8 @@ use Combodo\iTop\Core\MetaModel\HierarchicalKey;
class DatabaseAnalyzer
{
const LIMIT = 100;
var $iTimeLimitPerOperation;
public function __construct($iTimeLimitPerOperation = null)
@@ -45,7 +47,7 @@ class DatabaseAnalyzer
set_time_limit(intval($this->iTimeLimitPerOperation));
}
$aWrongRecords = CMDBSource::QueryToArray($sSelWrongRecs);
$aWrongRecords = CMDBSource::QueryToArray($sSelWrongRecs.' limit '.self::LIMIT);
if (count($aWrongRecords) > 0)
{
foreach($aWrongRecords as $aRes)

View File

@@ -207,9 +207,13 @@ function DisplayErrorList($aResults)
foreach ($aResults as $sClass => $aErrorList) {
foreach ($aErrorList as $sErrorLabel => $aError) {
$iCount = $aError['count'];
if ($iCount === DatabaseAnalyzer::LIMIT) {
$iCount = "$iCount(+)";
}
$aRows[] = [
'class' => MetaModel::GetName($sClass).' ('.$sClass.')',
'count' => $aError['count'],
'count' => $iCount,
'error' => $sErrorLabel,
];
}
@@ -227,10 +231,19 @@ function DisplayErrorDetails($aResults, $bVerbose)
foreach ($aResults as $sClass => $aErrorList) {
foreach ($aErrorList as $sErrorLabel => $aError) {
$sErrorTitle = Dict::Format('DBTools:DetailedErrorTitle', MetaModel::GetName($sClass).' ('.$sClass.')', $aError['count'], $sErrorLabel);
$iCount = $aError['count'];
if ($iCount === DatabaseAnalyzer::LIMIT) {
$iCount = "$iCount(+)";
}
$sErrorTitle = Dict::Format('DBTools:DetailedErrorTitle', MetaModel::GetName($sClass).' ('.$sClass.')', $iCount, $sErrorLabel);
$oCollapsible = CollapsibleSectionUIBlockFactory::MakeStandard($sErrorTitle);
$oBlock->AddSubBlock($oCollapsible);
if ($aError['count'] === DatabaseAnalyzer::LIMIT) {
$oHTML = new Combodo\iTop\Application\UI\Base\Component\Html\Html('<p>'.Dict::format('DBTools:DetailedErrorLimit', DatabaseAnalyzer::LIMIT).'</p>');
$oCollapsible->AddSubBlock($oHTML);
}
$oFieldSet = FieldSetUIBlockFactory::MakeStandard(Dict::S('DBTools:SQLquery'));
$oCollapsible->AddSubBlock($oFieldSet);

View File

@@ -49,6 +49,7 @@ Dict::Add('EN US', 'English', 'English', array(
'DBTools:Inconsistencies' => 'Database inconsistencies',
'DBTools:DetailedErrorTitle' => '%2$s error(s) in class %1$s: %3$s',
'DBTools:DetailedErrorLimit' => 'List limited to %1$s errors',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`',
'DBAnalyzer-Integrity-InvalidExtKey' => 'Invalid external key %1$s (column: `%2$s.%3$s`)',

View File

@@ -44,6 +44,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'DBTools:Inconsistencies' => 'Incohérences de base de données',
'DBTools:DetailedErrorTitle' => '%2$s erreur(s) dans la classe %1$s : %3$s',
'DBTools:DetailedErrorLimit' => 'Liste limitée à %1$s erreurs',
'DBAnalyzer-Integrity-OrphanRecord' => 'Enregistrement orphelin dans `%1$s`, il devrait avoir son équivalent dans la table `%2$s`',
'DBAnalyzer-Integrity-InvalidExtKey' => 'Clé externe invalide %1$s (colonne: `%2$s.%3$s`)',

View File

@@ -24,7 +24,7 @@
/** @noinspection PhpUnhandledExceptionInspection */
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-db-tools/3.0.2',
'combodo-db-tools/3.0.3',
array(
// Identification
//

View File

@@ -8,6 +8,7 @@
namespace Combodo\iTop\DBTools\Service;
use CoreException;
use DatabaseAnalyzer;
use Dict;
use DictExceptionMissingString;
use MetaModel;
@@ -38,6 +39,9 @@ class DBAnalyzerUtils
fwrite($fReport, "\r\n-- \r\n");
fwrite($fReport, '-- Class: '.MetaModel::GetName($sClass).' ('.$sClass.")\r\n");
$iCount = $aError['count'];
if ($iCount === DatabaseAnalyzer::LIMIT) {
$iCount = "$iCount(+)";
}
fwrite($fReport, '-- Count: '.$iCount."\r\n");
fwrite($fReport, '-- Error: '.$sErrorLabel."\r\n");
if (array_key_exists('query', $aError)) {

View File

@@ -19,7 +19,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-attachments/3.0.2',
'itop-attachments/3.0.3',
array(
// Identification
//

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-backup/3.0.2',
'itop-backup/3.0.3',
array(
// Identification
//

View File

@@ -91,9 +91,9 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Class:FunctionalCI/Attribute:providercontracts_list' => 'Smlouvy s poskytovateli',
'Class:FunctionalCI/Attribute:providercontracts_list+' => '',
'Class:FunctionalCI/Attribute:providercontracts_list+' => 'All the provider contracts for this configuration item~~',
'Class:FunctionalCI/Attribute:services_list' => 'Služby',
'Class:FunctionalCI/Attribute:services_list+' => '',
'Class:FunctionalCI/Attribute:services_list+' => 'All the services impacted by this configuration item~~',
'Class:FunctionalCI/Attribute:tickets_list' => 'Tikety',
'Class:FunctionalCI/Attribute:tickets_list+' => '',
'Class:FunctionalCI/Attribute:tickets_list+' => 'All the tickets for this configuration item~~',
));

View File

@@ -91,9 +91,9 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:FunctionalCI/Attribute:providercontracts_list' => 'Leverandør kontrakter',
'Class:FunctionalCI/Attribute:providercontracts_list+' => '',
'Class:FunctionalCI/Attribute:providercontracts_list+' => 'All the provider contracts for this configuration item~~',
'Class:FunctionalCI/Attribute:services_list' => 'Ydelser',
'Class:FunctionalCI/Attribute:services_list+' => '',
'Class:FunctionalCI/Attribute:services_list+' => 'All the services impacted by this configuration item~~',
'Class:FunctionalCI/Attribute:tickets_list' => 'Tickets',
'Class:FunctionalCI/Attribute:tickets_list+' => '',
'Class:FunctionalCI/Attribute:tickets_list+' => 'All the tickets for this configuration item~~',
));

View File

@@ -91,9 +91,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:FunctionalCI/Attribute:providercontracts_list' => 'Provider-Verträge',
'Class:FunctionalCI/Attribute:providercontracts_list+' => '',
'Class:FunctionalCI/Attribute:providercontracts_list+' => 'All the provider contracts for this configuration item~~',
'Class:FunctionalCI/Attribute:services_list' => 'Services',
'Class:FunctionalCI/Attribute:services_list+' => '',
'Class:FunctionalCI/Attribute:services_list+' => 'All the services impacted by this configuration item~~',
'Class:FunctionalCI/Attribute:tickets_list' => 'Tickets',
'Class:FunctionalCI/Attribute:tickets_list+' => '',
'Class:FunctionalCI/Attribute:tickets_list+' => 'All the tickets for this configuration item~~',
));

View File

@@ -91,9 +91,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', array(
'Class:FunctionalCI/Attribute:providercontracts_list' => 'Contrats fournisseur',
'Class:FunctionalCI/Attribute:providercontracts_list+' => '',
'Class:FunctionalCI/Attribute:providercontracts_list+' => 'Tous les contrats fournisseurs pour cet élément de configuration',
'Class:FunctionalCI/Attribute:services_list' => 'Services',
'Class:FunctionalCI/Attribute:services_list+' => '',
'Class:FunctionalCI/Attribute:services_list+' => 'Tous les services impactés par cet élément de configuration',
'Class:FunctionalCI/Attribute:tickets_list' => 'Tickets',
'Class:FunctionalCI/Attribute:tickets_list+' => '',
'Class:FunctionalCI/Attribute:tickets_list+' => 'Tous les tickets de cet élément de configuration',
));

View File

@@ -91,9 +91,9 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:FunctionalCI/Attribute:providercontracts_list' => 'プロバイダー契約',
'Class:FunctionalCI/Attribute:providercontracts_list+' => '',
'Class:FunctionalCI/Attribute:providercontracts_list+' => 'All the provider contracts for this configuration item~~',
'Class:FunctionalCI/Attribute:services_list' => 'サービス',
'Class:FunctionalCI/Attribute:services_list+' => '',
'Class:FunctionalCI/Attribute:services_list+' => 'All the services impacted by this configuration item~~',
'Class:FunctionalCI/Attribute:tickets_list' => 'チケット',
'Class:FunctionalCI/Attribute:tickets_list+' => '',
'Class:FunctionalCI/Attribute:tickets_list+' => 'All the tickets for this configuration item~~',
));

View File

@@ -91,9 +91,9 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:FunctionalCI/Attribute:providercontracts_list' => 'Poskytovateľské zmluvy',
'Class:FunctionalCI/Attribute:providercontracts_list+' => '',
'Class:FunctionalCI/Attribute:providercontracts_list+' => 'All the provider contracts for this configuration item~~',
'Class:FunctionalCI/Attribute:services_list' => 'Služby',
'Class:FunctionalCI/Attribute:services_list+' => '',
'Class:FunctionalCI/Attribute:services_list+' => 'All the services impacted by this configuration item~~',
'Class:FunctionalCI/Attribute:tickets_list' => 'Tickety',
'Class:FunctionalCI/Attribute:tickets_list+' => '',
'Class:FunctionalCI/Attribute:tickets_list+' => 'All the tickets for this configuration item~~',
));

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-bridge-cmdb-ticket/3.0.2',
'itop-bridge-cmdb-ticket/3.0.3',
array(
// Identification
//

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-bridge-virtualization-storage/3.0.2',
'itop-bridge-virtualization-storage/3.0.3',
array(
// Identification
//

View File

@@ -125,13 +125,13 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Change/Attribute:parent_name' => 'Parent Change Ref',
'Class:Change/Attribute:parent_name+' => '',
'Class:Change/Attribute:related_request_list' => 'Relaterede Requests',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change~~',
'Class:Change/Attribute:related_problems_list' => 'Relaterede Problemer',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change~~',
'Class:Change/Attribute:related_incident_list' => 'Relaterede incidents',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change~~',
'Class:Change/Attribute:child_changes_list' => 'Afledte Changes',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change~~',
'Class:Change/Attribute:parent_id_friendlyname' => 'Parent Friendly Name',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Attribute:parent_id_finalclass_recall' => 'Change-Type',

View File

@@ -127,13 +127,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Change/Attribute:parent_name' => 'Parent Change Ref',
'Class:Change/Attribute:parent_name+' => '',
'Class:Change/Attribute:related_request_list' => 'Verwandte Requests',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change~~',
'Class:Change/Attribute:related_problems_list' => 'Verwandte Probleme',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change~~',
'Class:Change/Attribute:related_incident_list' => 'Verwandte Incidents',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change~~',
'Class:Change/Attribute:child_changes_list' => 'Abgeleitete Changes',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change~~',
'Class:Change/Attribute:parent_id_friendlyname' => 'Parent Friendly Name',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Attribute:parent_id_finalclass_recall' => 'Change-Typ',

View File

@@ -127,13 +127,13 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Change/Attribute:parent_name' => 'Ref changement parent',
'Class:Change/Attribute:parent_name+' => '',
'Class:Change/Attribute:related_request_list' => 'Requêtes liées',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_request_list+' => 'Toutes les demandes utilisateurs liées à ce changement',
'Class:Change/Attribute:related_problems_list' => 'Problèmes liés',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:related_problems_list+' => 'Tous les problèmes liés à ce changement',
'Class:Change/Attribute:related_incident_list' => 'Incidents liés',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:related_incident_list+' => 'Tous les incidents liés à ce changement',
'Class:Change/Attribute:child_changes_list' => 'Changements fils',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:child_changes_list+' => 'Tous les sous-changements liés à ce changement',
'Class:Change/Attribute:parent_id_friendlyname' => 'Nom commun du changement parent',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Attribute:parent_id_finalclass_recall' => 'Type de changement',

View File

@@ -124,13 +124,13 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Change/Attribute:parent_name' => '親変更参照',
'Class:Change/Attribute:parent_name+' => '',
'Class:Change/Attribute:related_request_list' => '関連要求',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change~~',
'Class:Change/Attribute:related_problems_list' => '関連問題',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change~~',
'Class:Change/Attribute:related_incident_list' => '関連するインシデント',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change~~',
'Class:Change/Attribute:child_changes_list' => '子変更',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change~~',
'Class:Change/Attribute:parent_id_friendlyname' => '親のフレンドリー名',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Attribute:parent_id_finalclass_recall' => '変更タイプ',

View File

@@ -125,13 +125,13 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Change/Attribute:parent_name' => 'Referencia na rodičovskú zmenu',
'Class:Change/Attribute:parent_name+' => '',
'Class:Change/Attribute:related_request_list' => 'Súvisiace požiadavky',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change~~',
'Class:Change/Attribute:related_problems_list' => 'Súvisiace problémy',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change~~',
'Class:Change/Attribute:related_incident_list' => 'Súvisiace incidenty',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change~~',
'Class:Change/Attribute:child_changes_list' => 'Podriadené zmeny',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change~~',
'Class:Change/Attribute:parent_id_friendlyname' => 'Priateľské meno rodičovskej zmeny',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Attribute:parent_id_finalclass_recall' => 'Change type~~',

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-change-mgmt-itil/3.0.2',
'itop-change-mgmt-itil/3.0.3',
array(
// Identification
//

View File

@@ -109,13 +109,13 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Change/Attribute:fallback_plan' => 'Fallback-Plan',
'Class:Change/Attribute:fallback_plan+' => '',
'Class:Change/Attribute:related_request_list' => 'Relaterede Requests',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change~~',
'Class:Change/Attribute:related_incident_list' => 'Relaterede Incidents',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change~~',
'Class:Change/Attribute:related_problems_list' => 'Relaterede problemer',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change~~',
'Class:Change/Attribute:child_changes_list' => 'Afledte Changes',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change~~',
'Class:Change/Attribute:parent_id_friendlyname' => 'Parent Change Friendly Name',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Stimulus:ev_assign' => 'Tildel',

View File

@@ -111,13 +111,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Change/Attribute:fallback_plan' => 'Fallback-Plan',
'Class:Change/Attribute:fallback_plan+' => '',
'Class:Change/Attribute:related_request_list' => 'Verwandte Requests',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change~~',
'Class:Change/Attribute:related_incident_list' => 'Verwandte Incidents',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change~~',
'Class:Change/Attribute:related_problems_list' => 'Verwandte Probleme',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change~~',
'Class:Change/Attribute:child_changes_list' => 'Abgeleitete Changes',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change~~',
'Class:Change/Attribute:parent_id_friendlyname' => 'Parent Change',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Stimulus:ev_assign' => 'Zuweisen',

View File

@@ -111,13 +111,13 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Change/Attribute:fallback_plan' => 'Plan de secours',
'Class:Change/Attribute:fallback_plan+' => '',
'Class:Change/Attribute:related_request_list' => 'Requêtes liées',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_request_list+' => 'Toutes les demandes utilisateurs liées à ce changement',
'Class:Change/Attribute:related_incident_list' => 'Incidents liés',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:related_incident_list+' => 'Tous les incidents liés à ce changement',
'Class:Change/Attribute:related_problems_list' => 'Problèmes liés',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:related_problems_list+' => 'Tous les problèmes liés à ce changement',
'Class:Change/Attribute:child_changes_list' => 'Changements fils',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:child_changes_list+' => 'Tous les sous-changements liés à ce changement',
'Class:Change/Attribute:parent_id_friendlyname' => 'Nom usuel du changement parent',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Stimulus:ev_assign' => 'Assigner',

View File

@@ -108,13 +108,13 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Change/Attribute:fallback_plan' => 'フォールバック計画',
'Class:Change/Attribute:fallback_plan+' => '',
'Class:Change/Attribute:related_request_list' => '関連要求',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change~~',
'Class:Change/Attribute:related_incident_list' => '関連インシデント',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change~~',
'Class:Change/Attribute:related_problems_list' => '関連問題',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change~~',
'Class:Change/Attribute:child_changes_list' => '子変更',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change~~',
'Class:Change/Attribute:parent_id_friendlyname' => '親変更フレンドリー名',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Stimulus:ev_assign' => '割り当て',

View File

@@ -109,13 +109,13 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Change/Attribute:fallback_plan' => 'Návratový plán',
'Class:Change/Attribute:fallback_plan+' => '',
'Class:Change/Attribute:related_request_list' => 'Súvisiace požiadavky',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change~~',
'Class:Change/Attribute:related_incident_list' => 'Súvisiace incidenty',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change~~',
'Class:Change/Attribute:related_problems_list' => 'Súvisiace problémy',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change~~',
'Class:Change/Attribute:child_changes_list' => 'Podriadené zmeny',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change~~',
'Class:Change/Attribute:parent_id_friendlyname' => 'Priateľské meno rodičovskej zmeny',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Stimulus:ev_assign' => 'Prideiť',

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-change-mgmt/3.0.2',
'itop-change-mgmt/3.0.3',
array(
// Identification
//

View File

@@ -122,13 +122,13 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Class:FunctionalCI/Attribute:move2production' => 'Datum uvedení do produkce',
'Class:FunctionalCI/Attribute:move2production+' => '',
'Class:FunctionalCI/Attribute:contacts_list' => 'Kontakty',
'Class:FunctionalCI/Attribute:contacts_list+' => '',
'Class:FunctionalCI/Attribute:contacts_list+' => 'All the contacts for this configuration item~~',
'Class:FunctionalCI/Attribute:documents_list' => 'Dokumenty',
'Class:FunctionalCI/Attribute:documents_list+' => '',
'Class:FunctionalCI/Attribute:documents_list+' => 'All the documents linked to this configuration item~~',
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Aplikační řešení',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'Všechna aplikační řešení závisející na této konfigurační položce',
'Class:FunctionalCI/Attribute:softwares_list' => 'Software',
'Class:FunctionalCI/Attribute:softwares_list+' => '',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
'Class:FunctionalCI/Attribute:finalclass' => 'Typ konfigurační položky',
'Class:FunctionalCI/Attribute:finalclass+' => '',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Aktivní tikety',
@@ -183,9 +183,9 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Class:Rack/Attribute:nb_u' => 'Velikost (U)',
'Class:Rack/Attribute:nb_u+' => '',
'Class:Rack/Attribute:device_list' => 'Zařízení',
'Class:Rack/Attribute:device_list+' => '',
'Class:Rack/Attribute:device_list+' => 'All the physical devices racked into this rack~~',
'Class:Rack/Attribute:enclosure_list' => 'Šasi',
'Class:Rack/Attribute:enclosure_list+' => '',
'Class:Rack/Attribute:enclosure_list+' => 'All the enclosures in this rack~~',
));
//
@@ -247,9 +247,9 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Class:ConnectableCI' => 'Připojitelná konfigurační položka',
'Class:ConnectableCI+' => '',
'Class:ConnectableCI/Attribute:networkdevice_list' => 'Síťové prvky',
'Class:ConnectableCI/Attribute:networkdevice_list+' => '',
'Class:ConnectableCI/Attribute:networkdevice_list+' => 'All network devices connected to this device~~',
'Class:ConnectableCI/Attribute:physicalinterface_list' => 'Síťová rozhraní',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => '',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => 'All the physical network interfaces~~',
));
//
@@ -280,9 +280,9 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Class:DatacenterDevice/Attribute:powerB_name' => 'Název napájecího zdroje B',
'Class:DatacenterDevice/Attribute:powerB_name+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list' => 'FC porty',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => 'All the fiber channel interfaces for this device~~',
'Class:DatacenterDevice/Attribute:san_list' => 'SAN switche',
'Class:DatacenterDevice/Attribute:san_list+' => '',
'Class:DatacenterDevice/Attribute:san_list+' => 'All the SAN switches connected to this device~~',
'Class:DatacenterDevice/Attribute:redundancy' => 'Redundance',
'Class:DatacenterDevice/Attribute:redundancy/count' => 'Zařízení je v provozu, pokud je funkční alespoň jeden zdroj',
// Unused yet
@@ -302,7 +302,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Název typu zařízení',
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list' => 'Zařízení',
'Class:NetworkDevice/Attribute:connectablecis_list+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'All the devices connected to this network device~~',
'Class:NetworkDevice/Attribute:iosversion_id' => 'Verze IOS',
'Class:NetworkDevice/Attribute:iosversion_id+' => '',
'Class:NetworkDevice/Attribute:iosversion_name' => 'Název verze IOS',
@@ -335,7 +335,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Class:Server/Attribute:ram' => 'RAM',
'Class:Server/Attribute:ram+' => '',
'Class:Server/Attribute:logicalvolumes_list' => 'Logické svazky',
'Class:Server/Attribute:logicalvolumes_list+' => '',
'Class:Server/Attribute:logicalvolumes_list+' => 'All the logical volumes connected to this server~~',
));
//

View File

@@ -115,13 +115,13 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:FunctionalCI/Attribute:move2production' => 'Overgået til produktions dato',
'Class:FunctionalCI/Attribute:move2production+' => 'Dato for overgang til produktion',
'Class:FunctionalCI/Attribute:contacts_list' => 'Kontakter',
'Class:FunctionalCI/Attribute:contacts_list+' => '',
'Class:FunctionalCI/Attribute:contacts_list+' => 'All the contacts for this configuration item~~',
'Class:FunctionalCI/Attribute:documents_list' => 'Dokumenter',
'Class:FunctionalCI/Attribute:documents_list+' => '',
'Class:FunctionalCI/Attribute:documents_list+' => 'All the documents linked to this configuration item~~',
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Applikations løsning',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => '',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'All the application solutions depending on this configuration item~~',
'Class:FunctionalCI/Attribute:softwares_list' => 'Software',
'Class:FunctionalCI/Attribute:softwares_list+' => '',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
'Class:FunctionalCI/Attribute:finalclass' => 'Type',
'Class:FunctionalCI/Attribute:finalclass+' => '',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
@@ -176,9 +176,9 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Rack/Attribute:nb_u' => 'NB U',
'Class:Rack/Attribute:nb_u+' => '',
'Class:Rack/Attribute:device_list' => 'Enheder',
'Class:Rack/Attribute:device_list+' => '',
'Class:Rack/Attribute:device_list+' => 'All the physical devices racked into this rack~~',
'Class:Rack/Attribute:enclosure_list' => 'Enclosures',
'Class:Rack/Attribute:enclosure_list+' => '',
'Class:Rack/Attribute:enclosure_list+' => 'All the enclosures in this rack~~',
));
//
@@ -240,9 +240,9 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:ConnectableCI' => 'Forbindbare CI',
'Class:ConnectableCI+' => 'Fysiske CI',
'Class:ConnectableCI/Attribute:networkdevice_list' => 'Netværks enheder',
'Class:ConnectableCI/Attribute:networkdevice_list+' => '',
'Class:ConnectableCI/Attribute:networkdevice_list+' => 'All network devices connected to this device~~',
'Class:ConnectableCI/Attribute:physicalinterface_list' => 'Netværks interfaces',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => '',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => 'All the physical network interfaces~~',
));
//
@@ -273,9 +273,9 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:DatacenterDevice/Attribute:powerB_name' => 'PowerB kildenavn',
'Class:DatacenterDevice/Attribute:powerB_name+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list' => 'FC Porte',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => 'All the fiber channel interfaces for this device~~',
'Class:DatacenterDevice/Attribute:san_list' => 'SANs',
'Class:DatacenterDevice/Attribute:san_list+' => '',
'Class:DatacenterDevice/Attribute:san_list+' => 'All the SAN switches connected to this device~~',
'Class:DatacenterDevice/Attribute:redundancy' => 'Redundancy~~',
'Class:DatacenterDevice/Attribute:redundancy/count' => 'The device is up if at least one power connection (A or B) is up~~',
// Unused yet
@@ -295,7 +295,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Netværktypenavn',
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list' => 'Enhed',
'Class:NetworkDevice/Attribute:connectablecis_list+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'All the devices connected to this network device~~',
'Class:NetworkDevice/Attribute:iosversion_id' => 'IOS Version',
'Class:NetworkDevice/Attribute:iosversion_id+' => '',
'Class:NetworkDevice/Attribute:iosversion_name' => 'IOS versionsnavn',
@@ -328,7 +328,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Server/Attribute:ram' => 'RAM',
'Class:Server/Attribute:ram+' => '',
'Class:Server/Attribute:logicalvolumes_list' => 'Logical Volumes',
'Class:Server/Attribute:logicalvolumes_list+' => '',
'Class:Server/Attribute:logicalvolumes_list+' => 'All the logical volumes connected to this server~~',
));
//
@@ -339,7 +339,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:StorageSystem' => 'Storage-System',
'Class:StorageSystem+' => '',
'Class:StorageSystem/Attribute:logicalvolume_list' => 'Logical Volumes',
'Class:StorageSystem/Attribute:logicalvolume_list+' => '',
'Class:StorageSystem/Attribute:logicalvolume_list+' => 'All the logical volumes in this storage system~~',
));
//
@@ -350,7 +350,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:SANSwitch' => 'SAN-Switch',
'Class:SANSwitch+' => '',
'Class:SANSwitch/Attribute:datacenterdevice_list' => 'Enhed',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => '',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'All the devices connected to this SAN switch~~',
));
//
@@ -361,7 +361,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:TapeLibrary' => 'Tape-Library',
'Class:TapeLibrary+' => '',
'Class:TapeLibrary/Attribute:tapes_list' => 'Bånd',
'Class:TapeLibrary/Attribute:tapes_list+' => '',
'Class:TapeLibrary/Attribute:tapes_list+' => 'All the tapes in the tape library~~',
));
//
@@ -372,7 +372,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:NAS' => 'NAS',
'Class:NAS+' => '',
'Class:NAS/Attribute:nasfilesystem_list' => 'NAS filsystem liste',
'Class:NAS/Attribute:nasfilesystem_list+' => '',
'Class:NAS/Attribute:nasfilesystem_list+' => 'All the file systems in this NAS~~',
));
//
@@ -428,7 +428,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:PowerSource' => 'Strømkilde',
'Class:PowerSource+' => '',
'Class:PowerSource/Attribute:pdus_list' => 'PDUs',
'Class:PowerSource/Attribute:pdus_list+' => '',
'Class:PowerSource/Attribute:pdus_list+' => 'All the PDUs using this power source~~',
));
//
@@ -471,7 +471,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Enclosure/Attribute:nb_u' => 'NB U',
'Class:Enclosure/Attribute:nb_u+' => '',
'Class:Enclosure/Attribute:device_list' => 'Enhed',
'Class:Enclosure/Attribute:device_list+' => '',
'Class:Enclosure/Attribute:device_list+' => 'All the devices in this enclosure~~',
));
//
@@ -482,9 +482,9 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:ApplicationSolution' => 'Anvendelsområde',
'Class:ApplicationSolution+' => 'Hvilken applikations løsning anvendes den i?',
'Class:ApplicationSolution/Attribute:functionalcis_list' => 'CIs',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution~~',
'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Forretningsprocesser',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => '',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution~~',
'Class:ApplicationSolution/Attribute:status' => 'Status',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => 'Aktiv',
@@ -551,7 +551,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Middleware' => 'Middleware',
'Class:Middleware+' => '',
'Class:Middleware/Attribute:middlewareinstance_list' => 'Middleware-Instans(er)',
'Class:Middleware/Attribute:middlewareinstance_list+' => '',
'Class:Middleware/Attribute:middlewareinstance_list+' => 'All the middleware instances provided by this middleware~~',
));
//
@@ -562,7 +562,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:DBServer' => 'DB Server',
'Class:DBServer+' => '',
'Class:DBServer/Attribute:dbschema_list' => 'DB Schema',
'Class:DBServer/Attribute:dbschema_list+' => '',
'Class:DBServer/Attribute:dbschema_list+' => 'All the database schemas for this DB server~~',
));
//
@@ -573,7 +573,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:WebServer' => 'Web Server',
'Class:WebServer+' => '',
'Class:WebServer/Attribute:webapp_list' => 'Web Applikationer',
'Class:WebServer/Attribute:webapp_list+' => '',
'Class:WebServer/Attribute:webapp_list+' => 'All the web applications available on this web server~~',
));
//
@@ -654,7 +654,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:VirtualDevice/Attribute:status/Value:stock' => 'Lager',
'Class:VirtualDevice/Attribute:status/Value:stock+' => '',
'Class:VirtualDevice/Attribute:logicalvolumes_list' => 'Logiske Volumes',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => '',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => 'All the logical volumes used by this device~~',
));
//
@@ -665,7 +665,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:VirtualHost' => 'Host',
'Class:VirtualHost+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list' => 'Virtuelle Maskiner',
'Class:VirtualHost/Attribute:virtualmachine_list+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list+' => 'All the virtual machines hosted by this host~~',
));
//
@@ -693,7 +693,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Farm' => 'Farm',
'Class:Farm+' => '',
'Class:Farm/Attribute:hypervisor_list' => 'Hypervisorer',
'Class:Farm/Attribute:hypervisor_list+' => '',
'Class:Farm/Attribute:hypervisor_list+' => 'All the hypervisors that compose this farm~~',
'Class:Farm/Attribute:redundancy' => 'High availability~~',
'Class:Farm/Attribute:redundancy/disabled' => 'The farm is up if all the hypervisors are up~~',
'Class:Farm/Attribute:redundancy/count' => 'The farm is up if at least %1$s hypervisor(s) is(are) up~~',
@@ -730,7 +730,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:VirtualMachine/Attribute:managementip' => 'IP~~',
'Class:VirtualMachine/Attribute:managementip+' => '~~',
'Class:VirtualMachine/Attribute:logicalinterface_list' => 'Netværks interface',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => '',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => 'All the logical network interfaces~~',
));
//
@@ -755,9 +755,9 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:LogicalVolume/Attribute:storagesystem_name' => 'Storage systemnavn',
'Class:LogicalVolume/Attribute:storagesystem_name+' => '',
'Class:LogicalVolume/Attribute:servers_list' => 'Server',
'Class:LogicalVolume/Attribute:servers_list+' => '',
'Class:LogicalVolume/Attribute:servers_list+' => 'All the servers using this volume~~',
'Class:LogicalVolume/Attribute:virtualdevices_list' => 'Virtuelle enheder',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => '',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => 'All the virtual devices using this volume~~',
));
//
@@ -873,7 +873,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Software/Attribute:version' => 'Version',
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:documents_list' => 'Dokument',
'Class:Software/Attribute:documents_list+' => '',
'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software~~',
'Class:Software/Attribute:type' => 'Type',
'Class:Software/Attribute:type+' => '',
'Class:Software/Attribute:type/Value:DBServer' => 'DB Server',
@@ -887,11 +887,11 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Software/Attribute:type/Value:WebServer' => 'Web server',
'Class:Software/Attribute:type/Value:WebServer+' => '',
'Class:Software/Attribute:softwareinstance_list' => 'Software Instanser',
'Class:Software/Attribute:softwareinstance_list+' => '',
'Class:Software/Attribute:softwareinstance_list+' => 'All the software instances for this software~~',
'Class:Software/Attribute:softwarepatch_list' => 'Software Patches',
'Class:Software/Attribute:softwarepatch_list+' => '',
'Class:Software/Attribute:softwarepatch_list+' => 'All the patchs for this software~~',
'Class:Software/Attribute:softwarelicence_list' => 'Software Licenser',
'Class:Software/Attribute:softwarelicence_list+' => '',
'Class:Software/Attribute:softwarelicence_list+' => 'All the licenses for this software~~',
));
//
@@ -904,7 +904,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Patch/Attribute:name' => 'Navn',
'Class:Patch/Attribute:name+' => '',
'Class:Patch/Attribute:documents_list' => 'Dokumenter',
'Class:Patch/Attribute:documents_list+' => '',
'Class:Patch/Attribute:documents_list+' => 'All the documents linked to this patch~~',
'Class:Patch/Attribute:description' => 'Beskrivelse',
'Class:Patch/Attribute:description+' => '',
'Class:Patch/Attribute:finalclass' => 'Type',
@@ -919,7 +919,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:OSPatch' => 'OS-Patch',
'Class:OSPatch+' => '',
'Class:OSPatch/Attribute:functionalcis_list' => 'Enhed',
'Class:OSPatch/Attribute:functionalcis_list+' => '',
'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed~~',
'Class:OSPatch/Attribute:osversion_id' => 'OS Version',
'Class:OSPatch/Attribute:osversion_id+' => '',
'Class:OSPatch/Attribute:osversion_name' => 'OS versionsnavn',
@@ -938,7 +938,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:SoftwarePatch/Attribute:software_name' => 'Software navn',
'Class:SoftwarePatch/Attribute:software_name+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list' => 'Software Instanser',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => 'All the systems where this software patch is installed~~',
));
//
@@ -951,7 +951,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Licence/Attribute:name' => 'Navn',
'Class:Licence/Attribute:name+' => '',
'Class:Licence/Attribute:documents_list' => 'Dokumenter',
'Class:Licence/Attribute:documents_list+' => '',
'Class:Licence/Attribute:documents_list+' => 'All the documents linked to this license~~',
'Class:Licence/Attribute:org_id' => 'Ejer',
'Class:Licence/Attribute:org_id+' => '',
'Class:Licence/Attribute:organization_name' => 'Organisationsnavn',
@@ -988,9 +988,9 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:OSLicence/Attribute:osversion_name' => 'OS versionsnavn',
'Class:OSLicence/Attribute:osversion_name+' => '',
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtuelle Maskiner',
'Class:OSLicence/Attribute:virtualmachines_list+' => '',
'Class:OSLicence/Attribute:virtualmachines_list+' => 'All the virtual machines where this license is used~~',
'Class:OSLicence/Attribute:servers_list' => 'Server',
'Class:OSLicence/Attribute:servers_list+' => '',
'Class:OSLicence/Attribute:servers_list+' => 'All the servers where this license is used~~',
));
//
@@ -1005,7 +1005,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:SoftwareLicence/Attribute:software_name' => 'Software navn',
'Class:SoftwareLicence/Attribute:software_name+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list' => 'Software Instanser',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => 'All the systems where this license is used~~',
));
//
@@ -1055,7 +1055,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Brand' => 'Mærke',
'Class:Brand+' => '',
'Class:Brand/Attribute:physicaldevices_list' => 'Fysisk enhed',
'Class:Brand/Attribute:physicaldevices_list+' => '',
'Class:Brand/Attribute:physicaldevices_list+' => 'All the physical devices corresponding to this brand~~',
'Class:Brand/UniquenessRule:name+' => 'The name must be unique~~',
'Class:Brand/UniquenessRule:name' => 'This brand already exists~~',
));
@@ -1110,7 +1110,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Model/Attribute:type/Value:Phone' => 'Telephone~~',
'Class:Model/Attribute:type/Value:Phone+' => 'Telephone~~',
'Class:Model/Attribute:physicaldevices_list' => 'Fyisk enhed',
'Class:Model/Attribute:physicaldevices_list+' => '',
'Class:Model/Attribute:physicaldevices_list+' => 'All the physical devices corresponding to this model~~',
'Class:Model/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~',
'Class:Model/UniquenessRule:name_brand' => 'this model already exists for this brand~~',
));
@@ -1123,7 +1123,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:NetworkDeviceType' => 'Netværksenhed type',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Netværks enheder',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type~~',
));
//
@@ -1467,7 +1467,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Group/Attribute:parent_name' => 'Navn',
'Class:Group/Attribute:parent_name+' => '',
'Class:Group/Attribute:ci_list' => 'Forbundne CIs',
'Class:Group/Attribute:ci_list+' => '',
'Class:Group/Attribute:ci_list+' => 'All the configuration items linked to this group~~',
'Class:Group/Attribute:parent_id_friendlyname' => 'Parent Gruppe',
'Class:Group/Attribute:parent_id_friendlyname+' => '',
));

View File

@@ -117,13 +117,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:FunctionalCI/Attribute:move2production' => 'Go-Live-Datum',
'Class:FunctionalCI/Attribute:move2production+' => 'Datum, an dem in Produktivbetrieb gegangen wird/wurde',
'Class:FunctionalCI/Attribute:contacts_list' => 'Kontakte',
'Class:FunctionalCI/Attribute:contacts_list+' => '',
'Class:FunctionalCI/Attribute:contacts_list+' => 'All the contacts for this configuration item~~',
'Class:FunctionalCI/Attribute:documents_list' => 'Dokumente',
'Class:FunctionalCI/Attribute:documents_list+' => '',
'Class:FunctionalCI/Attribute:documents_list+' => 'All the documents linked to this configuration item~~',
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Anwendungslösungen',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => '',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'All the application solutions depending on this configuration item~~',
'Class:FunctionalCI/Attribute:softwares_list' => 'Software',
'Class:FunctionalCI/Attribute:softwares_list+' => '',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
'Class:FunctionalCI/Attribute:finalclass' => 'Typ',
'Class:FunctionalCI/Attribute:finalclass+' => '',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Offene Tickets',
@@ -178,9 +178,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Rack/Attribute:nb_u' => 'Höheneinheiten',
'Class:Rack/Attribute:nb_u+' => '',
'Class:Rack/Attribute:device_list' => 'Devices',
'Class:Rack/Attribute:device_list+' => '',
'Class:Rack/Attribute:device_list+' => 'All the physical devices racked into this rack~~',
'Class:Rack/Attribute:enclosure_list' => 'Enclosures',
'Class:Rack/Attribute:enclosure_list+' => '',
'Class:Rack/Attribute:enclosure_list+' => 'All the enclosures in this rack~~',
));
//
@@ -242,9 +242,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:ConnectableCI' => 'Verknüpfbares CI',
'Class:ConnectableCI+' => 'Physisches CI',
'Class:ConnectableCI/Attribute:networkdevice_list' => 'Netzwerkgeräte',
'Class:ConnectableCI/Attribute:networkdevice_list+' => '',
'Class:ConnectableCI/Attribute:networkdevice_list+' => 'All network devices connected to this device~~',
'Class:ConnectableCI/Attribute:physicalinterface_list' => 'Netzwerkinterfaces',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => '',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => 'All the physical network interfaces~~',
));
//
@@ -275,9 +275,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:DatacenterDevice/Attribute:powerB_name' => 'Strom-B-Quellenname',
'Class:DatacenterDevice/Attribute:powerB_name+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list' => 'FC-Ports',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => 'All the fiber channel interfaces for this device~~',
'Class:DatacenterDevice/Attribute:san_list' => 'SANs',
'Class:DatacenterDevice/Attribute:san_list+' => '',
'Class:DatacenterDevice/Attribute:san_list+' => 'All the SAN switches connected to this device~~',
'Class:DatacenterDevice/Attribute:redundancy' => 'Redundanz',
'Class:DatacenterDevice/Attribute:redundancy/count' => 'Das Gerät läuft, wenn mindestens eine der Stromversorgungen (A oder B) läuft.',
// Unused yet
@@ -297,7 +297,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Netzwerk-Typname',
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list' => 'Geräte',
'Class:NetworkDevice/Attribute:connectablecis_list+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'All the devices connected to this network device~~',
'Class:NetworkDevice/Attribute:iosversion_id' => 'IOS Version',
'Class:NetworkDevice/Attribute:iosversion_id+' => '',
'Class:NetworkDevice/Attribute:iosversion_name' => 'IOS-Versionsname',
@@ -330,7 +330,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Server/Attribute:ram' => 'RAM',
'Class:Server/Attribute:ram+' => '',
'Class:Server/Attribute:logicalvolumes_list' => 'Logische Volumes',
'Class:Server/Attribute:logicalvolumes_list+' => '',
'Class:Server/Attribute:logicalvolumes_list+' => 'All the logical volumes connected to this server~~',
));
//
@@ -341,7 +341,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:StorageSystem' => 'Storage-System',
'Class:StorageSystem+' => '',
'Class:StorageSystem/Attribute:logicalvolume_list' => 'Logische Volumes',
'Class:StorageSystem/Attribute:logicalvolume_list+' => '',
'Class:StorageSystem/Attribute:logicalvolume_list+' => 'All the logical volumes in this storage system~~',
));
//
@@ -352,7 +352,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:SANSwitch' => 'SAN-Switch',
'Class:SANSwitch+' => '',
'Class:SANSwitch/Attribute:datacenterdevice_list' => 'Geräte',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => '',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'All the devices connected to this SAN switch~~',
));
//
@@ -363,7 +363,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:TapeLibrary' => 'Tape-Library',
'Class:TapeLibrary+' => '',
'Class:TapeLibrary/Attribute:tapes_list' => 'Tapes',
'Class:TapeLibrary/Attribute:tapes_list+' => '',
'Class:TapeLibrary/Attribute:tapes_list+' => 'All the tapes in the tape library~~',
));
//
@@ -374,7 +374,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:NAS' => 'NAS',
'Class:NAS+' => '',
'Class:NAS/Attribute:nasfilesystem_list' => 'Dateisysteme',
'Class:NAS/Attribute:nasfilesystem_list+' => '',
'Class:NAS/Attribute:nasfilesystem_list+' => 'All the file systems in this NAS~~',
));
//
@@ -430,7 +430,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:PowerSource' => 'Stromquelle',
'Class:PowerSource+' => '',
'Class:PowerSource/Attribute:pdus_list' => 'PDUs',
'Class:PowerSource/Attribute:pdus_list+' => '',
'Class:PowerSource/Attribute:pdus_list+' => 'All the PDUs using this power source~~',
));
//
@@ -473,7 +473,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Enclosure/Attribute:nb_u' => 'Höheneinheiten',
'Class:Enclosure/Attribute:nb_u+' => '',
'Class:Enclosure/Attribute:device_list' => 'Geräte',
'Class:Enclosure/Attribute:device_list+' => '',
'Class:Enclosure/Attribute:device_list+' => 'All the devices in this enclosure~~',
));
//
@@ -484,9 +484,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:ApplicationSolution' => 'Anwendungslösung',
'Class:ApplicationSolution+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list' => 'CIs',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution~~',
'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Business-Prozesse',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => '',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution~~',
'Class:ApplicationSolution/Attribute:status' => 'Status',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => 'aktiv',
@@ -507,7 +507,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:BusinessProcess' => 'Business-Prozess',
'Class:BusinessProcess+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Anwendungslösungen',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'All the application solutions that impact this business process~~',
'Class:BusinessProcess/Attribute:status' => 'Status',
'Class:BusinessProcess/Attribute:status+' => '',
'Class:BusinessProcess/Attribute:status/Value:active' => 'aktiv',
@@ -553,7 +553,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Middleware' => 'Middleware',
'Class:Middleware+' => '',
'Class:Middleware/Attribute:middlewareinstance_list' => 'Middleware-Instanzen',
'Class:Middleware/Attribute:middlewareinstance_list+' => '',
'Class:Middleware/Attribute:middlewareinstance_list+' => 'All the middleware instances provided by this middleware~~',
));
//
@@ -564,7 +564,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:DBServer' => 'DB Server',
'Class:DBServer+' => '',
'Class:DBServer/Attribute:dbschema_list' => 'DB Schemata',
'Class:DBServer/Attribute:dbschema_list+' => '',
'Class:DBServer/Attribute:dbschema_list+' => 'All the database schemas for this DB server~~',
));
//
@@ -575,7 +575,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:WebServer' => 'Web Server',
'Class:WebServer+' => '',
'Class:WebServer/Attribute:webapp_list' => 'Webapplikationen',
'Class:WebServer/Attribute:webapp_list+' => '',
'Class:WebServer/Attribute:webapp_list+' => 'All the web applications available on this web server~~',
));
//
@@ -656,7 +656,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:VirtualDevice/Attribute:status/Value:stock' => 'Lager',
'Class:VirtualDevice/Attribute:status/Value:stock+' => '',
'Class:VirtualDevice/Attribute:logicalvolumes_list' => 'Logical Volumes',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => '',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => 'All the logical volumes used by this device~~',
));
//
@@ -667,7 +667,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:VirtualHost' => 'Host',
'Class:VirtualHost+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list' => 'Virtuelle Maschinen',
'Class:VirtualHost/Attribute:virtualmachine_list+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list+' => 'All the virtual machines hosted by this host~~',
));
//
@@ -695,7 +695,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Farm' => 'Farm',
'Class:Farm+' => '',
'Class:Farm/Attribute:hypervisor_list' => 'Hypervisoren',
'Class:Farm/Attribute:hypervisor_list+' => '',
'Class:Farm/Attribute:hypervisor_list+' => 'All the hypervisors that compose this farm~~',
'Class:Farm/Attribute:redundancy' => 'Hochverfügbarkeit',
'Class:Farm/Attribute:redundancy/disabled' => 'Die Farm läuft, wenn alle Hypervisoren laufen.',
'Class:Farm/Attribute:redundancy/count' => 'Die Farm läuft, wenn mindestens %1$s Hypervisor(en) läuft/laufen.',
@@ -732,7 +732,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:VirtualMachine/Attribute:managementip' => 'Management-IP',
'Class:VirtualMachine/Attribute:managementip+' => '',
'Class:VirtualMachine/Attribute:logicalinterface_list' => 'Netzwerk-Interfaces',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => '',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => 'All the logical network interfaces~~',
));
//
@@ -757,9 +757,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:LogicalVolume/Attribute:storagesystem_name' => 'Storage-Systemname',
'Class:LogicalVolume/Attribute:storagesystem_name+' => '',
'Class:LogicalVolume/Attribute:servers_list' => 'Server',
'Class:LogicalVolume/Attribute:servers_list+' => '',
'Class:LogicalVolume/Attribute:servers_list+' => 'All the servers using this volume~~',
'Class:LogicalVolume/Attribute:virtualdevices_list' => 'Virtuelle Geräte',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => '',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => 'All the virtual devices using this volume~~',
));
//
@@ -875,7 +875,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Software/Attribute:version' => 'Version',
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:documents_list' => 'Dokumente',
'Class:Software/Attribute:documents_list+' => '',
'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software~~',
'Class:Software/Attribute:type' => 'Typ',
'Class:Software/Attribute:type+' => '',
'Class:Software/Attribute:type/Value:DBServer' => 'DB-Server',
@@ -889,11 +889,11 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Software/Attribute:type/Value:WebServer' => 'Webserver',
'Class:Software/Attribute:type/Value:WebServer+' => '',
'Class:Software/Attribute:softwareinstance_list' => 'Software-Instanzen',
'Class:Software/Attribute:softwareinstance_list+' => '',
'Class:Software/Attribute:softwareinstance_list+' => 'All the software instances for this software~~',
'Class:Software/Attribute:softwarepatch_list' => 'Software-Patches',
'Class:Software/Attribute:softwarepatch_list+' => '',
'Class:Software/Attribute:softwarepatch_list+' => 'All the patchs for this software~~',
'Class:Software/Attribute:softwarelicence_list' => 'Softwarelizenzen',
'Class:Software/Attribute:softwarelicence_list+' => '',
'Class:Software/Attribute:softwarelicence_list+' => 'All the licenses for this software~~',
));
//
@@ -906,7 +906,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Patch/Attribute:name' => 'Name',
'Class:Patch/Attribute:name+' => '',
'Class:Patch/Attribute:documents_list' => 'Dokumente',
'Class:Patch/Attribute:documents_list+' => '',
'Class:Patch/Attribute:documents_list+' => 'All the documents linked to this patch~~',
'Class:Patch/Attribute:description' => 'Beschreibung',
'Class:Patch/Attribute:description+' => '',
'Class:Patch/Attribute:finalclass' => 'Typ',
@@ -921,7 +921,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:OSPatch' => 'OS-Patch',
'Class:OSPatch+' => '',
'Class:OSPatch/Attribute:functionalcis_list' => 'Geräte',
'Class:OSPatch/Attribute:functionalcis_list+' => '',
'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed~~',
'Class:OSPatch/Attribute:osversion_id' => 'OS Version',
'Class:OSPatch/Attribute:osversion_id+' => '',
'Class:OSPatch/Attribute:osversion_name' => 'OS-Versionsname',
@@ -940,7 +940,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:SoftwarePatch/Attribute:software_name' => 'Software-Name',
'Class:SoftwarePatch/Attribute:software_name+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list' => 'Software-Instanzen',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => 'All the systems where this software patch is installed~~',
));
//
@@ -953,7 +953,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Licence/Attribute:name' => 'Name',
'Class:Licence/Attribute:name+' => '',
'Class:Licence/Attribute:documents_list' => 'Dokumente',
'Class:Licence/Attribute:documents_list+' => '',
'Class:Licence/Attribute:documents_list+' => 'All the documents linked to this license~~',
'Class:Licence/Attribute:org_id' => 'Besitzer',
'Class:Licence/Attribute:org_id+' => '',
'Class:Licence/Attribute:organization_name' => 'Organisationsname',
@@ -990,9 +990,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:OSLicence/Attribute:osversion_name' => 'OS-Versionsname',
'Class:OSLicence/Attribute:osversion_name+' => '',
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtuelle Maschinen',
'Class:OSLicence/Attribute:virtualmachines_list+' => '',
'Class:OSLicence/Attribute:virtualmachines_list+' => 'All the virtual machines where this license is used~~',
'Class:OSLicence/Attribute:servers_list' => 'Server',
'Class:OSLicence/Attribute:servers_list+' => '',
'Class:OSLicence/Attribute:servers_list+' => 'All the servers where this license is used~~',
));
//
@@ -1007,7 +1007,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:SoftwareLicence/Attribute:software_name' => 'Software-Name',
'Class:SoftwareLicence/Attribute:software_name+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list' => 'Software-Instanzen',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => 'All the systems where this license is used~~',
));
//
@@ -1057,7 +1057,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Brand' => 'Marke',
'Class:Brand+' => '',
'Class:Brand/Attribute:physicaldevices_list' => 'Physische Geräte',
'Class:Brand/Attribute:physicaldevices_list+' => '',
'Class:Brand/Attribute:physicaldevices_list+' => 'All the physical devices corresponding to this brand~~',
'Class:Brand/UniquenessRule:name+' => 'Der Name muss eindeutig sein',
'Class:Brand/UniquenessRule:name' => 'Diese Marke existiert bereits',
));
@@ -1112,7 +1112,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Model/Attribute:type/Value:Phone' => 'Telefon',
'Class:Model/Attribute:type/Value:Phone+' => '',
'Class:Model/Attribute:physicaldevices_list' => 'Physische Geräte',
'Class:Model/Attribute:physicaldevices_list+' => '',
'Class:Model/Attribute:physicaldevices_list+' => 'All the physical devices corresponding to this model~~',
'Class:Model/UniquenessRule:name_brand+' => 'Der Modellname für eine Marke muss eindeutig sein',
'Class:Model/UniquenessRule:name_brand' => 'Es existiert bereits ein Modell mit diesem Namen für diese Marke',
));
@@ -1125,7 +1125,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:NetworkDeviceType' => 'Netzwerkgerätetyp',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Netzwerkgeräte',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type~~',
));
//
@@ -1469,7 +1469,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Group/Attribute:parent_name' => 'Name',
'Class:Group/Attribute:parent_name+' => '',
'Class:Group/Attribute:ci_list' => 'Verbundene CIs',
'Class:Group/Attribute:ci_list+' => '',
'Class:Group/Attribute:ci_list+' => 'All the configuration items linked to this group~~',
'Class:Group/Attribute:parent_id_friendlyname' => 'Parent-Gruppe',
'Class:Group/Attribute:parent_id_friendlyname+' => '',
));

View File

@@ -117,13 +117,13 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:FunctionalCI/Attribute:move2production' => 'Date de mise en production',
'Class:FunctionalCI/Attribute:move2production+' => '',
'Class:FunctionalCI/Attribute:contacts_list' => 'Contacts',
'Class:FunctionalCI/Attribute:contacts_list+' => '',
'Class:FunctionalCI/Attribute:contacts_list+' => 'Tous les contacts de cet élément de configuration',
'Class:FunctionalCI/Attribute:documents_list' => 'Documents',
'Class:FunctionalCI/Attribute:documents_list+' => '',
'Class:FunctionalCI/Attribute:documents_list+' => 'Tous les documents liés à cet élément de configuration',
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Solutions applicatives',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => '',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'Toutes les solutions applicatives dépendantes de cet élément de configuration',
'Class:FunctionalCI/Attribute:softwares_list' => 'Logiciels',
'Class:FunctionalCI/Attribute:softwares_list+' => '',
'Class:FunctionalCI/Attribute:softwares_list+' => 'Tous les logiciels installés sur cet élément de configuration',
'Class:FunctionalCI/Attribute:finalclass' => 'Sous-classe de CI',
'Class:FunctionalCI/Attribute:finalclass+' => 'Nom de la classe instanciable',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Tickets en cours',
@@ -178,9 +178,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Rack/Attribute:nb_u' => 'NB Unité',
'Class:Rack/Attribute:nb_u+' => '',
'Class:Rack/Attribute:device_list' => 'Matériels',
'Class:Rack/Attribute:device_list+' => '',
'Class:Rack/Attribute:device_list+' => 'Tous les matériels rackés dans ce rack',
'Class:Rack/Attribute:enclosure_list' => 'Chassis',
'Class:Rack/Attribute:enclosure_list+' => '',
'Class:Rack/Attribute:enclosure_list+' => 'Tous les chassis dans ce rack',
));
//
@@ -242,9 +242,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:ConnectableCI' => 'CI connecté',
'Class:ConnectableCI+' => '',
'Class:ConnectableCI/Attribute:networkdevice_list' => 'Equipements réseaux',
'Class:ConnectableCI/Attribute:networkdevice_list+' => '',
'Class:ConnectableCI/Attribute:networkdevice_list+' => 'Tous les équipements réseaux connectés à ce matériel',
'Class:ConnectableCI/Attribute:physicalinterface_list' => 'Interfaces réseaux',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => '',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => 'Toutes les interfaces réseaux physiques',
));
//
@@ -275,9 +275,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:DatacenterDevice/Attribute:powerB_name' => 'Nom Source électrique B',
'Class:DatacenterDevice/Attribute:powerB_name+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list' => 'FC ports',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => 'Toutes les interfaces fibre optique de ce matériel',
'Class:DatacenterDevice/Attribute:san_list' => 'SANs',
'Class:DatacenterDevice/Attribute:san_list+' => '',
'Class:DatacenterDevice/Attribute:san_list+' => 'Tous les switchs SAN connectés à ce matériel',
'Class:DatacenterDevice/Attribute:redundancy' => 'Redondance',
'Class:DatacenterDevice/Attribute:redundancy/count' => 'Le %2$s est alimenté si au moins une source électrique (A ou B) est opérationnelle',
// Unused yet
@@ -297,7 +297,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Nom Type',
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list' => 'Matériel connectés',
'Class:NetworkDevice/Attribute:connectablecis_list+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'Tous les matériels connectés à cet appareil réseau',
'Class:NetworkDevice/Attribute:iosversion_id' => 'Version IOS',
'Class:NetworkDevice/Attribute:iosversion_id+' => '',
'Class:NetworkDevice/Attribute:iosversion_name' => 'Nom Version IOS',
@@ -330,7 +330,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Server/Attribute:ram' => 'RAM',
'Class:Server/Attribute:ram+' => '',
'Class:Server/Attribute:logicalvolumes_list' => 'Volumes logiques',
'Class:Server/Attribute:logicalvolumes_list+' => '',
'Class:Server/Attribute:logicalvolumes_list+' => 'Tous les volumes logiques connectés à ce serveur',
));
//
@@ -341,7 +341,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:StorageSystem' => 'Système de stockage',
'Class:StorageSystem+' => '',
'Class:StorageSystem/Attribute:logicalvolume_list' => 'Volumes logiques',
'Class:StorageSystem/Attribute:logicalvolume_list+' => '',
'Class:StorageSystem/Attribute:logicalvolume_list+' => 'Tous les volumes logiques dans ce système de stockage',
));
//
@@ -352,7 +352,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:SANSwitch' => 'Switch SAN',
'Class:SANSwitch+' => '',
'Class:SANSwitch/Attribute:datacenterdevice_list' => 'Matériels connectés',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => '',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'Tous les matériels connectés à ce switch SAN',
));
//
@@ -363,7 +363,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:TapeLibrary' => 'Bandothèque',
'Class:TapeLibrary+' => '',
'Class:TapeLibrary/Attribute:tapes_list' => 'Bandes',
'Class:TapeLibrary/Attribute:tapes_list+' => '',
'Class:TapeLibrary/Attribute:tapes_list+' => 'Toutes les bandes dans cette bandothèque',
));
//
@@ -374,7 +374,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:NAS' => 'NAS',
'Class:NAS+' => '',
'Class:NAS/Attribute:nasfilesystem_list' => 'Systèmes de fichier NAS',
'Class:NAS/Attribute:nasfilesystem_list+' => '',
'Class:NAS/Attribute:nasfilesystem_list+' => 'Tous les systèmes de fichier dans ce NAS',
));
//
@@ -430,7 +430,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:PowerSource' => 'Arrivée électrique',
'Class:PowerSource+' => '',
'Class:PowerSource/Attribute:pdus_list' => 'PDUs',
'Class:PowerSource/Attribute:pdus_list+' => '',
'Class:PowerSource/Attribute:pdus_list+' => 'Toutes les PDUs de cette arrivée électrique',
));
//
@@ -473,7 +473,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Enclosure/Attribute:nb_u' => 'NB Unité',
'Class:Enclosure/Attribute:nb_u+' => '',
'Class:Enclosure/Attribute:device_list' => 'Devices',
'Class:Enclosure/Attribute:device_list+' => '',
'Class:Enclosure/Attribute:device_list+' => 'Tous les matériels dans ce chassis',
));
//
@@ -484,9 +484,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:ApplicationSolution' => 'Solution applicative',
'Class:ApplicationSolution+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list' => 'CIs',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'Tous les éléments de configuration qui composent cette solution applicative',
'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Processus métiers',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => '',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'Tous les processus métiers dépendants de cette solution applicative',
'Class:ApplicationSolution/Attribute:status' => 'Statut',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => 'active',
@@ -507,7 +507,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:BusinessProcess' => 'Processus métier',
'Class:BusinessProcess+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Solutions applicatives',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'Toutes les solutions applicatives qui impactent ce processus métier',
'Class:BusinessProcess/Attribute:status' => 'Statut',
'Class:BusinessProcess/Attribute:status+' => '',
'Class:BusinessProcess/Attribute:status/Value:active' => 'actif',
@@ -553,7 +553,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Middleware' => 'Middleware',
'Class:Middleware+' => '',
'Class:Middleware/Attribute:middlewareinstance_list' => 'Instance Middleware',
'Class:Middleware/Attribute:middlewareinstance_list+' => '',
'Class:Middleware/Attribute:middlewareinstance_list+' => 'Toutes les instances de middleware fournies par ce middleware',
));
//
@@ -564,7 +564,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:DBServer' => 'Serveur de base de données',
'Class:DBServer+' => '',
'Class:DBServer/Attribute:dbschema_list' => 'Instances de base de données',
'Class:DBServer/Attribute:dbschema_list+' => '',
'Class:DBServer/Attribute:dbschema_list+' => 'Toutes les instances de base de données pour ce serveur',
));
//
@@ -575,7 +575,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:WebServer' => 'Serveur Web',
'Class:WebServer+' => '',
'Class:WebServer/Attribute:webapp_list' => 'Application Web',
'Class:WebServer/Attribute:webapp_list+' => '',
'Class:WebServer/Attribute:webapp_list+' => 'Toutes les applications Web disponibles sur ce serveur',
));
//
@@ -656,7 +656,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:VirtualDevice/Attribute:status/Value:stock' => 'stock',
'Class:VirtualDevice/Attribute:status/Value:stock+' => 'stock',
'Class:VirtualDevice/Attribute:logicalvolumes_list' => 'Volumes logiques',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => '',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => 'Tous les volumes logiques utilisés par ce matériel',
));
//
@@ -667,7 +667,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:VirtualHost' => 'Hôte Virtuel',
'Class:VirtualHost+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list' => 'Machines virtuelles',
'Class:VirtualHost/Attribute:virtualmachine_list+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list+' => 'Toutes les machiens virtuelles hébergées par cet hôte',
));
//
@@ -695,7 +695,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Farm' => 'vCluster',
'Class:Farm+' => '',
'Class:Farm/Attribute:hypervisor_list' => 'Hyperviseurs',
'Class:Farm/Attribute:hypervisor_list+' => '',
'Class:Farm/Attribute:hypervisor_list+' => 'Tous les hyperviseurs qui composent ce vCluster',
'Class:Farm/Attribute:redundancy' => 'Haute disponibilité',
'Class:Farm/Attribute:redundancy/disabled' => 'Le vCluster est opérationnel si tous les hyperviseurs qui le composent sont opérationnels',
'Class:Farm/Attribute:redundancy/count' => 'Nombre minimal d\'hyperviseurs pour que le vCluster soit opérationnel : %1$s',
@@ -732,7 +732,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:VirtualMachine/Attribute:managementip' => 'IP',
'Class:VirtualMachine/Attribute:managementip+' => '',
'Class:VirtualMachine/Attribute:logicalinterface_list' => 'Interfaces réseaux',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => '',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => 'Toutes les interfaces réseaux logiques',
));
//
@@ -757,9 +757,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:LogicalVolume/Attribute:storagesystem_name' => 'Nom Système de stockage',
'Class:LogicalVolume/Attribute:storagesystem_name+' => '',
'Class:LogicalVolume/Attribute:servers_list' => 'Serveurs',
'Class:LogicalVolume/Attribute:servers_list+' => '',
'Class:LogicalVolume/Attribute:servers_list+' => 'Tous les serveurs utilisant ce volume',
'Class:LogicalVolume/Attribute:virtualdevices_list' => 'Machines virtuelles',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => '',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => 'Toutes les machines virtuelles utilisant ce volume',
));
//
@@ -875,7 +875,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Software/Attribute:version' => 'Version',
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:documents_list' => 'Documents',
'Class:Software/Attribute:documents_list+' => '',
'Class:Software/Attribute:documents_list+' => 'Tous les documents liés à ce logiciel',
'Class:Software/Attribute:type' => 'Type',
'Class:Software/Attribute:type+' => '',
'Class:Software/Attribute:type/Value:DBServer' => 'Serveur de base de données',
@@ -889,11 +889,11 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Software/Attribute:type/Value:WebServer' => 'Serveur Web',
'Class:Software/Attribute:type/Value:WebServer+' => 'Serveur Web',
'Class:Software/Attribute:softwareinstance_list' => 'Instances logiciels',
'Class:Software/Attribute:softwareinstance_list+' => '',
'Class:Software/Attribute:softwareinstance_list+' => 'Toutes les instances de ce logiciel',
'Class:Software/Attribute:softwarepatch_list' => 'Patchs logiciels',
'Class:Software/Attribute:softwarepatch_list+' => '',
'Class:Software/Attribute:softwarepatch_list+' => 'Tous les patchs de ce logiciel',
'Class:Software/Attribute:softwarelicence_list' => 'Software licences',
'Class:Software/Attribute:softwarelicence_list+' => '',
'Class:Software/Attribute:softwarelicence_list+' => 'Toutes les licences de ce logiciel',
));
//
@@ -906,7 +906,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Patch/Attribute:name' => 'Nom',
'Class:Patch/Attribute:name+' => '',
'Class:Patch/Attribute:documents_list' => 'Documents',
'Class:Patch/Attribute:documents_list+' => '',
'Class:Patch/Attribute:documents_list+' => 'Tous les documents liés à ce patch',
'Class:Patch/Attribute:description' => 'Description',
'Class:Patch/Attribute:description+' => '',
'Class:Patch/Attribute:finalclass' => 'Sous-classe de Patch',
@@ -921,7 +921,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:OSPatch' => 'Patch OS',
'Class:OSPatch+' => '',
'Class:OSPatch/Attribute:functionalcis_list' => 'Systèmes',
'Class:OSPatch/Attribute:functionalcis_list+' => '',
'Class:OSPatch/Attribute:functionalcis_list+' => 'Tous les systèmes où ce patch est installé',
'Class:OSPatch/Attribute:osversion_id' => 'Version OS',
'Class:OSPatch/Attribute:osversion_id+' => '',
'Class:OSPatch/Attribute:osversion_name' => 'Nom Version OS',
@@ -940,7 +940,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:SoftwarePatch/Attribute:software_name' => 'Nom logiciel',
'Class:SoftwarePatch/Attribute:software_name+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list' => 'Instances logiciels',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => 'Tous les systèmes où ce logiciel est installé',
));
//
@@ -953,7 +953,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Licence/Attribute:name' => 'Nom',
'Class:Licence/Attribute:name+' => '',
'Class:Licence/Attribute:documents_list' => 'Documents',
'Class:Licence/Attribute:documents_list+' => '',
'Class:Licence/Attribute:documents_list+' => 'Tous les documents liés à cette licence',
'Class:Licence/Attribute:org_id' => 'Organisation',
'Class:Licence/Attribute:org_id+' => '',
'Class:Licence/Attribute:organization_name' => 'Nom organisation',
@@ -990,9 +990,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:OSLicence/Attribute:osversion_name' => 'Nom Version OS',
'Class:OSLicence/Attribute:osversion_name+' => '',
'Class:OSLicence/Attribute:virtualmachines_list' => 'Machines virtuelles',
'Class:OSLicence/Attribute:virtualmachines_list+' => '',
'Class:OSLicence/Attribute:virtualmachines_list+' => 'Toutes les machines virtuelles où cette licence est utilisée',
'Class:OSLicence/Attribute:servers_list' => 'Serveurs',
'Class:OSLicence/Attribute:servers_list+' => '',
'Class:OSLicence/Attribute:servers_list+' => 'Tous les serveurs où cette licence est utilisée',
));
//
@@ -1007,7 +1007,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:SoftwareLicence/Attribute:software_name' => 'Nom Logiciel',
'Class:SoftwareLicence/Attribute:software_name+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list' => 'Instances logiciels',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => 'Tous les systèmes où cette licence est utilisée',
));
//
@@ -1057,7 +1057,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Brand' => 'Marque',
'Class:Brand+' => '',
'Class:Brand/Attribute:physicaldevices_list' => 'Matériels',
'Class:Brand/Attribute:physicaldevices_list+' => '',
'Class:Brand/Attribute:physicaldevices_list+' => 'Tous les matériels correspondant à cette marque',
'Class:Brand/UniquenessRule:name+' => 'Le nom doit être unique',
'Class:Brand/UniquenessRule:name' => 'cette marque existe déjà',
));
@@ -1112,7 +1112,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Model/Attribute:type/Value:Phone' => 'Téléphone',
'Class:Model/Attribute:type/Value:Phone+' => 'Téléphone',
'Class:Model/Attribute:physicaldevices_list' => 'Matériels',
'Class:Model/Attribute:physicaldevices_list+' => '',
'Class:Model/Attribute:physicaldevices_list+' => 'Tous les matériels correspondant à ce modèle',
'Class:Model/UniquenessRule:name_brand+' => 'Le nom doit être unique dans une marque',
'Class:Model/UniquenessRule:name_brand' => 'ce modèle existe déjà dans cette marque',
));
@@ -1125,7 +1125,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:NetworkDeviceType' => 'Type d\'équipement réseau',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Equipements réseaux',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Tous les équipements réseaux correspondant à ce type',
));
//
@@ -1469,7 +1469,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Group/Attribute:parent_name' => 'Nom groupe parent',
'Class:Group/Attribute:parent_name+' => '',
'Class:Group/Attribute:ci_list' => 'CIs liés',
'Class:Group/Attribute:ci_list+' => '',
'Class:Group/Attribute:ci_list+' => 'Tous les éléments de configuration liés à ce groupe',
'Class:Group/Attribute:parent_id_friendlyname' => 'Nom usuel du parent',
'Class:Group/Attribute:parent_id_friendlyname+' => '',
));

View File

@@ -1466,7 +1466,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'Class:Group/Attribute:parent_name' => 'Név',
'Class:Group/Attribute:parent_name+' => '',
'Class:Group/Attribute:ci_list' => 'Kapcsolódó CI-k',
'Class:Group/Attribute:ci_list+' => '',
'Class:Group/Attribute:ci_list+' => 'All the configuration items linked to this group~~',
'Class:Group/Attribute:parent_id_friendlyname' => 'Parent Group~~',
'Class:Group/Attribute:parent_id_friendlyname+' => '~~',
));

View File

@@ -1466,7 +1466,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'Class:Group/Attribute:parent_name' => 'Nome',
'Class:Group/Attribute:parent_name+' => '',
'Class:Group/Attribute:ci_list' => 'CIs collegati',
'Class:Group/Attribute:ci_list+' => '',
'Class:Group/Attribute:ci_list+' => 'All the configuration items linked to this group~~',
'Class:Group/Attribute:parent_id_friendlyname' => 'Parent Group~~',
'Class:Group/Attribute:parent_id_friendlyname+' => '~~',
));

View File

@@ -114,13 +114,13 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:FunctionalCI/Attribute:move2production' => '本稼働開始日',
'Class:FunctionalCI/Attribute:move2production+' => '',
'Class:FunctionalCI/Attribute:contacts_list' => '連絡先',
'Class:FunctionalCI/Attribute:contacts_list+' => '',
'Class:FunctionalCI/Attribute:contacts_list+' => 'All the contacts for this configuration item~~',
'Class:FunctionalCI/Attribute:documents_list' => '文書',
'Class:FunctionalCI/Attribute:documents_list+' => '',
'Class:FunctionalCI/Attribute:documents_list+' => 'All the documents linked to this configuration item~~',
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'アプリケーションソリューション',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => '',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'All the application solutions depending on this configuration item~~',
'Class:FunctionalCI/Attribute:softwares_list' => 'ソフトウエア',
'Class:FunctionalCI/Attribute:softwares_list+' => '',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
'Class:FunctionalCI/Attribute:finalclass' => 'CIタイプ',
'Class:FunctionalCI/Attribute:finalclass+' => '',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
@@ -175,9 +175,9 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Rack/Attribute:nb_u' => 'ユニット数',
'Class:Rack/Attribute:nb_u+' => '',
'Class:Rack/Attribute:device_list' => 'デバイス',
'Class:Rack/Attribute:device_list+' => '',
'Class:Rack/Attribute:device_list+' => 'All the physical devices racked into this rack~~',
'Class:Rack/Attribute:enclosure_list' => 'エンクロージャ',
'Class:Rack/Attribute:enclosure_list+' => '',
'Class:Rack/Attribute:enclosure_list+' => 'All the enclosures in this rack~~',
));
//
@@ -239,9 +239,9 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:ConnectableCI' => '接続可能なCI',
'Class:ConnectableCI+' => '物理的なCI',
'Class:ConnectableCI/Attribute:networkdevice_list' => 'ネットワークデバイス',
'Class:ConnectableCI/Attribute:networkdevice_list+' => '',
'Class:ConnectableCI/Attribute:networkdevice_list+' => 'All network devices connected to this device~~',
'Class:ConnectableCI/Attribute:physicalinterface_list' => 'ネットワークインターフェース',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => '',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => 'All the physical network interfaces~~',
));
//
@@ -272,9 +272,9 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:DatacenterDevice/Attribute:powerB_name' => '電源B名',
'Class:DatacenterDevice/Attribute:powerB_name+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list' => 'FCポート',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => 'All the fiber channel interfaces for this device~~',
'Class:DatacenterDevice/Attribute:san_list' => 'SAN',
'Class:DatacenterDevice/Attribute:san_list+' => '',
'Class:DatacenterDevice/Attribute:san_list+' => 'All the SAN switches connected to this device~~',
'Class:DatacenterDevice/Attribute:redundancy' => 'Redundancy~~',
'Class:DatacenterDevice/Attribute:redundancy/count' => 'The device is up if at least one power connection (A or B) is up~~',
// Unused yet
@@ -294,7 +294,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'ネットワークタイプ名',
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list' => 'デバイス',
'Class:NetworkDevice/Attribute:connectablecis_list+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'All the devices connected to this network device~~',
'Class:NetworkDevice/Attribute:iosversion_id' => 'IOSバージョン',
'Class:NetworkDevice/Attribute:iosversion_id+' => '',
'Class:NetworkDevice/Attribute:iosversion_name' => 'IOSバージョン名',
@@ -327,7 +327,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Server/Attribute:ram' => 'RAM',
'Class:Server/Attribute:ram+' => '',
'Class:Server/Attribute:logicalvolumes_list' => '論理ボリューム',
'Class:Server/Attribute:logicalvolumes_list+' => '',
'Class:Server/Attribute:logicalvolumes_list+' => 'All the logical volumes connected to this server~~',
));
//
@@ -338,7 +338,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:StorageSystem' => 'ストレージシステム',
'Class:StorageSystem+' => '',
'Class:StorageSystem/Attribute:logicalvolume_list' => '論理ボリューム',
'Class:StorageSystem/Attribute:logicalvolume_list+' => '',
'Class:StorageSystem/Attribute:logicalvolume_list+' => 'All the logical volumes in this storage system~~',
));
//
@@ -349,7 +349,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:SANSwitch' => 'SANスイッチ',
'Class:SANSwitch+' => '',
'Class:SANSwitch/Attribute:datacenterdevice_list' => 'デバイス',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => '',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'All the devices connected to this SAN switch~~',
));
//
@@ -360,7 +360,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:TapeLibrary' => 'テープライブラリ',
'Class:TapeLibrary+' => '',
'Class:TapeLibrary/Attribute:tapes_list' => 'テープ',
'Class:TapeLibrary/Attribute:tapes_list+' => '',
'Class:TapeLibrary/Attribute:tapes_list+' => 'All the tapes in the tape library~~',
));
//
@@ -371,7 +371,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:NAS' => 'NAS',
'Class:NAS+' => '',
'Class:NAS/Attribute:nasfilesystem_list' => 'ファイルシステム',
'Class:NAS/Attribute:nasfilesystem_list+' => '',
'Class:NAS/Attribute:nasfilesystem_list+' => 'All the file systems in this NAS~~',
));
//
@@ -427,7 +427,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:PowerSource' => '電源',
'Class:PowerSource+' => '',
'Class:PowerSource/Attribute:pdus_list' => 'PDU',
'Class:PowerSource/Attribute:pdus_list+' => '',
'Class:PowerSource/Attribute:pdus_list+' => 'All the PDUs using this power source~~',
));
//
@@ -470,7 +470,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Enclosure/Attribute:nb_u' => 'ユニット数',
'Class:Enclosure/Attribute:nb_u+' => '',
'Class:Enclosure/Attribute:device_list' => 'デバイス',
'Class:Enclosure/Attribute:device_list+' => '',
'Class:Enclosure/Attribute:device_list+' => 'All the devices in this enclosure~~',
));
//
@@ -481,9 +481,9 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:ApplicationSolution' => 'アプリケーションソリューション',
'Class:ApplicationSolution+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list' => 'CI',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution~~',
'Class:ApplicationSolution/Attribute:businessprocess_list' => 'ビジネスプロセス',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => '',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution~~',
'Class:ApplicationSolution/Attribute:status' => '状態',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => 'アクティブ',
@@ -504,7 +504,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:BusinessProcess' => 'ビジネスプロセス',
'Class:BusinessProcess+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'アプリケーションソリューション',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'All the application solutions that impact this business process~~',
'Class:BusinessProcess/Attribute:status' => '状態',
'Class:BusinessProcess/Attribute:status+' => '',
'Class:BusinessProcess/Attribute:status/Value:active' => 'アクティブ',
@@ -550,7 +550,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Middleware' => 'ミドルウエア',
'Class:Middleware+' => '',
'Class:Middleware/Attribute:middlewareinstance_list' => 'ミドルウエアインスタンス',
'Class:Middleware/Attribute:middlewareinstance_list+' => '',
'Class:Middleware/Attribute:middlewareinstance_list+' => 'All the middleware instances provided by this middleware~~',
));
//
@@ -561,7 +561,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:DBServer' => 'DBサーバ',
'Class:DBServer+' => '',
'Class:DBServer/Attribute:dbschema_list' => 'DBスキーマ',
'Class:DBServer/Attribute:dbschema_list+' => '',
'Class:DBServer/Attribute:dbschema_list+' => 'All the database schemas for this DB server~~',
));
//
@@ -572,7 +572,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:WebServer' => 'Webサーバ',
'Class:WebServer+' => '',
'Class:WebServer/Attribute:webapp_list' => 'Webアプリケーション',
'Class:WebServer/Attribute:webapp_list+' => '',
'Class:WebServer/Attribute:webapp_list+' => 'All the web applications available on this web server~~',
));
//
@@ -653,7 +653,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:VirtualDevice/Attribute:status/Value:stock' => '保存',
'Class:VirtualDevice/Attribute:status/Value:stock+' => '保存',
'Class:VirtualDevice/Attribute:logicalvolumes_list' => '論理ボリューム',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => '',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => 'All the logical volumes used by this device~~',
));
//
@@ -664,7 +664,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:VirtualHost' => '仮想ホスト',
'Class:VirtualHost+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list' => '仮想マシン',
'Class:VirtualHost/Attribute:virtualmachine_list+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list+' => 'All the virtual machines hosted by this host~~',
));
//
@@ -692,7 +692,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Farm' => 'ファーム',
'Class:Farm+' => '',
'Class:Farm/Attribute:hypervisor_list' => 'ハイパーバイザー',
'Class:Farm/Attribute:hypervisor_list+' => '',
'Class:Farm/Attribute:hypervisor_list+' => 'All the hypervisors that compose this farm~~',
'Class:Farm/Attribute:redundancy' => 'High availability~~',
'Class:Farm/Attribute:redundancy/disabled' => 'The farm is up if all the hypervisors are up~~',
'Class:Farm/Attribute:redundancy/count' => 'The farm is up if at least %1$s hypervisor(s) is(are) up~~',
@@ -729,7 +729,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:VirtualMachine/Attribute:managementip' => '管理ip',
'Class:VirtualMachine/Attribute:managementip+' => '',
'Class:VirtualMachine/Attribute:logicalinterface_list' => 'ネットワークインターフェース',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => '',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => 'All the logical network interfaces~~',
));
//
@@ -754,9 +754,9 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:LogicalVolume/Attribute:storagesystem_name' => 'ストレージシステム名',
'Class:LogicalVolume/Attribute:storagesystem_name+' => '',
'Class:LogicalVolume/Attribute:servers_list' => 'サーバ',
'Class:LogicalVolume/Attribute:servers_list+' => '',
'Class:LogicalVolume/Attribute:servers_list+' => 'All the servers using this volume~~',
'Class:LogicalVolume/Attribute:virtualdevices_list' => '仮想デバイス',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => '',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => 'All the virtual devices using this volume~~',
));
//
@@ -872,7 +872,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Software/Attribute:version' => 'バージョン',
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:documents_list' => '文書',
'Class:Software/Attribute:documents_list+' => '',
'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software~~',
'Class:Software/Attribute:type' => 'タイプ',
'Class:Software/Attribute:type+' => '',
'Class:Software/Attribute:type/Value:DBServer' => 'DBサーバ',
@@ -886,11 +886,11 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Software/Attribute:type/Value:WebServer' => 'Webサーバ',
'Class:Software/Attribute:type/Value:WebServer+' => 'Webサーバ',
'Class:Software/Attribute:softwareinstance_list' => 'ソフトウエアインスタンス',
'Class:Software/Attribute:softwareinstance_list+' => '',
'Class:Software/Attribute:softwareinstance_list+' => 'All the software instances for this software~~',
'Class:Software/Attribute:softwarepatch_list' => 'ソフトウエアパッチ',
'Class:Software/Attribute:softwarepatch_list+' => '',
'Class:Software/Attribute:softwarepatch_list+' => 'All the patchs for this software~~',
'Class:Software/Attribute:softwarelicence_list' => 'ソフトウエアライセンス',
'Class:Software/Attribute:softwarelicence_list+' => '',
'Class:Software/Attribute:softwarelicence_list+' => 'All the licenses for this software~~',
));
//
@@ -903,7 +903,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Patch/Attribute:name' => '名前',
'Class:Patch/Attribute:name+' => '',
'Class:Patch/Attribute:documents_list' => '文書',
'Class:Patch/Attribute:documents_list+' => '',
'Class:Patch/Attribute:documents_list+' => 'All the documents linked to this patch~~',
'Class:Patch/Attribute:description' => '説明',
'Class:Patch/Attribute:description+' => '',
'Class:Patch/Attribute:finalclass' => 'タイプ',
@@ -918,7 +918,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:OSPatch' => 'OSパッチ',
'Class:OSPatch+' => '',
'Class:OSPatch/Attribute:functionalcis_list' => 'デバイス',
'Class:OSPatch/Attribute:functionalcis_list+' => '',
'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed~~',
'Class:OSPatch/Attribute:osversion_id' => 'OSバージョン',
'Class:OSPatch/Attribute:osversion_id+' => '',
'Class:OSPatch/Attribute:osversion_name' => 'OSバージョン名',
@@ -937,7 +937,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:SoftwarePatch/Attribute:software_name' => 'ソフトウエア名',
'Class:SoftwarePatch/Attribute:software_name+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list' => 'ソフトウエアインスタンス',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => 'All the systems where this software patch is installed~~',
));
//
@@ -950,7 +950,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Licence/Attribute:name' => '名前',
'Class:Licence/Attribute:name+' => '',
'Class:Licence/Attribute:documents_list' => '文書',
'Class:Licence/Attribute:documents_list+' => '',
'Class:Licence/Attribute:documents_list+' => 'All the documents linked to this license~~',
'Class:Licence/Attribute:org_id' => '組織',
'Class:Licence/Attribute:org_id+' => '',
'Class:Licence/Attribute:organization_name' => '組織名',
@@ -987,9 +987,9 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:OSLicence/Attribute:osversion_name' => 'OSバージョン名',
'Class:OSLicence/Attribute:osversion_name+' => '',
'Class:OSLicence/Attribute:virtualmachines_list' => '仮想マシン',
'Class:OSLicence/Attribute:virtualmachines_list+' => '',
'Class:OSLicence/Attribute:virtualmachines_list+' => 'All the virtual machines where this license is used~~',
'Class:OSLicence/Attribute:servers_list' => 'サーバ',
'Class:OSLicence/Attribute:servers_list+' => '',
'Class:OSLicence/Attribute:servers_list+' => 'All the servers where this license is used~~',
));
//
@@ -1004,7 +1004,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:SoftwareLicence/Attribute:software_name' => 'ソフトウエア名',
'Class:SoftwareLicence/Attribute:software_name+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list' => 'ソフトウエアインスタンス',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => 'All the systems where this license is used~~',
));
//
@@ -1054,7 +1054,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Brand' => 'ブランド',
'Class:Brand+' => '',
'Class:Brand/Attribute:physicaldevices_list' => '物理デバイス',
'Class:Brand/Attribute:physicaldevices_list+' => '',
'Class:Brand/Attribute:physicaldevices_list+' => 'All the physical devices corresponding to this brand~~',
'Class:Brand/UniquenessRule:name+' => 'The name must be unique~~',
'Class:Brand/UniquenessRule:name' => 'This brand already exists~~',
));
@@ -1109,7 +1109,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Model/Attribute:type/Value:Phone' => '電話',
'Class:Model/Attribute:type/Value:Phone+' => '電話',
'Class:Model/Attribute:physicaldevices_list' => '物理デバイス',
'Class:Model/Attribute:physicaldevices_list+' => '',
'Class:Model/Attribute:physicaldevices_list+' => 'All the physical devices corresponding to this model~~',
'Class:Model/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~',
'Class:Model/UniquenessRule:name_brand' => 'this model already exists for this brand~~',
));
@@ -1122,7 +1122,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:NetworkDeviceType' => 'ネットワークデバイスタイプ',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'ネットワークデバイス',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type~~',
));
//
@@ -1466,7 +1466,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Group/Attribute:parent_name' => '名前',
'Class:Group/Attribute:parent_name+' => '',
'Class:Group/Attribute:ci_list' => 'リンクされたCI',
'Class:Group/Attribute:ci_list+' => '',
'Class:Group/Attribute:ci_list+' => 'All the configuration items linked to this group~~',
'Class:Group/Attribute:parent_id_friendlyname' => '親グループ',
'Class:Group/Attribute:parent_id_friendlyname+' => '',
));

View File

@@ -119,13 +119,13 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:FunctionalCI/Attribute:move2production' => 'Dátum presunu do produkcie',
'Class:FunctionalCI/Attribute:move2production+' => '',
'Class:FunctionalCI/Attribute:contacts_list' => 'Kontakty',
'Class:FunctionalCI/Attribute:contacts_list+' => '',
'Class:FunctionalCI/Attribute:contacts_list+' => 'All the contacts for this configuration item~~',
'Class:FunctionalCI/Attribute:documents_list' => 'Zoznam dokumentov',
'Class:FunctionalCI/Attribute:documents_list+' => '',
'Class:FunctionalCI/Attribute:documents_list+' => 'All the documents linked to this configuration item~~',
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Zoznam aplikačných riešení',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => '',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'All the application solutions depending on this configuration item~~',
'Class:FunctionalCI/Attribute:softwares_list' => 'Softvér',
'Class:FunctionalCI/Attribute:softwares_list+' => '',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
'Class:FunctionalCI/Attribute:finalclass' => 'Typ komponentu',
'Class:FunctionalCI/Attribute:finalclass+' => '',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
@@ -180,9 +180,9 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Rack/Attribute:nb_u' => 'NB U',
'Class:Rack/Attribute:nb_u+' => '',
'Class:Rack/Attribute:device_list' => 'Zariadenia',
'Class:Rack/Attribute:device_list+' => '',
'Class:Rack/Attribute:device_list+' => 'All the physical devices racked into this rack~~',
'Class:Rack/Attribute:enclosure_list' => 'Kryt',
'Class:Rack/Attribute:enclosure_list+' => '',
'Class:Rack/Attribute:enclosure_list+' => 'All the enclosures in this rack~~',
));
//
@@ -244,9 +244,9 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:ConnectableCI' => 'Pripojiteľné zariadenie',
'Class:ConnectableCI+' => '',
'Class:ConnectableCI/Attribute:networkdevice_list' => 'Sieťové zariadenia',
'Class:ConnectableCI/Attribute:networkdevice_list+' => '',
'Class:ConnectableCI/Attribute:networkdevice_list+' => 'All network devices connected to this device~~',
'Class:ConnectableCI/Attribute:physicalinterface_list' => 'Sieťové rozhrania',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => '',
'Class:ConnectableCI/Attribute:physicalinterface_list+' => 'All the physical network interfaces~~',
));
//
@@ -277,9 +277,9 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:DatacenterDevice/Attribute:powerB_name' => 'Názov zdroja napájania B',
'Class:DatacenterDevice/Attribute:powerB_name+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list' => 'Zoznam optických rozhraní',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => 'All the fiber channel interfaces for this device~~',
'Class:DatacenterDevice/Attribute:san_list' => 'Úložiská (SAN)',
'Class:DatacenterDevice/Attribute:san_list+' => '',
'Class:DatacenterDevice/Attribute:san_list+' => 'All the SAN switches connected to this device~~',
'Class:DatacenterDevice/Attribute:redundancy' => 'Redundancy~~',
'Class:DatacenterDevice/Attribute:redundancy/count' => 'The device is up if at least one power connection (A or B) is up~~',
// Unused yet
@@ -299,7 +299,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Názov typu sieťového zariadenia',
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list' => 'Zariadenia',
'Class:NetworkDevice/Attribute:connectablecis_list+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'All the devices connected to this network device~~',
'Class:NetworkDevice/Attribute:iosversion_id' => 'IVerzia OS',
'Class:NetworkDevice/Attribute:iosversion_id+' => '',
'Class:NetworkDevice/Attribute:iosversion_name' => 'Názov IOS verzie',
@@ -332,7 +332,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Server/Attribute:ram' => 'Operačna pamäť',
'Class:Server/Attribute:ram+' => '',
'Class:Server/Attribute:logicalvolumes_list' => 'Logické disky',
'Class:Server/Attribute:logicalvolumes_list+' => '',
'Class:Server/Attribute:logicalvolumes_list+' => 'All the logical volumes connected to this server~~',
));
//
@@ -343,7 +343,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:StorageSystem' => 'Úložiskový systém',
'Class:StorageSystem+' => '',
'Class:StorageSystem/Attribute:logicalvolume_list' => 'Logické disky',
'Class:StorageSystem/Attribute:logicalvolume_list+' => '',
'Class:StorageSystem/Attribute:logicalvolume_list+' => 'All the logical volumes in this storage system~~',
));
//
@@ -354,7 +354,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:SANSwitch' => 'SAN prepínač',
'Class:SANSwitch+' => '',
'Class:SANSwitch/Attribute:datacenterdevice_list' => 'Zariadenia',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => '',
'Class:SANSwitch/Attribute:datacenterdevice_list+' => 'All the devices connected to this SAN switch~~',
));
//
@@ -365,7 +365,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:TapeLibrary' => 'Pásková knižnica',
'Class:TapeLibrary+' => '',
'Class:TapeLibrary/Attribute:tapes_list' => 'Pásky',
'Class:TapeLibrary/Attribute:tapes_list+' => '',
'Class:TapeLibrary/Attribute:tapes_list+' => 'All the tapes in the tape library~~',
));
//
@@ -376,7 +376,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:NAS' => 'NAS',
'Class:NAS+' => '',
'Class:NAS/Attribute:nasfilesystem_list' => 'Súborové systémy',
'Class:NAS/Attribute:nasfilesystem_list+' => '',
'Class:NAS/Attribute:nasfilesystem_list+' => 'All the file systems in this NAS~~',
));
//
@@ -432,7 +432,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:PowerSource' => 'Napájací zdroj',
'Class:PowerSource+' => '',
'Class:PowerSource/Attribute:pdus_list' => 'Napäťové distribučné jednotky (PDU)',
'Class:PowerSource/Attribute:pdus_list+' => '',
'Class:PowerSource/Attribute:pdus_list+' => 'All the PDUs using this power source~~',
));
//
@@ -475,7 +475,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Enclosure/Attribute:nb_u' => 'NB U',
'Class:Enclosure/Attribute:nb_u+' => '',
'Class:Enclosure/Attribute:device_list' => 'Zariadenia',
'Class:Enclosure/Attribute:device_list+' => '',
'Class:Enclosure/Attribute:device_list+' => 'All the devices in this enclosure~~',
));
//
@@ -486,9 +486,9 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:ApplicationSolution' => 'Aplikačné riešenie',
'Class:ApplicationSolution+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list' => 'Komponenty',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution~~',
'Class:ApplicationSolution/Attribute:businessprocess_list' => 'Biznis procesy',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => '',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution~~',
'Class:ApplicationSolution/Attribute:status' => 'Stav',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => 'Aktívne',
@@ -509,7 +509,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:BusinessProcess' => 'Biznis proces',
'Class:BusinessProcess+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list' => 'Aplikačné riešenia',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'All the application solutions that impact this business process~~',
'Class:BusinessProcess/Attribute:status' => 'Stav',
'Class:BusinessProcess/Attribute:status+' => '',
'Class:BusinessProcess/Attribute:status/Value:active' => 'Aktívny',
@@ -555,7 +555,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Middleware' => 'Middleware',
'Class:Middleware+' => '',
'Class:Middleware/Attribute:middlewareinstance_list' => 'Middleware inštancie',
'Class:Middleware/Attribute:middlewareinstance_list+' => '',
'Class:Middleware/Attribute:middlewareinstance_list+' => 'All the middleware instances provided by this middleware~~',
));
//
@@ -566,7 +566,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:DBServer' => 'DB Server',
'Class:DBServer+' => '',
'Class:DBServer/Attribute:dbschema_list' => 'DB schémy',
'Class:DBServer/Attribute:dbschema_list+' => '',
'Class:DBServer/Attribute:dbschema_list+' => 'All the database schemas for this DB server~~',
));
//
@@ -577,7 +577,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:WebServer' => 'Web server',
'Class:WebServer+' => '',
'Class:WebServer/Attribute:webapp_list' => 'Webové aplikácie',
'Class:WebServer/Attribute:webapp_list+' => '',
'Class:WebServer/Attribute:webapp_list+' => 'All the web applications available on this web server~~',
));
//
@@ -658,7 +658,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:VirtualDevice/Attribute:status/Value:stock' => 'Zásoby',
'Class:VirtualDevice/Attribute:status/Value:stock+' => '',
'Class:VirtualDevice/Attribute:logicalvolumes_list' => 'Zoznam logických dielov',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => '',
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => 'All the logical volumes used by this device~~',
));
//
@@ -669,7 +669,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:VirtualHost' => 'Virtuálny host',
'Class:VirtualHost+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list' => 'Zoznam virtuálnych strojov',
'Class:VirtualHost/Attribute:virtualmachine_list+' => '',
'Class:VirtualHost/Attribute:virtualmachine_list+' => 'All the virtual machines hosted by this host~~',
));
//
@@ -697,7 +697,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Farm' => 'Farma',
'Class:Farm+' => '',
'Class:Farm/Attribute:hypervisor_list' => 'Hypervisori',
'Class:Farm/Attribute:hypervisor_list+' => '',
'Class:Farm/Attribute:hypervisor_list+' => 'All the hypervisors that compose this farm~~',
'Class:Farm/Attribute:redundancy' => 'High availability~~',
'Class:Farm/Attribute:redundancy/disabled' => 'The farm is up if all the hypervisors are up~~',
'Class:Farm/Attribute:redundancy/count' => 'The farm is up if at least %1$s hypervisor(s) is(are) up~~',
@@ -734,7 +734,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:VirtualMachine/Attribute:managementip' => 'IP~~',
'Class:VirtualMachine/Attribute:managementip+' => '~~',
'Class:VirtualMachine/Attribute:logicalinterface_list' => 'Zoznam sieťových rozhraní',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => '',
'Class:VirtualMachine/Attribute:logicalinterface_list+' => 'All the logical network interfaces~~',
));
//
@@ -759,9 +759,9 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:LogicalVolume/Attribute:storagesystem_name' => 'Názov úložného systému',
'Class:LogicalVolume/Attribute:storagesystem_name+' => '',
'Class:LogicalVolume/Attribute:servers_list' => 'Servery',
'Class:LogicalVolume/Attribute:servers_list+' => '',
'Class:LogicalVolume/Attribute:servers_list+' => 'All the servers using this volume~~',
'Class:LogicalVolume/Attribute:virtualdevices_list' => 'Virtuálne zariadenia',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => '',
'Class:LogicalVolume/Attribute:virtualdevices_list+' => 'All the virtual devices using this volume~~',
));
//
@@ -877,7 +877,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Software/Attribute:version' => 'Verzia',
'Class:Software/Attribute:version+' => '',
'Class:Software/Attribute:documents_list' => 'Dokumenty',
'Class:Software/Attribute:documents_list+' => '',
'Class:Software/Attribute:documents_list+' => 'All the documents linked to this software~~',
'Class:Software/Attribute:type' => 'Typ',
'Class:Software/Attribute:type+' => '',
'Class:Software/Attribute:type/Value:DBServer' => 'DB Server',
@@ -891,11 +891,11 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Software/Attribute:type/Value:WebServer' => 'Web Server',
'Class:Software/Attribute:type/Value:WebServer+' => '',
'Class:Software/Attribute:softwareinstance_list' => 'Softvérové inštancie',
'Class:Software/Attribute:softwareinstance_list+' => '',
'Class:Software/Attribute:softwareinstance_list+' => 'All the software instances for this software~~',
'Class:Software/Attribute:softwarepatch_list' => 'Softvérové záplaty',
'Class:Software/Attribute:softwarepatch_list+' => '',
'Class:Software/Attribute:softwarepatch_list+' => 'All the patchs for this software~~',
'Class:Software/Attribute:softwarelicence_list' => 'Softvérové licencie',
'Class:Software/Attribute:softwarelicence_list+' => '',
'Class:Software/Attribute:softwarelicence_list+' => 'All the licenses for this software~~',
));
//
@@ -908,7 +908,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Patch/Attribute:name' => 'Názov',
'Class:Patch/Attribute:name+' => '',
'Class:Patch/Attribute:documents_list' => 'Zoznam dokumentov',
'Class:Patch/Attribute:documents_list+' => '',
'Class:Patch/Attribute:documents_list+' => 'All the documents linked to this patch~~',
'Class:Patch/Attribute:description' => 'Popis',
'Class:Patch/Attribute:description+' => '',
'Class:Patch/Attribute:finalclass' => 'Typ',
@@ -923,7 +923,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:OSPatch' => 'Záplata OS',
'Class:OSPatch+' => '',
'Class:OSPatch/Attribute:functionalcis_list' => 'Zariadenia',
'Class:OSPatch/Attribute:functionalcis_list+' => '',
'Class:OSPatch/Attribute:functionalcis_list+' => 'All the systems where this patch is installed~~',
'Class:OSPatch/Attribute:osversion_id' => 'Verzia OS',
'Class:OSPatch/Attribute:osversion_id+' => '',
'Class:OSPatch/Attribute:osversion_name' => 'Názov OS verzie',
@@ -942,7 +942,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:SoftwarePatch/Attribute:software_name' => 'Názov softvéru',
'Class:SoftwarePatch/Attribute:software_name+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list' => 'Inštancie softvéru',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => '',
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => 'All the systems where this software patch is installed~~',
));
//
@@ -955,7 +955,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Licence/Attribute:name' => 'Názov',
'Class:Licence/Attribute:name+' => '',
'Class:Licence/Attribute:documents_list' => 'Zoznam dokumentov',
'Class:Licence/Attribute:documents_list+' => '',
'Class:Licence/Attribute:documents_list+' => 'All the documents linked to this license~~',
'Class:Licence/Attribute:org_id' => 'Organizácia',
'Class:Licence/Attribute:org_id+' => '',
'Class:Licence/Attribute:organization_name' => 'Názov organizácie',
@@ -992,9 +992,9 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:OSLicence/Attribute:osversion_name' => 'Názov OS verzie',
'Class:OSLicence/Attribute:osversion_name+' => '',
'Class:OSLicence/Attribute:virtualmachines_list' => 'Virtuálne zariadenia',
'Class:OSLicence/Attribute:virtualmachines_list+' => '',
'Class:OSLicence/Attribute:virtualmachines_list+' => 'All the virtual machines where this license is used~~',
'Class:OSLicence/Attribute:servers_list' => 'Servery',
'Class:OSLicence/Attribute:servers_list+' => '',
'Class:OSLicence/Attribute:servers_list+' => 'All the servers where this license is used~~',
));
//
@@ -1009,7 +1009,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:SoftwareLicence/Attribute:software_name' => 'Názov softvéru',
'Class:SoftwareLicence/Attribute:software_name+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list' => 'Inštancie softvéru',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => '',
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => 'All the systems where this license is used~~',
));
//
@@ -1059,7 +1059,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Brand' => 'Značka',
'Class:Brand+' => '',
'Class:Brand/Attribute:physicaldevices_list' => 'Zariadenia',
'Class:Brand/Attribute:physicaldevices_list+' => '',
'Class:Brand/Attribute:physicaldevices_list+' => 'All the physical devices corresponding to this brand~~',
'Class:Brand/UniquenessRule:name+' => 'The name must be unique~~',
'Class:Brand/UniquenessRule:name' => 'This brand already exists~~',
));
@@ -1114,7 +1114,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Model/Attribute:type/Value:Phone' => 'Telephone~~',
'Class:Model/Attribute:type/Value:Phone+' => 'Telephone~~',
'Class:Model/Attribute:physicaldevices_list' => 'Zariadenia',
'Class:Model/Attribute:physicaldevices_list+' => '',
'Class:Model/Attribute:physicaldevices_list+' => 'All the physical devices corresponding to this model~~',
'Class:Model/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~',
'Class:Model/UniquenessRule:name_brand' => 'this model already exists for this brand~~',
));
@@ -1127,7 +1127,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:NetworkDeviceType' => 'Typ sieťového zariadenia',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Sieťové zariadenia',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => '',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type~~',
));
//
@@ -1471,7 +1471,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Group/Attribute:parent_name' => 'Meno rodiča',
'Class:Group/Attribute:parent_name+' => '',
'Class:Group/Attribute:ci_list' => 'Prislúchajúce zariadenia',
'Class:Group/Attribute:ci_list+' => '',
'Class:Group/Attribute:ci_list+' => 'All the configuration items linked to this group~~',
'Class:Group/Attribute:parent_id_friendlyname' => 'Priateľské meno rodičovskej skupiny',
'Class:Group/Attribute:parent_id_friendlyname+' => '',
));

View File

@@ -1473,7 +1473,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:Group/Attribute:parent_name' => 'Adı',
'Class:Group/Attribute:parent_name+' => '',
'Class:Group/Attribute:ci_list' => 'Bağlantılı Konfigürasyon Kalemleri (KK)',
'Class:Group/Attribute:ci_list+' => '',
'Class:Group/Attribute:ci_list+' => 'All the configuration items linked to this group~~',
'Class:Group/Attribute:parent_id_friendlyname' => 'Ana Grup',
'Class:Group/Attribute:parent_id_friendlyname+' => '~~',
));

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-config-mgmt/3.0.2',
'itop-config-mgmt/3.0.3',
array(
// Identification
//

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-config/3.0.2',
'itop-config/3.0.3',
array(
// Identification
//

View File

@@ -24,7 +24,7 @@
/** @noinspection PhpUnhandledExceptionInspection */
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-core-update/3.0.2',
'itop-core-update/3.0.3',
array(
// Identification
//

View File

@@ -18,7 +18,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-datacenter-mgmt/3.0.2',
'itop-datacenter-mgmt/3.0.3',
array(
// Identification
//

View File

@@ -25,7 +25,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-endusers-devices/3.0.2',
'itop-endusers-devices/3.0.3',
array(
// Identification
//

View File

@@ -53,7 +53,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:FAQCategory/Attribute:name' => 'Navn',
'Class:FAQCategory/Attribute:name+' => '',
'Class:FAQCategory/Attribute:faq_list' => 'FAQs',
'Class:FAQCategory/Attribute:faq_list+' => '',
'Class:FAQCategory/Attribute:faq_list+' => 'All the frequently asked questions related to this category~~',
));
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Menu:ProblemManagement' => 'Problem Management',

View File

@@ -55,7 +55,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:FAQCategory/Attribute:name' => 'Name',
'Class:FAQCategory/Attribute:name+' => '',
'Class:FAQCategory/Attribute:faq_list' => 'FAQs',
'Class:FAQCategory/Attribute:faq_list+' => '',
'Class:FAQCategory/Attribute:faq_list+' => 'All the frequently asked questions related to this category~~',
));
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Menu:ProblemManagement' => 'Problem Management',

View File

@@ -52,7 +52,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:FAQCategory/Attribute:name' => 'Nom',
'Class:FAQCategory/Attribute:name+' => '',
'Class:FAQCategory/Attribute:faq_list' => 'FAQs',
'Class:FAQCategory/Attribute:faq_list+' => '',
'Class:FAQCategory/Attribute:faq_list+' => 'Toutes les questions fréquemment posées liées à cette catégorie',
));
Dict::Add('FR FR', 'French', 'Français', array(
'Menu:ProblemManagement' => 'Gestion des problèmes',

View File

@@ -52,7 +52,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:FAQCategory/Attribute:name' => '名前',
'Class:FAQCategory/Attribute:name+' => '',
'Class:FAQCategory/Attribute:faq_list' => 'FAQ',
'Class:FAQCategory/Attribute:faq_list+' => '',
'Class:FAQCategory/Attribute:faq_list+' => 'All the frequently asked questions related to this category~~',
));
Dict::Add('JA JP', 'Japanese', '日本語', array(
'Menu:ProblemManagement' => '問題管理',

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-faq-light/3.0.2',
'itop-faq-light/3.0.3',
array(
// Identification
//

View File

@@ -24,7 +24,7 @@
/** @noinspection PhpUnhandledExceptionInspection */
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-files-information/3.0.2',
'itop-files-information/3.0.3',
array(
// Identification
//

View File

@@ -177,7 +177,9 @@ class FilesInformationUtils
else
{
$aStats = @stat($sFile);
$iSize += $aStats['size'];
if (is_array($aStats)) {
$iSize += $aStats['size'];
}
}
}
return $iSize;

View File

@@ -6,7 +6,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-full-itil/3.0.2',
'itop-full-itil/3.0.3',
array(
// Identification
//

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-hub-connector/3.0.2',
'itop-hub-connector/3.0.3',
array(
// Identification
//

View File

@@ -195,7 +195,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Incident/Attribute:related_request_list' => 'Child requests~~',
'Class:Incident/Attribute:related_request_list+' => '~~',
'Class:Incident/Attribute:child_incidents_list' => 'Afledte Incidents',
'Class:Incident/Attribute:child_incidents_list+' => '',
'Class:Incident/Attribute:child_incidents_list+' => 'All the child incidents related to this incident~~',
'Class:Incident/Attribute:public_log' => 'Offentlig Log',
'Class:Incident/Attribute:public_log+' => '',
'Class:Incident/Attribute:user_satisfaction' => 'Bruger tilfredshed',

View File

@@ -197,7 +197,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Incident/Attribute:related_request_list' => 'Kind-Requests',
'Class:Incident/Attribute:related_request_list+' => '',
'Class:Incident/Attribute:child_incidents_list' => 'Abgeleitete Incidents',
'Class:Incident/Attribute:child_incidents_list+' => '',
'Class:Incident/Attribute:child_incidents_list+' => 'All the child incidents related to this incident~~',
'Class:Incident/Attribute:public_log' => 'Öffentliches Log',
'Class:Incident/Attribute:public_log+' => '',
'Class:Incident/Attribute:user_satisfaction' => 'Benutzerzufriedenheit',

View File

@@ -197,7 +197,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Incident/Attribute:related_request_list' => 'Requêtes filles',
'Class:Incident/Attribute:related_request_list+' => '',
'Class:Incident/Attribute:child_incidents_list' => 'Incidents fils',
'Class:Incident/Attribute:child_incidents_list+' => '',
'Class:Incident/Attribute:child_incidents_list+' => 'Tous les incidents fils lié à celui-ci',
'Class:Incident/Attribute:public_log' => 'Journal public',
'Class:Incident/Attribute:public_log+' => '',
'Class:Incident/Attribute:user_satisfaction' => 'Satisfaction client',

View File

@@ -194,7 +194,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Incident/Attribute:related_request_list' => 'Child requests~~',
'Class:Incident/Attribute:related_request_list+' => '~~',
'Class:Incident/Attribute:child_incidents_list' => '子インシデント',
'Class:Incident/Attribute:child_incidents_list+' => '',
'Class:Incident/Attribute:child_incidents_list+' => 'All the child incidents related to this incident~~',
'Class:Incident/Attribute:public_log' => 'パブリックログ',
'Class:Incident/Attribute:public_log+' => '',
'Class:Incident/Attribute:user_satisfaction' => 'ユーザ満足度',

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-incident-mgmt-itil/3.0.2',
'itop-incident-mgmt-itil/3.0.3',
array(
// Identification
//

Some files were not shown because too many files have changed in this diff Show More