From af8b21fd107a03907f761684e130edfac4b5dfab Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Sat, 1 Sep 2018 21:38:42 +0200 Subject: [PATCH] * [ADD] New preset option for session timeout based on client IP address and network. Related #912 * [MOD] Improved IP addresses handling * [MOD] Code refactoring * [FIX] Minor bugfixes --- app/locales/en_GB/LC_MESSAGES/messages.mo | Bin 101725 -> 102886 bytes app/locales/en_GB/LC_MESSAGES/messages.po | 1162 +++++++++-------- app/locales/en_US/LC_MESSAGES/messages.mo | Bin 102507 -> 102886 bytes app/locales/en_US/LC_MESSAGES/messages.po | 217 +-- app/modules/api/Init.php | 15 +- .../Helpers/Account/AccountHelper.php | 4 +- .../Helpers/Grid/ItemPresetGrid.php | 44 +- .../Controllers/Helpers/ItemPresetHelper.php | 16 + .../web/Controllers/ItemPresetController.php | 3 + app/modules/web/Forms/ItemsPresetForm.php | 21 + app/modules/web/Init.php | 82 +- .../views/grid/datagrid-grid.inc | 6 +- .../itemshow/item_preset-session_timeout.inc | 32 + lib/SP/Bootstrap.php | 2 +- lib/SP/Core/Context/ContextInterface.php | 1 - lib/SP/Core/Context/SessionContext.php | 2 + lib/SP/Core/ModuleBase.php | 11 +- .../DataModel/ItemPreset/SessionTimeout.php | 104 ++ lib/SP/DataModel/PublicLinkData.php | 2 +- lib/SP/DataModel/TrackData.php | 34 +- lib/SP/Http/Address.php | 127 ++ lib/SP/Http/Request.php | 2 +- .../Account/AccountToUserRepository.php | 6 +- .../Account/AccountHistoryService.php | 2 +- .../Services/Account/AccountSearchService.php | 2 +- lib/SP/Services/Account/AccountService.php | 2 +- lib/SP/Services/Auth/LoginService.php | 36 +- lib/SP/Services/Install/Installer.php | 2 +- .../ItemPreset/ItemPresetInterface.php | 1 + tests/SP/Http/AddressTest.php | 268 ++++ tests/SP/Modules/Api/ApiTest.php | 2 +- .../AccountToUserRepositoryTest.php | 94 +- tests/SP/Services/Track/TrackServiceTest.php | 2 + tests/res/config/config.xml | 8 +- 34 files changed, 1562 insertions(+), 750 deletions(-) create mode 100644 app/modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc create mode 100644 lib/SP/DataModel/ItemPreset/SessionTimeout.php create mode 100644 lib/SP/Http/Address.php create mode 100644 tests/SP/Http/AddressTest.php diff --git a/app/locales/en_GB/LC_MESSAGES/messages.mo b/app/locales/en_GB/LC_MESSAGES/messages.mo index 60bae8c647d5bd16908ccfacf4d1dbda866623d9..7d2497c8cd986c5b3842f73ed0ba3ec20d1077b8 100644 GIT binary patch delta 30783 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 F{{zG(xl#ZC delta 29679 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\n" "Language-Team: nuxsmin@syspass.org\n" "Language: en_GB\n" @@ -74,7 +74,7 @@ msgstr "Please contact to the administrator" # Not available #: ../../../../lib/SP/Core/Acl/Acl.php:282 -#: ../../../../lib/SP/Services/Auth/LoginService.php:582 +#: ../../../../lib/SP/Services/Auth/LoginService.php:586 msgid "N/D" msgstr "N/A" @@ -83,7 +83,7 @@ msgid "Acceso denegado" msgstr "Access denied" #: ../../../../lib/SP/Core/Acl/Acl.php:288 -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:106 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:103 #: ../../../modules/web/themes/material-blue/views/itemshow/auth_token.inc:30 #: ../../../modules/web/themes/material-blue/views/itemshow/auth_token.inc:32 msgid "Acción" @@ -94,17 +94,17 @@ msgstr "Action" #: ../../../../lib/SP/Providers/Auth/Ldap/LdapMsAds.php:165 #: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:114 #: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:126 -#: ../../../../lib/SP/Services/Auth/LoginService.php:211 -#: ../../../../lib/SP/Services/Auth/LoginService.php:229 -#: ../../../../lib/SP/Services/Auth/LoginService.php:368 -#: ../../../../lib/SP/Services/Auth/LoginService.php:435 -#: ../../../../lib/SP/Services/Auth/LoginService.php:543 -#: ../../../../lib/SP/Services/Auth/LoginService.php:586 +#: ../../../../lib/SP/Services/Auth/LoginService.php:215 +#: ../../../../lib/SP/Services/Auth/LoginService.php:233 +#: ../../../../lib/SP/Services/Auth/LoginService.php:372 +#: ../../../../lib/SP/Services/Auth/LoginService.php:439 +#: ../../../../lib/SP/Services/Auth/LoginService.php:547 +#: ../../../../lib/SP/Services/Auth/LoginService.php:590 #: ../../../../lib/SP/Services/Ldap/LdapImportService.php:230 #: ../../../modules/web/Controllers/Helpers/Account/AccountSearchHelper.php:235 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:102 -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:105 -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:109 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:102 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:106 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:107 #: ../../../modules/web/Controllers/LoginController.php:102 #: ../../../modules/web/Controllers/UserController.php:278 #: ../../../modules/web/Controllers/UserController.php:312 @@ -126,11 +126,11 @@ msgstr "Action" #: ../../../modules/web/themes/material-blue/views/config/mail.inc:111 #: ../../../modules/web/themes/material-blue/views/config/wiki.inc:230 #: ../../../modules/web/themes/material-blue/views/config/wiki.inc:244 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:17 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:19 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:22 #: ../../../modules/web/themes/material-blue/views/itemshow/auth_token.inc:16 #: ../../../modules/web/themes/material-blue/views/itemshow/auth_token.inc:18 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:18 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:20 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:23 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:60 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:62 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:11 @@ -169,7 +169,7 @@ msgstr "Invalid context" msgid "Contexto no inicializado" msgstr "Context not initialized" -#: ../../../../lib/SP/Core/Context/SessionContext.php:545 +#: ../../../../lib/SP/Core/Context/SessionContext.php:547 msgid "La sesión no puede ser inicializada" msgstr "Session cannot be initialized" @@ -190,17 +190,17 @@ msgstr "The key file does not exist" #: ../../../../lib/SP/Repositories/AuthToken/AuthTokenRepository.php:333 #: ../../../../lib/SP/Repositories/AuthToken/AuthTokenRepository.php:388 #: ../../../../lib/SP/Repositories/AuthToken/AuthTokenRepository.php:416 -#: ../../../../lib/SP/Services/Account/AccountService.php:237 -#: ../../../../lib/SP/Services/Account/AccountService.php:242 +#: ../../../../lib/SP/Services/Account/AccountService.php:226 +#: ../../../../lib/SP/Services/Account/AccountService.php:231 #: ../../../../lib/SP/Services/Api/ApiService.php:129 #: ../../../../lib/SP/Services/Api/ApiService.php:227 #: ../../../../lib/SP/Services/Api/ApiService.php:235 -#: ../../../../lib/SP/Services/Auth/LoginService.php:182 -#: ../../../../lib/SP/Services/Auth/LoginService.php:333 -#: ../../../../lib/SP/Services/Auth/LoginService.php:482 -#: ../../../../lib/SP/Services/Auth/LoginService.php:487 -#: ../../../../lib/SP/Services/Auth/LoginService.php:519 -#: ../../../../lib/SP/Services/Auth/LoginService.php:626 +#: ../../../../lib/SP/Services/Auth/LoginService.php:186 +#: ../../../../lib/SP/Services/Auth/LoginService.php:337 +#: ../../../../lib/SP/Services/Auth/LoginService.php:486 +#: ../../../../lib/SP/Services/Auth/LoginService.php:491 +#: ../../../../lib/SP/Services/Auth/LoginService.php:523 +#: ../../../../lib/SP/Services/Auth/LoginService.php:630 #: ../../../../lib/SP/Services/AuthToken/AuthTokenService.php:306 #: ../../../../lib/SP/Services/CustomField/CustomFieldService.php:203 #: ../../../../lib/SP/Services/Export/XmlVerifyService.php:108 @@ -227,7 +227,7 @@ msgstr "An object is needed" msgid "Observador no inicializado" msgstr "Observer not initialized" -#: ../../../../lib/SP/Core/UI/Theme.php:191 +#: ../../../../lib/SP/Core/UI/Theme.php:193 msgid "Clase no válida para iconos" msgstr "Invalid icons class" @@ -241,19 +241,23 @@ msgstr "ON" msgid "OFF" msgstr "OFF" -#: ../../../../lib/SP/DataModel/TrackData.php:155 -#: ../../../../lib/SP/DataModel/TrackData.php:157 -#: ../../../../lib/SP/Repositories/Track/TrackRequest.php:56 -#: ../../../../lib/SP/Repositories/Track/TrackRequest.php:58 -msgid "IP inválida" -msgstr "Invalid IP" - #: ../../../../lib/SP/Html/DataGrid/DataGridBase.php:306 #: ../../../../lib/SP/Mvc/View/Template.php:122 #, php-format msgid "No es posible obtener la plantilla \"%s\" : %s" msgstr "Unable to retrieve the \"%s\" template: %s" +#: ../../../../lib/SP/Http/Address.php:49 +#: ../../../../lib/SP/Http/Address.php:51 +#: ../../../../lib/SP/Http/Address.php:68 +#: ../../../../lib/SP/Http/Address.php:70 +#: ../../../../lib/SP/Http/Address.php:90 +#: ../../../../lib/SP/Http/Address.php:109 +#: ../../../../lib/SP/Repositories/Track/TrackRequest.php:56 +#: ../../../../lib/SP/Repositories/Track/TrackRequest.php:58 +msgid "IP inválida" +msgstr "Invalid IP" + #: ../../../../lib/SP/Http/Json.php:179 msgid "Error de codificación" msgstr "Encoding error" @@ -309,16 +313,16 @@ msgstr "New Plugin" #: ../../../../lib/SP/Plugin/PluginManager.php:246 #: ../../../modules/web/Controllers/Helpers/Account/AccountSearchHelper.php:221 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:100 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:102 -#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:103 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:102 -#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:103 -#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:104 -#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:103 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:114 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:105 -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:105 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:98 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:99 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:101 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:100 +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:102 +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:103 +#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:101 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:111 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:102 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:102 #: ../../../modules/web/Controllers/UserGroupController.php:254 #: ../../../modules/web/Controllers/UserGroupController.php:293 #: ../../../modules/web/themes/material-blue/views/account/account-editpass.inc:22 @@ -331,12 +335,12 @@ msgstr "New Plugin" #: ../../../modules/web/themes/material-blue/views/itemshow/category.inc:16 #: ../../../modules/web/themes/material-blue/views/itemshow/client.inc:19 #: ../../../modules/web/themes/material-blue/views/itemshow/custom_field.inc:19 -#: ../../../modules/web/themes/material-blue/views/itemshow/plugin.inc:13 #: ../../../modules/web/themes/material-blue/views/itemshow/tag.inc:16 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:29 #: ../../../modules/web/themes/material-blue/views/itemshow/user_group.inc:19 #: ../../../modules/web/themes/material-blue/views/itemshow/user_pass.inc:15 -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:512 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:528 +#: ../../../modules/web/themes/material-blue/views/plugin/plugin.inc:16 msgid "Nombre" msgstr "Name" @@ -398,8 +402,8 @@ msgstr "Error while searching the group RDN" #: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:115 #: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:127 #: ../../../../lib/SP/Services/Ldap/LdapImportService.php:137 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:103 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:117 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:107 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:114 #: ../../../modules/web/Controllers/UserGroupController.php:220 #: ../../../modules/web/themes/material-blue/views/_partials/fixed-header.inc:137 #: ../../../modules/web/themes/material-blue/views/_partials/footer.inc:15 @@ -407,9 +411,9 @@ msgstr "Error while searching the group RDN" #: ../../../modules/web/themes/material-blue/views/config/encryption.inc:272 #: ../../../modules/web/themes/material-blue/views/config/ldap.inc:186 #: ../../../modules/web/themes/material-blue/views/config/ldap.inc:213 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:34 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:36 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:39 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:35 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:37 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:40 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:139 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:141 msgid "Grupo" @@ -463,7 +467,7 @@ msgstr "Request" #: ../../../../lib/SP/Services/CustomField/CustomFieldDefService.php:74 #: ../../../modules/web/Controllers/ConfigBackupController.php:120 #: ../../../modules/web/Controllers/ConfigManagerController.php:171 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:88 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:86 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:20 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:389 #: ../../../config/actions.xml:13 @@ -476,23 +480,6 @@ msgstr "Accounts" msgid "Notificación" msgstr "Notification" -#: ../../../../lib/SP/Repositories/Account/AccountDefaultPermissionRepository.php:74 -msgid "Error al crear permiso" -msgstr "Error while creating the permission" - -#: ../../../../lib/SP/Repositories/Account/AccountDefaultPermissionRepository.php:111 -msgid "Error al actualizar permiso" -msgstr "Error while updating the permission" - -#: ../../../../lib/SP/Repositories/Account/AccountDefaultPermissionRepository.php:130 -msgid "Error al eliminar permiso" -msgstr "Error while removing the permission" - -#: ../../../../lib/SP/Repositories/Account/AccountDefaultPermissionRepository.php:244 -#: ../../../../lib/SP/Services/Account/AccountDefaultPermissionService.php:187 -msgid "Error al eliminar los permisos" -msgstr "Error while removing the permissions" - #: ../../../../lib/SP/Repositories/Account/AccountFileRepository.php:77 msgid "No se pudo guardar el archivo" msgstr "Error while saving file" @@ -517,7 +504,7 @@ msgstr "Error while deleting the account" #: ../../../../lib/SP/Repositories/Account/AccountHistoryRepository.php:292 #: ../../../../lib/SP/Repositories/Account/AccountRepository.php:455 -#: ../../../../lib/SP/Services/Account/AccountService.php:538 +#: ../../../../lib/SP/Services/Account/AccountService.php:583 msgid "Error al eliminar las cuentas" msgstr "Error while deleting the accounts" @@ -533,7 +520,7 @@ msgid "Error al crear la cuenta" msgstr "Error while creating the account" #: ../../../../lib/SP/Repositories/Account/AccountRepository.php:303 -#: ../../../../lib/SP/Services/Account/AccountService.php:504 +#: ../../../../lib/SP/Services/Account/AccountService.php:549 msgid "Error al restaurar cuenta" msgstr "Error on restoring the account" @@ -678,6 +665,22 @@ msgstr "Error while deleting the field type" msgid "Error al vaciar el registro de eventos" msgstr "Error while clearing the event log" +#: ../../../../lib/SP/Repositories/ItemPreset/ItemPresetRepository.php:76 +msgid "Error al crear permiso" +msgstr "Error while creating the permission" + +#: ../../../../lib/SP/Repositories/ItemPreset/ItemPresetRepository.php:115 +msgid "Error al actualizar permiso" +msgstr "Error while updating the permission" + +#: ../../../../lib/SP/Repositories/ItemPreset/ItemPresetRepository.php:134 +msgid "Error al eliminar permiso" +msgstr "Error while removing the permission" + +#: ../../../../lib/SP/Repositories/ItemPreset/ItemPresetRepository.php:249 +msgid "Error al eliminar los permisos" +msgstr "Error while removing the permissions" + #: ../../../../lib/SP/Repositories/Notification/NotificationRepository.php:78 msgid "Error al crear la notificación" msgstr "Error while adding the notification" @@ -946,11 +949,6 @@ msgstr "Update Master Password (H)" msgid "Errores al actualizar las claves de las cuentas del histórico" msgstr "Error while updating the accounts' passwords in history" -#: ../../../../lib/SP/Services/Account/AccountDefaultPermissionService.php:84 -#: ../../../../lib/SP/Services/Account/AccountDefaultPermissionService.php:105 -msgid "Permiso no encontrada" -msgstr "Permission not found" - #: ../../../../lib/SP/Services/Account/AccountFileService.php:145 msgid "Error al eliminar archivos" msgstr "Error while deleting the files" @@ -959,21 +957,21 @@ msgstr "Error while deleting the files" msgid "Archivo no encontrado" msgstr "File not found" -#: ../../../../lib/SP/Services/Account/AccountService.php:92 -#: ../../../../lib/SP/Services/Account/AccountService.php:594 -#: ../../../../lib/SP/Services/Account/AccountService.php:649 -msgid "La cuenta no existe" -msgstr "The account doesn't exist" - -#: ../../../../lib/SP/Services/Account/AccountService.php:179 -#: ../../../../lib/SP/Services/Account/AccountService.php:521 +#: ../../../../lib/SP/Services/Account/AccountService.php:164 +#: ../../../../lib/SP/Services/Account/AccountService.php:566 msgid "Cuenta no encontrada" msgstr "Account not found" -#: ../../../../lib/SP/Services/Account/AccountService.php:230 +#: ../../../../lib/SP/Services/Account/AccountService.php:219 msgid "Clave maestra no establecida" msgstr "Master password not set" +#: ../../../../lib/SP/Services/Account/AccountService.php:282 +#: ../../../../lib/SP/Services/Account/AccountService.php:639 +#: ../../../../lib/SP/Services/Account/AccountService.php:694 +msgid "La cuenta no existe" +msgstr "The account doesn't exist" + #: ../../../../lib/SP/Services/Api/ApiRequest.php:79 #: ../../../../lib/SP/Services/Api/ApiRequest.php:113 #: ../../../../lib/SP/Services/Api/ApiService.php:229 @@ -985,7 +983,7 @@ msgid "Fomato incorrecto" msgstr "Invalid format" #: ../../../../lib/SP/Services/Api/ApiService.php:96 -#: ../../../../lib/SP/Services/Auth/LoginService.php:132 +#: ../../../../lib/SP/Services/Auth/LoginService.php:136 #: ../../../../lib/SP/Services/UserPassRecover/UserPassRecoverService.php:103 #: ../../../modules/web/Controllers/UserPassResetController.php:124 msgid "Intentos excedidos" @@ -1000,34 +998,34 @@ msgstr "Wrong parameters" msgid "Acceso no permitido" msgstr "Unauthorized access" -#: ../../../../lib/SP/Services/Auth/LoginService.php:152 -#: ../../../../lib/SP/Services/Auth/LoginService.php:438 -#: ../../../../lib/SP/Services/Auth/LoginService.php:445 -#: ../../../../lib/SP/Services/Auth/LoginService.php:553 -#: ../../../../lib/SP/Services/Auth/LoginService.php:558 -#: ../../../../lib/SP/Services/Auth/LoginService.php:597 -#: ../../../../lib/SP/Services/Auth/LoginService.php:602 +#: ../../../../lib/SP/Services/Auth/LoginService.php:156 +#: ../../../../lib/SP/Services/Auth/LoginService.php:442 +#: ../../../../lib/SP/Services/Auth/LoginService.php:449 +#: ../../../../lib/SP/Services/Auth/LoginService.php:557 +#: ../../../../lib/SP/Services/Auth/LoginService.php:562 +#: ../../../../lib/SP/Services/Auth/LoginService.php:601 +#: ../../../../lib/SP/Services/Auth/LoginService.php:606 msgid "Login incorrecto" msgstr "Wrong login" -#: ../../../../lib/SP/Services/Auth/LoginService.php:210 -#: ../../../../lib/SP/Services/Auth/LoginService.php:217 +#: ../../../../lib/SP/Services/Auth/LoginService.php:214 +#: ../../../../lib/SP/Services/Auth/LoginService.php:221 msgid "Usuario deshabilitado" msgstr "User disabled" -#: ../../../../lib/SP/Services/Auth/LoginService.php:262 +#: ../../../../lib/SP/Services/Auth/LoginService.php:266 msgid "Usando clave temporal" msgstr "Using temporary password" -#: ../../../../lib/SP/Services/Auth/LoginService.php:270 -#: ../../../../lib/SP/Services/Auth/LoginService.php:276 -#: ../../../../lib/SP/Services/Auth/LoginService.php:289 -#: ../../../../lib/SP/Services/Auth/LoginService.php:295 +#: ../../../../lib/SP/Services/Auth/LoginService.php:274 +#: ../../../../lib/SP/Services/Auth/LoginService.php:280 +#: ../../../../lib/SP/Services/Auth/LoginService.php:293 +#: ../../../../lib/SP/Services/Auth/LoginService.php:299 msgid "Clave maestra incorrecta" msgstr "Wrong master password" -#: ../../../../lib/SP/Services/Auth/LoginService.php:284 -#: ../../../../lib/SP/Services/Auth/LoginService.php:303 +#: ../../../../lib/SP/Services/Auth/LoginService.php:288 +#: ../../../../lib/SP/Services/Auth/LoginService.php:307 #: ../../../../lib/SP/Services/User/UpdatedMasterPassException.php:45 #: ../../../../lib/SP/Util/ErrorUtil.php:144 #: ../../../modules/web/Controllers/ConfigEncryptionController.php:68 @@ -1036,22 +1034,25 @@ msgstr "Wrong master password" msgid "Clave maestra actualizada" msgstr "Master password updated" -#: ../../../../lib/SP/Services/Auth/LoginService.php:309 +#: ../../../../lib/SP/Services/Auth/LoginService.php:313 msgid "Es necesaria su clave anterior" msgstr "Your previous password is needed" -#: ../../../../lib/SP/Services/Auth/LoginService.php:321 +#: ../../../../lib/SP/Services/Auth/LoginService.php:325 msgid "La clave maestra no ha sido guardada o es incorrecta" msgstr "The Master Password either is not saved or is wrong" -#: ../../../../lib/SP/Services/Auth/LoginService.php:433 -#: ../../../../lib/SP/Services/Auth/LoginService.php:496 -#: ../../../../lib/SP/Services/Auth/LoginService.php:542 -#: ../../../../lib/SP/Services/Auth/LoginService.php:585 +#: ../../../../lib/SP/Services/Auth/LoginService.php:437 +#: ../../../../lib/SP/Services/Auth/LoginService.php:500 +#: ../../../../lib/SP/Services/Auth/LoginService.php:546 +#: ../../../../lib/SP/Services/Auth/LoginService.php:589 #: ../../../modules/web/Controllers/AccountFileController.php:233 -#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:105 -#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:105 -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:119 +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:104 +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:104 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:105 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:117 +#: ../../../modules/web/Controllers/ItemPresetController.php:302 +#: ../../../modules/web/Controllers/ItemPresetController.php:341 #: ../../../modules/web/themes/material-blue/views/itemshow/custom_field.inc:31 #: ../../../modules/web/themes/material-blue/views/itemshow/custom_field.inc:33 #: ../../../modules/web/themes/material-blue/views/notification/notification.inc:16 @@ -1059,22 +1060,22 @@ msgstr "The Master Password either is not saved or is wrong" msgid "Tipo" msgstr "Type" -#: ../../../../lib/SP/Services/Auth/LoginService.php:434 -#: ../../../../lib/SP/Services/Auth/LoginService.php:497 +#: ../../../../lib/SP/Services/Auth/LoginService.php:438 +#: ../../../../lib/SP/Services/Auth/LoginService.php:501 msgid "Servidor LDAP" msgstr "LDAP Server" -#: ../../../../lib/SP/Services/Auth/LoginService.php:453 -#: ../../../../lib/SP/Services/Auth/LoginService.php:458 +#: ../../../../lib/SP/Services/Auth/LoginService.php:457 +#: ../../../../lib/SP/Services/Auth/LoginService.php:462 msgid "Cuenta expirada" msgstr "Account expired" -#: ../../../../lib/SP/Services/Auth/LoginService.php:466 -#: ../../../../lib/SP/Services/Auth/LoginService.php:471 +#: ../../../../lib/SP/Services/Auth/LoginService.php:470 +#: ../../../../lib/SP/Services/Auth/LoginService.php:475 msgid "El usuario no tiene grupos asociados" msgstr "The user has no associated groups" -#: ../../../../lib/SP/Services/Auth/LoginService.php:587 +#: ../../../../lib/SP/Services/Auth/LoginService.php:591 #: ../../../modules/web/themes/material-blue/views/config/general-auth.inc:10 msgid "Autentificación" msgstr "Authentication" @@ -1235,22 +1236,22 @@ msgstr "Error while updating the custom fields data" #: ../../../../lib/SP/Services/CustomField/CustomFieldDefService.php:75 #: ../../../modules/web/Controllers/ConfigBackupController.php:122 -#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:91 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:89 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:293 msgid "Categorías" msgstr "Categories" #: ../../../../lib/SP/Services/CustomField/CustomFieldDefService.php:76 #: ../../../modules/web/Controllers/ConfigBackupController.php:121 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:90 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:88 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:325 msgid "Clientes" msgstr "Clients" #: ../../../../lib/SP/Services/CustomField/CustomFieldDefService.php:77 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:102 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:13 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:118 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:99 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:14 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-permission.inc:4 #: ../../../modules/web/themes/material-blue/views/itemshow/user_group.inc:45 #: ../../../modules/web/themes/material-blue/views/itemshow/user_group.inc:47 #: ../../../modules/web/themes/material-blue/views/itemshow/user_group.inc:50 @@ -1259,9 +1260,9 @@ msgid "Usuarios" msgstr "Users" #: ../../../../lib/SP/Services/CustomField/CustomFieldDefService.php:78 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:93 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:51 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:157 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:90 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:52 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-permission.inc:43 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:261 msgid "Grupos" msgstr "Groups" @@ -1375,10 +1376,10 @@ msgstr "Account imported" #: ../../../modules/web/Controllers/ClientController.php:245 #: ../../../modules/web/Controllers/ClientController.php:281 #: ../../../modules/web/Controllers/Helpers/Account/AccountSearchHelper.php:214 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:101 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:103 -#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:103 -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:106 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:99 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:100 +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:102 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:104 #: ../../../modules/web/themes/material-blue/views/account/account-editpass.inc:33 #: ../../../modules/web/themes/material-blue/views/account/account-editpass.inc:39 #: ../../../modules/web/themes/material-blue/views/account/account-history.inc:47 @@ -1473,8 +1474,8 @@ msgstr "Category imported" #: ../../../modules/web/Controllers/CategoryController.php:249 #: ../../../modules/web/Controllers/CategoryController.php:289 #: ../../../modules/web/Controllers/Helpers/Account/AccountSearchHelper.php:228 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:102 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:104 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:100 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:101 #: ../../../modules/web/themes/material-blue/views/account/account-history.inc:62 #: ../../../modules/web/themes/material-blue/views/account/account-history.inc:64 #: ../../../modules/web/themes/material-blue/views/account/account-link.inc:38 @@ -1707,6 +1708,15 @@ msgstr "Error while checking the database" msgid "Intente de nuevo la instalación" msgstr "Please, try the installation again" +#: ../../../../lib/SP/Services/ItemPreset/ItemPresetService.php:84 +#: ../../../../lib/SP/Services/ItemPreset/ItemPresetService.php:105 +msgid "Valor no encontrada" +msgstr "Value not found" + +#: ../../../../lib/SP/Services/ItemPreset/ItemPresetService.php:188 +msgid "Error al eliminar los valores" +msgstr "Error while deleting the values" + #: ../../../../lib/SP/Services/Ldap/LdapImportService.php:106 #: ../../../../lib/SP/Services/Ldap/LdapImportService.php:188 msgid "Objetos encontrados" @@ -1836,8 +1846,8 @@ msgid "Error al aplicar la actualización de la aplicación" msgstr "Error while applying the application update" #: ../../../../lib/SP/Services/Upgrade/UpgradeAppService.php:71 -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:89 -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:97 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:90 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:98 msgid "Compruebe el registro de eventos para más detalles" msgstr "Please, check the event log for more details" @@ -1873,10 +1883,10 @@ msgstr "Parameter" #: ../../../../lib/SP/Services/Upgrade/UpgradeConfigService.php:113 #: ../../../../lib/SP/Services/Upgrade/UpgradeConfigService.php:229 -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:164 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:165 #: ../../../modules/web/Controllers/ConfigBackupController.php:118 #: ../../../modules/web/themes/material-blue/views/config/info.inc:40 -#: ../../../modules/web/themes/material-blue/views/itemshow/plugin.inc:25 +#: ../../../modules/web/themes/material-blue/views/plugin/plugin.inc:28 msgid "Versión" msgstr "Version" @@ -1919,27 +1929,27 @@ msgstr "Field updated" msgid "Campo" msgstr "Field" -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:80 -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:123 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:81 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:124 msgid "Actualizar BBDD" msgstr "Update DB" -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:87 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:88 msgid "Error al aplicar la actualización auxiliar" msgstr "Error while applying an auxiliary update" -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:95 -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:177 -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:181 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:96 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:178 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:182 msgid "Error al aplicar la actualización de la Base de Datos" msgstr "Error while updating the database" -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:155 -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:157 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:156 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:158 msgid "El archivo de actualización no contiene datos" msgstr "The update file does not contain data" -#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:187 +#: ../../../../lib/SP/Services/Upgrade/UpgradeDatabaseService.php:188 msgid "Actualización de la Base de Datos realizada correctamente." msgstr "Database updating was completed successfully." @@ -2119,13 +2129,6 @@ msgid "Opción no disponible" msgstr "Option unavailable" #: ../../../../lib/SP/Util/ErrorUtil.php:140 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:68 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:142 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:177 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:208 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:238 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:277 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:313 #: ../../../modules/web/Controllers/AccountFileController.php:259 #: ../../../modules/web/Controllers/AccountHistoryManagerController.php:59 #: ../../../modules/web/Controllers/AccountManagerController.php:57 @@ -2158,6 +2161,13 @@ msgstr "Option unavailable" #: ../../../modules/web/Controllers/CustomFieldController.php:258 #: ../../../modules/web/Controllers/CustomFieldController.php:295 #: ../../../modules/web/Controllers/EventlogController.php:94 +#: ../../../modules/web/Controllers/ItemPresetController.php:67 +#: ../../../modules/web/Controllers/ItemPresetController.php:145 +#: ../../../modules/web/Controllers/ItemPresetController.php:180 +#: ../../../modules/web/Controllers/ItemPresetController.php:218 +#: ../../../modules/web/Controllers/ItemPresetController.php:248 +#: ../../../modules/web/Controllers/ItemPresetController.php:287 +#: ../../../modules/web/Controllers/ItemPresetController.php:326 #: ../../../modules/web/Controllers/NotificationController.php:100 #: ../../../modules/web/Controllers/NotificationController.php:160 #: ../../../modules/web/Controllers/NotificationController.php:175 @@ -2166,7 +2176,7 @@ msgstr "Option unavailable" #: ../../../modules/web/Controllers/NotificationController.php:288 #: ../../../modules/web/Controllers/NotificationController.php:315 #: ../../../modules/web/Controllers/NotificationController.php:348 -#: ../../../modules/web/Controllers/PluginController.php:97 +#: ../../../modules/web/Controllers/PluginController.php:98 #: ../../../modules/web/Controllers/PluginController.php:117 #: ../../../modules/web/Controllers/PublicLinkController.php:68 #: ../../../modules/web/Controllers/PublicLinkController.php:100 @@ -2255,8 +2265,8 @@ msgstr "Account displayed" #: ../../../modules/web/Controllers/AccountHistoryManagerController.php:111 #: ../../../modules/web/Controllers/AccountHistoryManagerController.php:146 #: ../../../modules/web/Controllers/AccountManagerController.php:114 -#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:102 -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:105 +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:101 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:103 #: ../../../modules/web/themes/material-blue/views/account/account-history.inc:15 #: ../../../modules/web/themes/material-blue/views/account/account.inc:24 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:16 @@ -2278,10 +2288,10 @@ msgstr "Account" #: ../../../modules/api/Controllers/ClientController.php:126 #: ../../../modules/api/Controllers/ClientController.php:155 #: ../../../modules/api/Controllers/TagController.php:118 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:260 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:290 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:326 #: ../../../modules/web/Controllers/Helpers/Grid/EventlogGrid.php:100 +#: ../../../modules/web/Controllers/ItemPresetController.php:270 +#: ../../../modules/web/Controllers/ItemPresetController.php:303 +#: ../../../modules/web/Controllers/ItemPresetController.php:342 #: ../../../modules/web/themes/material-blue/views/account/details.inc:138 #: ../../../modules/web/themes/material-blue/views/account/details.inc:140 msgid "ID" @@ -2510,14 +2520,16 @@ msgstr "Notes about the account" #: ../../../modules/api/Controllers/Help/AccountHelp.php:89 #: ../../../modules/api/Controllers/Help/AccountHelp.php:111 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:126 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:130 #: ../../../modules/web/themes/material-blue/views/account/search-rows.inc:106 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-private.inc:19 msgid "Cuenta Privada" msgstr "Private Account" #: ../../../modules/api/Controllers/Help/AccountHelp.php:90 #: ../../../modules/api/Controllers/Help/AccountHelp.php:112 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:139 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:146 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-private.inc:38 msgid "Cuenta Privada Grupo" msgstr "Private Account for Group" @@ -2586,8 +2598,8 @@ msgid "Descripción del cliente" msgstr "Client description" #: ../../../modules/api/Controllers/Help/ClientHelp.php:56 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:104 -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:144 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:102 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:142 #: ../../../modules/web/themes/material-blue/views/itemshow/client.inc:62 #: ../../../modules/web/themes/material-blue/views/notification/notification.inc:92 msgid "Global" @@ -2632,7 +2644,7 @@ msgstr "Tag updated" msgid "Etiqueta eliminada" msgstr "Tag removed" -#: ../../../modules/api/Init.php:139 +#: ../../../modules/api/Init.php:132 msgid "Es necesario actualizar" msgstr "Updating needed" @@ -2661,7 +2673,7 @@ msgstr "HTTPS" #. (itstool) path: action/text #: ../../../modules/web/Controllers/AccountController.php:253 #: ../../../modules/web/Controllers/AccountController.php:297 -#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:275 +#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:276 #: ../../../config/actions.xml:151 msgid "Nueva Cuenta" msgstr "New Account" @@ -2679,10 +2691,10 @@ msgstr "Edit Account" #: ../../../modules/web/Controllers/AccountController.php:386 #: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:312 #: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:313 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:147 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:148 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:175 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:176 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:145 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:146 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:172 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:173 #: ../../../config/actions.xml:163 ../../../config/actions.xml:481 #: ../../../config/actions.xml:781 msgid "Eliminar Cuenta" @@ -2725,11 +2737,11 @@ msgid "Solicitante" msgstr "Requester" #: ../../../modules/web/Controllers/AccountController.php:901 -#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:104 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:103 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:102 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:101 #: ../../../modules/web/Controllers/Helpers/Grid/EventlogGrid.php:106 -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:121 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:106 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:119 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:103 #: ../../../modules/web/themes/material-blue/views/itemshow/category.inc:28 #: ../../../modules/web/themes/material-blue/views/itemshow/client.inc:32 #: ../../../modules/web/themes/material-blue/views/itemshow/user_group.inc:32 @@ -2742,48 +2754,6 @@ msgstr "Description" msgid "Solicitud realizada" msgstr "Request done" -#. (itstool) path: action/text -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:71 -#: ../../../config/actions.xml:847 -msgid "Ver Permiso" -msgstr "View Permission" - -#. (itstool) path: action/text -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:181 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:156 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:157 -#: ../../../config/actions.xml:853 -msgid "Nuevo Permiso" -msgstr "New Permission" - -#. (itstool) path: action/text -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:211 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:174 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:175 -#: ../../../config/actions.xml:859 -msgid "Editar Permiso" -msgstr "Edit Permission" - -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:248 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:251 -msgid "Permisos eliminados" -msgstr "Permissions deleted" - -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:259 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:263 -msgid "Permiso eliminado" -msgstr "Permission deleted" - -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:289 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:293 -msgid "Permiso creado" -msgstr "Permission added" - -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:325 -#: ../../../modules/web/Controllers/AccountDefaultPermissionController.php:329 -msgid "Permiso actualizado" -msgstr "Permission updated" - #: ../../../modules/web/Controllers/AccountFavoriteController.php:55 msgid "Favorito añadido" msgstr "Favorite added" @@ -2853,7 +2823,7 @@ msgid "Archivo guardado" msgstr "File saved" #: ../../../modules/web/Controllers/AccountFileController.php:234 -#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:106 +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:105 msgid "Tamaño" msgstr "Size" @@ -2879,14 +2849,14 @@ msgid "No hay archivos asociados a la cuenta" msgstr "There are no linked files for the account" #: ../../../modules/web/Controllers/AuthTokenController.php:101 -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:153 -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:154 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:150 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:151 msgid "Nueva Autorización" msgstr "New Authorization" #: ../../../modules/web/Controllers/AuthTokenController.php:165 -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:188 -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:189 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:185 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:186 msgid "Editar Autorización" msgstr "Edit Authorization" @@ -2914,8 +2884,8 @@ msgstr "Authorization viewed" #. (itstool) path: action/text #: ../../../modules/web/Controllers/CategoryController.php:99 -#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:149 -#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:150 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:147 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:148 #: ../../../modules/web/themes/material-blue/views/account/account.inc:110 #: ../../../config/actions.xml:301 msgid "Nueva Categoría" @@ -2923,8 +2893,8 @@ msgstr "New Category" #. (itstool) path: action/text #: ../../../modules/web/Controllers/CategoryController.php:162 -#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:167 -#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:168 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:165 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:166 #: ../../../config/actions.xml:307 msgid "Editar Categoría" msgstr "Edit Category" @@ -2942,8 +2912,8 @@ msgstr "View Category" #. (itstool) path: action/text #: ../../../modules/web/Controllers/ClientController.php:100 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:152 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:153 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:150 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:151 #: ../../../modules/web/themes/material-blue/views/account/account.inc:86 #: ../../../config/actions.xml:331 msgid "Nuevo Cliente" @@ -2951,8 +2921,8 @@ msgstr "New Client" #. (itstool) path: action/text #: ../../../modules/web/Controllers/ClientController.php:163 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:170 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:171 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:168 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:169 #: ../../../config/actions.xml:337 msgid "Editar Cliente" msgstr "Edit Client" @@ -3012,7 +2982,7 @@ msgid "Verificación de datos exportados finalizada" msgstr "Verification of exported data finished" #: ../../../modules/web/Controllers/ConfigBackupController.php:119 -#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:124 +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:123 #: ../../../modules/web/themes/material-blue/views/common/aux-customfields.inc:13 #: ../../../modules/web/themes/material-blue/views/itemshow/custom_field.inc:86 msgid "Encriptado" @@ -3029,7 +2999,7 @@ msgid "No" msgstr "No" #: ../../../modules/web/Controllers/ConfigBackupController.php:123 -#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:91 +#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:89 #: ../../../modules/web/themes/material-blue/views/account/account.inc:203 #: ../../../modules/web/themes/material-blue/views/account/account.inc:205 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:309 @@ -3205,7 +3175,7 @@ msgstr "Please, check your inbox" #: ../../../modules/web/Controllers/ConfigManagerController.php:157 #: ../../../modules/web/themes/material-blue/views/install/index.inc:131 -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:425 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:441 msgid "General" msgstr "General" @@ -3226,7 +3196,7 @@ msgid "Correo" msgstr "Mail" #: ../../../modules/web/Controllers/ConfigManagerController.php:268 -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:441 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:457 msgid "Encriptación" msgstr "Encryption" @@ -3263,7 +3233,7 @@ msgid "No instalado" msgstr "Not installed" #: ../../../modules/web/Controllers/ConfigManagerController.php:361 -#: ../../../modules/web/themes/material-blue/inc/Icons.php:65 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:63 msgid "Información" msgstr "Information" @@ -3292,14 +3262,14 @@ msgid "DokuWiki deshabilitada" msgstr "DokuWiki disabled" #: ../../../modules/web/Controllers/CustomFieldController.php:101 +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:154 #: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:155 -#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:156 msgid "Nuevo Campo" msgstr "New Field" #: ../../../modules/web/Controllers/CustomFieldController.php:162 +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:172 #: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:173 -#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:174 msgid "Editar Campo" msgstr "Edit Field" @@ -3373,7 +3343,7 @@ msgstr "Restore account from this point" #: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:237 #: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:238 -#: ../../../modules/web/themes/material-blue/inc/Icons.php:53 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:51 #: ../../../modules/web/themes/material-blue/views/account/account-editpass.inc:121 msgid "Guardar" msgstr "Save" @@ -3397,7 +3367,7 @@ msgstr "Create Public Link" #: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:374 #: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:418 #: ../../../modules/web/Controllers/Helpers/Account/AccountActionsHelper.php:419 -#: ../../../modules/web/themes/material-blue/inc/Icons.php:36 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:34 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:64 #: ../../../config/actions.xml:169 ../../../config/actions.xml:259 msgid "Ver Clave" @@ -3458,69 +3428,37 @@ msgstr "URL / IP" msgid "Ordenar por URL / IP" msgstr "Sort by URL / IP" -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:90 -msgid "Permisos por Defecto" -msgstr "Default Permissions" - -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:104 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:116 -#: ../../../modules/web/Controllers/UserProfileController.php:216 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:51 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:53 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:56 -#: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:122 -#: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:124 -msgid "Perfil" -msgstr "Profile" - -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:105 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:69 -msgid "Prioridad" -msgstr "Priority" - -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:106 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:105 -msgid "Forzado" -msgstr "Forced" - -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:124 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:120 -#: ../../../config/strings.js.inc:66 -msgid "SI" -msgstr "YES" - -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:124 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:120 -#: ../../../config/strings.js.inc:67 -msgid "NO" -msgstr "NO" +#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:67 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:68 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:71 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:70 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:69 +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:70 +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:69 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:73 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:74 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:83 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:71 +#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:70 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:80 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:71 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:71 +msgid "Eliminar Seleccionados" +msgstr "Delete Selected" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:141 -#: ../../../config/actions.xml:841 -msgid "Buscar Permiso" -msgstr "Search for Permission" - -#. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:191 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountDefaultPermissionGrid.php:192 -#: ../../../config/actions.xml:865 -msgid "Eliminar Permiso" -msgstr "Delete Permission" - -#. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:132 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:143 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountGrid.php:130 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:140 #: ../../../config/actions.xml:487 ../../../config/actions.xml:787 msgid "Buscar Cuenta" msgstr "Search for Account" -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:90 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:87 msgid "Cuentas (H)" msgstr "Accounts (H)" -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:105 -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:118 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:102 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:116 #: ../../../modules/web/themes/material-blue/views/account/account-editpass.inc:98 #: ../../../modules/web/themes/material-blue/views/account/account-history.inc:112 #: ../../../modules/web/themes/material-blue/views/account/account.inc:182 @@ -3530,101 +3468,111 @@ msgstr "Accounts (H)" msgid "Fecha" msgstr "Date" -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:106 -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:122 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:103 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:120 #: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:102 msgid "Estado" msgstr "Status" -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:127 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:124 msgid "Modificada" msgstr "Modified" -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:128 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:125 msgid "Eliminada" msgstr "Removed" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:158 -#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:159 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:155 +#: ../../../modules/web/Controllers/Helpers/Grid/AccountHistoryGrid.php:156 #: ../../../config/actions.xml:181 ../../../config/actions.xml:793 msgid "Restaurar Cuenta" msgstr "Account Restore" -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:93 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:90 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:357 msgid "Autorizaciones API" msgstr "API Authorizations" -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:138 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:135 msgid "Buscar Token" msgstr "Search for Token" -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:171 -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:172 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:168 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:169 msgid "Ver token de Autorización" msgstr "View Authorization token" -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:205 -#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:206 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:202 +#: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:203 msgid "Eliminar Autorización" msgstr "Delete Authorization" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:134 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:132 #: ../../../config/actions.xml:319 msgid "Buscar Categoría" msgstr "Search for Category" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:184 -#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:185 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:182 +#: ../../../modules/web/Controllers/Helpers/Grid/CategoryGrid.php:183 #: ../../../config/actions.xml:313 msgid "Eliminar Categoría" msgstr "Delete Category" +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:118 +#: ../../../config/strings.js.inc:66 +msgid "SI" +msgstr "YES" + +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:118 +#: ../../../config/strings.js.inc:67 +msgid "NO" +msgstr "NO" + #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:137 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:135 #: ../../../config/actions.xml:349 msgid "Buscar Cliente" msgstr "Search for Client" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:187 -#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:188 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:185 +#: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:186 #: ../../../config/actions.xml:343 msgid "Eliminar Cliente" msgstr "Delete Client" -#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:91 +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:90 #: ../../../modules/web/themes/material-blue/views/account/account.inc:27 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:341 msgid "Campos Personalizados" msgstr "Custom Fields" -#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:104 +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:103 #: ../../../modules/web/themes/material-blue/views/itemshow/custom_field.inc:45 #: ../../../modules/web/themes/material-blue/views/itemshow/custom_field.inc:47 msgid "Módulo" msgstr "Module" -#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:106 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:118 +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:105 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:115 msgid "Propiedades" msgstr "Properties" -#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:140 +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:139 msgid "Buscar Campo" msgstr "Search for Field" +#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:189 #: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:190 -#: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:191 msgid "Eliminar Campo" msgstr "Delete Field" #. (itstool) path: action/text #: ../../../modules/web/Controllers/Helpers/Grid/EventlogGrid.php:88 -#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:331 +#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:318 #: ../../../modules/web/themes/material-blue/views/eventlog/index.inc:1 #: ../../../config/actions.xml:127 msgid "Registro de Eventos" @@ -3643,7 +3591,7 @@ msgid "Evento" msgstr "Event" #: ../../../modules/web/Controllers/Helpers/Grid/EventlogGrid.php:104 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:115 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:112 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:44 #: ../../../modules/web/themes/material-blue/views/itemshow/user_pass.inc:26 msgid "Login" @@ -3668,7 +3616,7 @@ msgid "Vaciar registro de eventos" msgstr "Clear event log" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:90 +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:89 #: ../../../modules/web/themes/material-blue/views/account/account.inc:35 #: ../../../modules/web/themes/material-blue/views/config/accounts.inc:277 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:145 @@ -3678,103 +3626,175 @@ msgid "Archivos" msgstr "Files" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:141 +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:140 #: ../../../config/actions.xml:469 msgid "Buscar Archivo" msgstr "Search for File" #. (itstool) path: action/text +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:155 #: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:156 -#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:157 #: ../../../modules/web/themes/material-blue/views/account/files-list.inc:45 #: ../../../config/actions.xml:199 ../../../config/actions.xml:445 msgid "Ver Archivo" msgstr "View File" #. (itstool) path: action/text +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:172 #: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:173 -#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:174 #: ../../../modules/web/themes/material-blue/views/account/files-list.inc:38 #: ../../../config/actions.xml:211 ../../../config/actions.xml:451 msgid "Descargar Archivo" msgstr "Download File" #. (itstool) path: action/text +#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:189 #: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:190 -#: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:191 #: ../../../modules/web/themes/material-blue/views/account/files-list.inc:30 #: ../../../config/actions.xml:217 ../../../config/actions.xml:457 msgid "Eliminar Archivo" msgstr "Delete File" +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:93 +msgid "Valores Predeterminados" +msgstr "Preset Values" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:108 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:113 +#: ../../../modules/web/Controllers/UserProfileController.php:216 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:52 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:54 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:57 +#: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:122 +#: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:124 +msgid "Perfil" +msgstr "Profile" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:109 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:70 +msgid "Prioridad" +msgstr "Priority" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:110 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:106 +msgid "Forzado" +msgstr "Forced" + #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:105 -#: ../../../modules/web/themes/material-blue/inc/Icons.php:67 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:144 +#: ../../../config/actions.xml:841 +msgid "Buscar Valor" +msgstr "Search for Value" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:159 +msgid "Valor de Permiso" +msgstr "Permission Preset" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:160 +msgid "Nuevo Valor de Permiso" +msgstr "New Permission Preset" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:183 +msgid "Valor de Cuenta Privada" +msgstr "Private Account Preset" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:184 +msgid "Nuevo Valor de Cuenta Privada" +msgstr "New Private Account Preset" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:207 +msgid "Valor de Timeout de Sesión" +msgstr "Session Timeout Preset" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:208 +msgid "Nuevo Valor de Timeout de Sesión" +msgstr "New Session Timeout Preset" + +#. (itstool) path: action/text +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:231 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:232 +#: ../../../modules/web/Controllers/ItemPresetController.php:221 +#: ../../../config/actions.xml:859 +msgid "Editar Valor" +msgstr "Edit Value" + +#. (itstool) path: action/text +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:248 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:249 +#: ../../../config/actions.xml:865 +msgid "Eliminar Valor" +msgstr "Delete Value" + +#. (itstool) path: action/text +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:103 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:65 #: ../../../modules/web/themes/material-blue/views/_partials/fixed-header.inc:105 #: ../../../modules/web/themes/material-blue/views/notification/index.inc:1 #: ../../../config/actions.xml:667 msgid "Notificaciones" msgstr "Notifications" -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:120 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:118 #: ../../../modules/web/themes/material-blue/views/notification/notification.inc:28 #: ../../../modules/web/themes/material-blue/views/notification/notification.inc:35 msgid "Componente" msgstr "Component" -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:142 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:140 #: ../../../modules/web/themes/material-blue/views/notification/notification.inc:104 #: ../../../modules/web/themes/material-blue/views/notification/notification.inc:108 msgid "Leída" msgstr "Read" -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:143 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:141 msgid "Sólo Admins" msgstr "Only Admins" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:160 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:158 #: ../../../config/actions.xml:829 msgid "Buscar Notificación" msgstr "Search for Notification" -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:175 -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:176 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:173 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:174 #: ../../../modules/web/Controllers/NotificationController.php:179 msgid "Nueva Notificación" msgstr "New Notification" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:193 -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:194 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:191 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:192 #: ../../../modules/web/Controllers/NotificationController.php:103 #: ../../../config/actions.xml:799 msgid "Ver Notificación" msgstr "View Notification" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:223 -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:224 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:221 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:222 #: ../../../config/actions.xml:823 msgid "Marcar Notificación" msgstr "Checkout Notification" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:241 -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:242 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:239 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:240 #: ../../../modules/web/Controllers/NotificationController.php:210 #: ../../../config/actions.xml:811 msgid "Editar Notificación" msgstr "Edit Notification" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:258 -#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:259 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:256 +#: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:257 #: ../../../config/actions.xml:817 msgid "Eliminar Notificación" msgstr "Delete Notification" #: ../../../modules/web/Controllers/Helpers/Grid/PluginGrid.php:89 +#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:332 +#: ../../../modules/web/themes/material-blue/views/plugin/index.inc:1 msgid "Plugins" msgstr "Plugins" @@ -3815,32 +3835,32 @@ msgstr "Disable" msgid "Restablecer Datos" msgstr "Reset Data" -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:93 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:91 #: ../../../modules/web/themes/material-blue/views/account/account.inc:43 msgid "Enlaces" msgstr "Links" -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:107 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:105 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:44 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:46 msgid "Fecha Creación" msgstr "Creation Date" -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:108 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:106 #: ../../../modules/web/themes/material-blue/views/account/search-rows.inc:182 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:52 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:54 msgid "Fecha Caducidad" msgstr "Expiry Date " -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:110 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:108 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:31 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:34 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:38 msgid "Notificar" msgstr "Notify" -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:111 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:109 #: ../../../modules/web/themes/material-blue/views/account/details.inc:9 #: ../../../modules/web/themes/material-blue/views/account/details.inc:11 #: ../../../modules/web/themes/material-blue/views/account/search-rows.inc:184 @@ -3849,102 +3869,102 @@ msgstr "Notify" msgid "Visitas" msgstr "Visits" -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:146 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:144 msgid "Buscar Enlace" msgstr "Search for Link" -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:161 -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:162 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:159 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:160 msgid "Nuevo Enlace" msgstr "New Link" -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:179 -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:180 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:177 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:178 #: ../../../modules/web/Controllers/PublicLinkController.php:336 msgid "Ver Enlace" msgstr "View Link" -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:195 -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:196 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:193 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:194 msgid "Renovar Enlace" msgstr "Renew Link" -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:212 -#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:213 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:210 +#: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:211 msgid "Eliminar Enlace" msgstr "Delete Link" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:132 +#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:130 #: ../../../config/actions.xml:517 msgid "Buscar Etiqueta" msgstr "Search for Tag" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:147 -#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:148 +#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:145 +#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:146 #: ../../../modules/web/Controllers/TagController.php:98 #: ../../../config/actions.xml:493 msgid "Nueva Etiqueta" msgstr "New Tag" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:165 -#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:166 +#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:163 +#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:164 #: ../../../modules/web/Controllers/TagController.php:157 #: ../../../config/actions.xml:505 msgid "Editar Etiqueta" msgstr "Edit Tag" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:182 -#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:183 +#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:180 +#: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:181 #: ../../../config/actions.xml:511 msgid "Eliminar Etiqueta" msgstr "Delete Tag" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:154 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:151 #: ../../../config/actions.xml:589 msgid "Buscar Usuario" msgstr "Search for User" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:169 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:170 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:166 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:167 #: ../../../modules/web/Controllers/UserController.php:105 #: ../../../config/actions.xml:565 msgid "Nuevo Usuario" msgstr "New User" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:187 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:188 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:184 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:185 #: ../../../modules/web/Controllers/UserController.php:190 #: ../../../config/actions.xml:571 msgid "Editar Usuario" msgstr "Edit User" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:204 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:205 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:201 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:202 #: ../../../config/actions.xml:577 msgid "Eliminar Usuario" msgstr "Delete User" -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:221 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:222 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:218 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:219 #: ../../../modules/web/themes/material-blue/views/config/ldap.inc:440 msgid "Importar usuarios de LDAP" msgstr "Import users from LDAP" -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:236 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:237 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:233 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:234 msgid "Ver Detalles de Usuario" msgstr "View User Details" -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:253 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:254 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:250 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:251 #: ../../../modules/web/themes/material-blue/views/_partials/fixed-header.inc:62 #: ../../../modules/web/themes/material-blue/views/_partials/fixed-header.inc:120 #: ../../../modules/web/themes/material-blue/views/_partials/fixed-header.inc:126 @@ -3952,101 +3972,101 @@ msgid "Cambiar Clave de Usuario" msgstr "Change User's Password" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:136 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:133 #: ../../../config/actions.xml:619 msgid "Buscar Grupo" msgstr "Search for Group" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:151 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:152 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:148 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:149 #: ../../../modules/web/Controllers/UserGroupController.php:106 #: ../../../config/actions.xml:601 msgid "Nuevo Grupo" msgstr "New Group" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:169 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:170 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:166 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:167 #: ../../../modules/web/Controllers/UserGroupController.php:319 #: ../../../config/actions.xml:595 msgid "Ver Grupo" msgstr "View Group" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:186 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:187 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:183 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:184 #: ../../../modules/web/Controllers/UserGroupController.php:171 #: ../../../config/actions.xml:607 msgid "Editar Grupo" msgstr "Edit Group" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:203 -#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:204 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:200 +#: ../../../modules/web/Controllers/Helpers/Grid/UserGroupGrid.php:201 #: ../../../config/actions.xml:613 msgid "Eliminar Grupo" msgstr "Delete Group" -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:93 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:90 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:277 msgid "Perfiles" msgstr "Profiles" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:134 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:131 #: ../../../config/actions.xml:649 msgid "Buscar Perfil" msgstr "Search for Profile" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:149 -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:150 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:146 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:147 #: ../../../modules/web/Controllers/UserProfileController.php:100 #: ../../../config/actions.xml:631 msgid "Nuevo Perfil" msgstr "New Profile" -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:167 -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:168 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:164 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:165 msgid "Ver Detalles de Perfil" msgstr "View Profile Details" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:184 -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:185 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:181 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:182 #: ../../../modules/web/Controllers/UserProfileController.php:166 #: ../../../config/actions.xml:637 msgid "Editar Perfil" msgstr "Edit Profile" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:201 -#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:202 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:198 +#: ../../../modules/web/Controllers/Helpers/Grid/UserProfileGrid.php:199 #: ../../../config/actions.xml:643 msgid "Eliminar Perfil" msgstr "Delete Profile" -#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:262 -#: ../../../modules/web/themes/material-blue/inc/Icons.php:60 +#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:263 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:58 msgid "Buscar" msgstr "Search" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:289 +#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:290 #: ../../../config/actions.xml:103 msgid "Usuarios y Accesos" msgstr "Users and Accesses" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:303 +#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:304 #: ../../../config/actions.xml:43 msgid "Elementos y Personalización" msgstr "Items and Customizations" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:317 -#: ../../../modules/web/themes/material-blue/inc/Icons.php:63 +#: ../../../modules/web/Controllers/Helpers/LayoutHelper.php:346 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:61 #: ../../../modules/web/themes/material-blue/views/config/ldap.inc:21 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:22 #: ../../../config/actions.xml:673 @@ -4065,6 +4085,38 @@ msgstr "Without this module the application could not run correctly" msgid "Instalación finalizada" msgstr "Installation finished" +#. (itstool) path: action/text +#: ../../../modules/web/Controllers/ItemPresetController.php:70 +#: ../../../config/actions.xml:847 +msgid "Ver Valor" +msgstr "Display Value" + +#. (itstool) path: action/text +#: ../../../modules/web/Controllers/ItemPresetController.php:191 +#: ../../../config/actions.xml:853 +msgid "Nuevo Valor" +msgstr "New Value" + +#: ../../../modules/web/Controllers/ItemPresetController.php:258 +#: ../../../modules/web/Controllers/ItemPresetController.php:261 +msgid "Valores eliminados" +msgstr "Values deleted" + +#: ../../../modules/web/Controllers/ItemPresetController.php:269 +#: ../../../modules/web/Controllers/ItemPresetController.php:273 +msgid "Valor eliminado" +msgstr "Value deleted" + +#: ../../../modules/web/Controllers/ItemPresetController.php:301 +#: ../../../modules/web/Controllers/ItemPresetController.php:306 +msgid "Valor creado" +msgstr "Value created" + +#: ../../../modules/web/Controllers/ItemPresetController.php:340 +#: ../../../modules/web/Controllers/ItemPresetController.php:345 +msgid "Valor actualizado" +msgstr "Value updated" + #: ../../../modules/web/Controllers/LoginController.php:101 msgid "Finalizar sesión" msgstr "Logout session" @@ -4102,18 +4154,18 @@ msgstr "Notification created" msgid "Notificación actualizada" msgstr "Notification updated" -#: ../../../modules/web/Controllers/PluginController.php:179 -#: ../../../modules/web/Controllers/PluginController.php:182 +#: ../../../modules/web/Controllers/PluginController.php:181 +#: ../../../modules/web/Controllers/PluginController.php:184 msgid "Plugin habilitado" msgstr "Plugin enabled" -#: ../../../modules/web/Controllers/PluginController.php:204 -#: ../../../modules/web/Controllers/PluginController.php:207 +#: ../../../modules/web/Controllers/PluginController.php:206 +#: ../../../modules/web/Controllers/PluginController.php:209 msgid "Plugin deshabilitado" msgstr "Plugin disabled" -#: ../../../modules/web/Controllers/PluginController.php:229 -#: ../../../modules/web/Controllers/PluginController.php:232 +#: ../../../modules/web/Controllers/PluginController.php:231 +#: ../../../modules/web/Controllers/PluginController.php:234 msgid "Plugin restablecido" msgstr "Plugin reset" @@ -4295,14 +4347,6 @@ msgstr "Preferences updated" msgid "Preferencias" msgstr "Preferences" -#: ../../../modules/web/Forms/AccountDefaultPermissionForm.php:111 -msgid "Es necesario asignar un elemento del tipo usuario, grupo o perfil" -msgstr "An element of type user, group or profile need to be set" - -#: ../../../modules/web/Forms/AccountDefaultPermissionForm.php:115 -msgid "No hay permisos definidos" -msgstr "There aren't any defined permissions" - #: ../../../modules/web/Forms/AccountForm.php:139 msgid "Es necesaria una clave" msgstr "A key is needed" @@ -4348,6 +4392,18 @@ msgstr "Field type not set" msgid "Módulo del campo no indicado" msgstr "Field module not set" +#: ../../../modules/web/Forms/ItemsPresetForm.php:111 +msgid "Tipo de valor no definido o incorrecto" +msgstr "Value type not set or incorrect" + +#: ../../../modules/web/Forms/ItemsPresetForm.php:128 +msgid "No hay permisos definidos" +msgstr "There aren't any defined permissions" + +#: ../../../modules/web/Forms/ItemsPresetForm.php:173 +msgid "Es necesario asignar un elemento del tipo usuario, grupo o perfil" +msgstr "An element of type user, group or profile need to be set" + #: ../../../modules/web/Forms/NotificationForm.php:92 msgid "Es necesario un componente" msgstr "A component is needed" @@ -4396,76 +4452,76 @@ msgstr "Unable to delete, user in use" msgid "Es necesario un nombre de grupo" msgstr "A group name is needed" -#: ../../../modules/web/Forms/UserProfileForm.php:115 +#: ../../../modules/web/Forms/UserProfileForm.php:116 msgid "Es necesario un nombre de perfil" msgstr "A profile name is needed" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:34 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:32 msgid "Añadir" msgstr "Add" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:35 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:33 msgid "Ver Detalles" msgstr "View Details" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:37 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:33 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:71 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:138 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:177 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:35 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:34 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:72 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-permission.inc:24 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-permission.inc:63 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:97 msgid "Editar" msgstr "Edit" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:38 -#: ../../../modules/web/themes/material-blue/inc/Icons.php:68 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:36 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:66 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:129 msgid "Eliminar" msgstr "Delete" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:39 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:37 msgid "Cambiar Clave" msgstr "Change Password" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:40 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:38 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:193 msgid "Admin Aplicación" msgstr "Application Admin" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:41 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:39 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:211 msgid "Admin Cuentas" msgstr "Accounts Admin" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:42 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:40 msgid "Usuario de LDAP" msgstr "LDAP User" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:43 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:41 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:250 msgid "Deshabilitado" msgstr "Disabled" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:44 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:42 msgid "Habilitado" msgstr "Enabled" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:45 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:43 #: ../../../modules/web/themes/material-blue/views/main/upgrade.inc:174 #: ../../../modules/web/themes/material-blue/views/upgrade/index.inc:49 msgid "Actualizar" msgstr "Update" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:46 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:44 msgid "Copiar" msgstr "Copy" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:48 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:46 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:78 msgid "Email" msgstr "Email" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:51 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:49 #: ../../../modules/web/themes/material-blue/views/_partials/error.inc:14 #: ../../../modules/web/themes/material-blue/views/_partials/error.inc:15 #: ../../../modules/web/themes/material-blue/views/error/error-database.inc:13 @@ -4477,53 +4533,53 @@ msgstr "Email" msgid "Volver" msgstr "Back" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:52 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:50 msgid "Restaurar" msgstr "Restore" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:54 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:52 #: ../../../config/strings.js.inc:79 msgid "Ayuda" msgstr "Help" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:55 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:53 msgid "Limpiar" msgstr "Clear" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:56 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:54 msgid "Realizar" msgstr "Perform" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:57 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:55 msgid "Descargar" msgstr "Download" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:58 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:56 #: ../../../config/strings.js.inc:85 msgid "Aviso" msgstr "Warning" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:59 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:57 msgid "Comprobar" msgstr "Check" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:66 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:64 msgid "Crítico" msgstr "Critical" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:71 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:67 msgid "Página anterior" msgstr "Previous page" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:72 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:68 msgid "Página siguiente" msgstr "Next page" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:73 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:69 msgid "Primera página" msgstr "First page" -#: ../../../modules/web/themes/material-blue/inc/Icons.php:74 +#: ../../../modules/web/themes/material-blue/inc/Icons.php:70 msgid "Última página" msgstr "Last page" @@ -4606,29 +4662,29 @@ msgid "Vaciar el registro de eventos?" msgstr "Clear event log?" #: ../../../config/strings.js.inc:47 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:112 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:113 #: ../../../modules/web/themes/material-blue/views/config/encryption.inc:276 #: ../../../modules/web/themes/material-blue/views/config/general-auth.inc:87 #: ../../../modules/web/themes/material-blue/views/config/import.inc:57 #: ../../../modules/web/themes/material-blue/views/config/ldap.inc:233 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:40 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:41 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:145 msgid "Seleccionar Grupo" msgstr "Select Group" #: ../../../config/strings.js.inc:48 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:95 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:96 #: ../../../modules/web/themes/material-blue/views/config/general-auth.inc:112 #: ../../../modules/web/themes/material-blue/views/config/import.inc:30 #: ../../../modules/web/themes/material-blue/views/config/ldap.inc:258 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:23 #: ../../../modules/web/themes/material-blue/views/itemshow/auth_token.inc:21 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:24 #: ../../../modules/web/themes/material-blue/views/notification/notification.inc:74 msgid "Seleccionar Usuario" msgstr "Select User" #: ../../../config/strings.js.inc:49 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:57 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:58 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:128 msgid "Seleccionar Perfil" msgstr "Select Profile" @@ -4921,47 +4977,47 @@ msgstr "Select date" msgid "Última Modificación" msgstr "Last Modification" -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:17 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:55 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:122 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:161 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:18 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:56 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-permission.inc:8 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-permission.inc:47 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:48 msgid "Ver" msgstr "View" -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:21 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:37 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:126 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:142 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:22 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:38 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-permission.inc:12 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-permission.inc:28 #: ../../../modules/web/themes/material-blue/views/itemshow/user_group.inc:51 msgid "Seleccionar Usuarios" msgstr "Select Users" -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:59 -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:75 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:165 -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:181 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:60 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:76 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-permission.inc:51 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-permission.inc:67 msgid "Seleccionar Grupos" msgstr "Select Groups" -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:92 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:93 #: ../../../modules/web/themes/material-blue/views/account/details.inc:37 #: ../../../modules/web/themes/material-blue/views/account/details.inc:39 msgid "Creador" msgstr "Creator" -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:109 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:110 #: ../../../modules/web/themes/material-blue/views/account/details.inc:45 #: ../../../modules/web/themes/material-blue/views/account/details.inc:47 msgid "Grupo Principal" msgstr "Main Group" -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:131 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:135 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:177 msgid "Privada" msgstr "Private" -#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:144 +#: ../../../modules/web/themes/material-blue/views/account/account-permissions.inc:151 #: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:193 msgid "Privada Grupo" msgstr "Private for Group" @@ -5665,8 +5721,8 @@ msgstr "Sets the default profile for the newly created SSO users." #: ../../../modules/web/themes/material-blue/views/config/general-events.inc:99 #: ../../../modules/web/themes/material-blue/views/config/mail.inc:171 #: ../../../modules/web/themes/material-blue/views/config/mail.inc:174 -#: ../../../modules/web/themes/material-blue/views/itemshow/plugin.inc:61 -#: ../../../modules/web/themes/material-blue/views/itemshow/plugin.inc:63 +#: ../../../modules/web/themes/material-blue/views/plugin/plugin.inc:64 +#: ../../../modules/web/themes/material-blue/views/plugin/plugin.inc:66 msgid "Eventos" msgstr "Events" @@ -6307,10 +6363,6 @@ msgstr "Namespace used to search pages." msgid "Instalar" msgstr "Install" -#: ../../../modules/web/themes/material-blue/views/grid/datagrid-grid.inc:97 -msgid "Eliminar Seleccionados" -msgstr "Delete Selected" - #: ../../../modules/web/themes/material-blue/views/grid/datagrid-nav-full.inc:11 msgid "Filtro ON" msgstr "Filter ON" @@ -6372,28 +6424,6 @@ msgstr "Hosting Mode" msgid "No crea ni verifica los permisos del usuario sobre la BBDD" msgstr "It does not create or verify the user's permissions on the DB" -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:75 -msgid "" -"Prioridad de asignación en caso de coincidir con otros permisos asignados " -"por usuario, grupo o perfil." -msgstr "" -"Assignment priority if permissions match with others assigned by user, group " -"or profile." - -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:86 -msgid "Prioridad de asignación" -msgstr "Assignment Priority" - -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:107 -msgid "Indica si los permisos serán forzados al crear o modificar la cuenta." -msgstr "" -"Enforces the permissions to be set either on creating or updating an " -"account ." - -#: ../../../modules/web/themes/material-blue/views/itemshow/account_default_permission.inc:109 -msgid "Los permisos serán añadidos a los existentes." -msgstr "Permissions will be merged with the existing ones." - #: ../../../modules/web/themes/material-blue/views/itemshow/auth_token.inc:58 #: ../../../modules/web/themes/material-blue/views/itemshow/user.inc:12 #: ../../../modules/web/themes/material-blue/views/notification/notification.inc:85 @@ -6438,30 +6468,49 @@ msgstr "Field help" msgid "Obligatorio" msgstr "Required" -#: ../../../modules/web/themes/material-blue/views/itemshow/plugin.inc:20 -msgid "Nombre del plugin" -msgstr "Plugin name" +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-private.inc:21 +msgid "Las cuentas sólo serán visibles por el usuario." +msgstr "Accounts will be only visible by the user." -#: ../../../modules/web/themes/material-blue/views/itemshow/plugin.inc:32 -msgid "Versión del plugin" -msgstr "Plugin version" +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-private.inc:23 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-private.inc:42 +msgid "Los administradores no podrán acceder a las cuentas." +msgstr "Administrators won't be able to display the accounts." -#: ../../../modules/web/themes/material-blue/views/itemshow/plugin.inc:37 -msgid "Versión Compatible" -msgstr "Compatible Version" +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-private.inc:40 +msgid "Las cuentas sólo serán visibles por el usuario y su grupo principal." +msgstr "Accounts will be only visible by the user and his/her main group." -#: ../../../modules/web/themes/material-blue/views/itemshow/plugin.inc:44 -msgid "Versión de sysPass compatible" -msgstr "sysPass compatible version" +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc:6 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc:14 +msgid "Dirección IP" +msgstr "IP Address" -#: ../../../modules/web/themes/material-blue/views/itemshow/plugin.inc:49 -#: ../../../modules/web/themes/material-blue/views/wiki/wikipage.inc:25 -msgid "Autor" -msgstr "Author" +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc:19 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc:27 +msgid "Timeout" +msgstr "Timeout" -#: ../../../modules/web/themes/material-blue/views/itemshow/plugin.inc:56 -msgid "Autor del plugin" -msgstr "Plugin author" +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:76 +msgid "" +"Prioridad de asignación en caso de coincidir con otros valores asignados por " +"usuario, grupo o perfil." +msgstr "" +"Assignment priority if values match with others assigned by user, group or " +"profile." + +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:87 +msgid "Prioridad de asignación" +msgstr "Assignment Priority" + +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:108 +msgid "" +"Indica si los valores serán forzados al crear o modificar los elementos." +msgstr "Enforces the values to be set either on creating or updating an item." + +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:110 +msgid "Los valores serán añadidos a los existentes." +msgstr "Values will be merged with the existing ones." #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:76 #: ../../../modules/web/themes/material-blue/views/itemshow/public_link.inc:78 @@ -6540,8 +6589,8 @@ msgstr "Group description" #: ../../../modules/web/themes/material-blue/views/itemshow/user_group.inc:67 #: ../../../modules/web/themes/material-blue/views/itemshow/user_group.inc:69 -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:527 -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:529 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:543 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:545 msgid "Usado por" msgstr "Used by" @@ -6663,41 +6712,49 @@ msgstr "Links management" msgid "Gestión de cuentas" msgstr "Accounts management" +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:421 +msgid "Valores por Defecto" +msgstr "Default Values" + +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:422 +msgid "Gestión de Valores por Defecto" +msgstr "Default Values Management" + #. (itstool) path: action/text -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:426 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:442 #: ../../../config/actions.xml:679 msgid "Configuración General" msgstr "General Configuration" -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:442 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:458 msgid "Opciones de encriptación" msgstr "Encryption options" -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:457 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:473 msgid "Backup" msgstr "Backup" -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:458 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:474 msgid "Realizar copia de seguridad y exportar" msgstr "Make a backup and export" -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:473 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:489 msgid "Importar" msgstr "Import" -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:474 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:490 msgid "Realizar importación de cuentas" msgstr "Make accounts import" -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:493 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:509 msgid "Log de Eventos" msgstr "Event Log" -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:494 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:510 msgid "Ver log de eventos" msgstr "View event log" -#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:520 +#: ../../../modules/web/themes/material-blue/views/itemshow/user_profile.inc:536 msgid "Nombre del perfil" msgstr "Profile name" @@ -6810,6 +6867,31 @@ msgstr "Only for application administrators" msgid "Solo Admins" msgstr "Only Admins" +#: ../../../modules/web/themes/material-blue/views/plugin/plugin.inc:23 +msgid "Nombre del plugin" +msgstr "Plugin name" + +#: ../../../modules/web/themes/material-blue/views/plugin/plugin.inc:35 +msgid "Versión del plugin" +msgstr "Plugin version" + +#: ../../../modules/web/themes/material-blue/views/plugin/plugin.inc:40 +msgid "Versión Compatible" +msgstr "Compatible Version" + +#: ../../../modules/web/themes/material-blue/views/plugin/plugin.inc:47 +msgid "Versión de sysPass compatible" +msgstr "sysPass compatible version" + +#: ../../../modules/web/themes/material-blue/views/plugin/plugin.inc:52 +#: ../../../modules/web/themes/material-blue/views/wiki/wikipage.inc:25 +msgid "Autor" +msgstr "Author" + +#: ../../../modules/web/themes/material-blue/views/plugin/plugin.inc:59 +msgid "Autor del plugin" +msgstr "Plugin author" + #: ../../../modules/web/themes/material-blue/views/upgrade/index.inc:11 msgid "La aplicación necesita actualizarse" msgstr "The application needs to be updated" @@ -7191,8 +7273,8 @@ msgstr "Create Notification" #. (itstool) path: action/text #: ../../../config/actions.xml:835 -msgid "Gestión Permisos" -msgstr "Permissions Management" +msgid "Gestión Valores Predeterminados" +msgstr "Preset Values Management" #. (itstool) path: strings/text #: ../../../config/strings.xml:4 @@ -7224,6 +7306,39 @@ msgstr "Text" msgid "Link" msgstr "Link" +#~ msgid "Gestión Permisos" +#~ msgstr "Permissions Management" + +#~ msgid "Buscar Permiso" +#~ msgstr "Search for Permission" + +#~ msgid "Ver Permiso" +#~ msgstr "View Permission" + +#~ msgid "Editar Permiso" +#~ msgstr "Edit Permission" + +#~ msgid "Eliminar Permiso" +#~ msgstr "Delete Permission" + +#~ msgid "Permiso no encontrada" +#~ msgstr "Permission not found" + +#~ msgid "Permisos eliminados" +#~ msgstr "Permissions deleted" + +#~ msgid "Permiso eliminado" +#~ msgstr "Permission deleted" + +#~ msgid "Permiso creado" +#~ msgstr "Permission added" + +#~ msgid "Permiso actualizado" +#~ msgstr "Permission updated" + +#~ msgid "Gestión de Permisos" +#~ msgstr "Permissions Management" + #, fuzzy #~ msgid "Error al eliminar permisos" #~ msgstr "Error while removing the profile" @@ -7389,9 +7504,6 @@ msgstr "Link" #~ msgid "Modificar configuración" #~ msgstr "Update Configuration" -#~ msgid "Valor" -#~ msgstr "Value" - #~ msgid "Sección" #~ msgstr "Section" diff --git a/app/locales/en_US/LC_MESSAGES/messages.mo b/app/locales/en_US/LC_MESSAGES/messages.mo index ec32c0d888b014e696bca44c6ac11bd5f4c5874c..53489fb7cedde8bcb2b779034cfdce3203f6c9c1 100644 GIT binary patch delta 29630 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 a)grF+3P_YF;@y~lgHa\n" "Language-Team: nuxsmin@syspass.org\n" "Language: en_US\n" @@ -74,7 +74,7 @@ msgstr "Please contact to the administrator" # Not available #: ../../../../lib/SP/Core/Acl/Acl.php:282 -#: ../../../../lib/SP/Services/Auth/LoginService.php:582 +#: ../../../../lib/SP/Services/Auth/LoginService.php:586 msgid "N/D" msgstr "N/A" @@ -94,16 +94,16 @@ msgstr "Action" #: ../../../../lib/SP/Providers/Auth/Ldap/LdapMsAds.php:165 #: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:114 #: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:126 -#: ../../../../lib/SP/Services/Auth/LoginService.php:211 -#: ../../../../lib/SP/Services/Auth/LoginService.php:229 -#: ../../../../lib/SP/Services/Auth/LoginService.php:368 -#: ../../../../lib/SP/Services/Auth/LoginService.php:435 -#: ../../../../lib/SP/Services/Auth/LoginService.php:543 -#: ../../../../lib/SP/Services/Auth/LoginService.php:586 +#: ../../../../lib/SP/Services/Auth/LoginService.php:215 +#: ../../../../lib/SP/Services/Auth/LoginService.php:233 +#: ../../../../lib/SP/Services/Auth/LoginService.php:372 +#: ../../../../lib/SP/Services/Auth/LoginService.php:439 +#: ../../../../lib/SP/Services/Auth/LoginService.php:547 +#: ../../../../lib/SP/Services/Auth/LoginService.php:590 #: ../../../../lib/SP/Services/Ldap/LdapImportService.php:230 #: ../../../modules/web/Controllers/Helpers/Account/AccountSearchHelper.php:235 #: ../../../modules/web/Controllers/Helpers/Grid/AuthTokenGrid.php:102 -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:102 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:106 #: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:107 #: ../../../modules/web/Controllers/LoginController.php:102 #: ../../../modules/web/Controllers/UserController.php:278 @@ -169,7 +169,7 @@ msgstr "Invalid context" msgid "Contexto no inicializado" msgstr "Context not initialized" -#: ../../../../lib/SP/Core/Context/SessionContext.php:545 +#: ../../../../lib/SP/Core/Context/SessionContext.php:547 msgid "La sesión no puede ser inicializada" msgstr "Session cannot be initialized" @@ -195,12 +195,12 @@ msgstr "The key file does not exist" #: ../../../../lib/SP/Services/Api/ApiService.php:129 #: ../../../../lib/SP/Services/Api/ApiService.php:227 #: ../../../../lib/SP/Services/Api/ApiService.php:235 -#: ../../../../lib/SP/Services/Auth/LoginService.php:182 -#: ../../../../lib/SP/Services/Auth/LoginService.php:333 -#: ../../../../lib/SP/Services/Auth/LoginService.php:482 -#: ../../../../lib/SP/Services/Auth/LoginService.php:487 -#: ../../../../lib/SP/Services/Auth/LoginService.php:519 -#: ../../../../lib/SP/Services/Auth/LoginService.php:626 +#: ../../../../lib/SP/Services/Auth/LoginService.php:186 +#: ../../../../lib/SP/Services/Auth/LoginService.php:337 +#: ../../../../lib/SP/Services/Auth/LoginService.php:486 +#: ../../../../lib/SP/Services/Auth/LoginService.php:491 +#: ../../../../lib/SP/Services/Auth/LoginService.php:523 +#: ../../../../lib/SP/Services/Auth/LoginService.php:630 #: ../../../../lib/SP/Services/AuthToken/AuthTokenService.php:306 #: ../../../../lib/SP/Services/CustomField/CustomFieldService.php:203 #: ../../../../lib/SP/Services/Export/XmlVerifyService.php:108 @@ -241,19 +241,23 @@ msgstr "ON" msgid "OFF" msgstr "OFF" -#: ../../../../lib/SP/DataModel/TrackData.php:155 -#: ../../../../lib/SP/DataModel/TrackData.php:157 -#: ../../../../lib/SP/Repositories/Track/TrackRequest.php:56 -#: ../../../../lib/SP/Repositories/Track/TrackRequest.php:58 -msgid "IP inválida" -msgstr "Invalid IP" - #: ../../../../lib/SP/Html/DataGrid/DataGridBase.php:306 #: ../../../../lib/SP/Mvc/View/Template.php:122 #, php-format msgid "No es posible obtener la plantilla \"%s\" : %s" msgstr "Unable to retrieve the \"%s\" template: %s" +#: ../../../../lib/SP/Http/Address.php:49 +#: ../../../../lib/SP/Http/Address.php:51 +#: ../../../../lib/SP/Http/Address.php:68 +#: ../../../../lib/SP/Http/Address.php:70 +#: ../../../../lib/SP/Http/Address.php:90 +#: ../../../../lib/SP/Http/Address.php:109 +#: ../../../../lib/SP/Repositories/Track/TrackRequest.php:56 +#: ../../../../lib/SP/Repositories/Track/TrackRequest.php:58 +msgid "IP inválida" +msgstr "Invalid IP" + #: ../../../../lib/SP/Http/Json.php:179 msgid "Error de codificación" msgstr "Encoding error" @@ -398,7 +402,7 @@ msgstr "Error while searching the group RDN" #: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:115 #: ../../../../lib/SP/Providers/Auth/Ldap/LdapStd.php:127 #: ../../../../lib/SP/Services/Ldap/LdapImportService.php:137 -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:103 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:107 #: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:114 #: ../../../modules/web/Controllers/UserGroupController.php:220 #: ../../../modules/web/themes/material-blue/views/_partials/fixed-header.inc:137 @@ -979,7 +983,7 @@ msgid "Fomato incorrecto" msgstr "Invalid format" #: ../../../../lib/SP/Services/Api/ApiService.php:96 -#: ../../../../lib/SP/Services/Auth/LoginService.php:132 +#: ../../../../lib/SP/Services/Auth/LoginService.php:136 #: ../../../../lib/SP/Services/UserPassRecover/UserPassRecoverService.php:103 #: ../../../modules/web/Controllers/UserPassResetController.php:124 msgid "Intentos excedidos" @@ -994,34 +998,34 @@ msgstr "Wrong parameters" msgid "Acceso no permitido" msgstr "Unauthorized access" -#: ../../../../lib/SP/Services/Auth/LoginService.php:152 -#: ../../../../lib/SP/Services/Auth/LoginService.php:438 -#: ../../../../lib/SP/Services/Auth/LoginService.php:445 -#: ../../../../lib/SP/Services/Auth/LoginService.php:553 -#: ../../../../lib/SP/Services/Auth/LoginService.php:558 -#: ../../../../lib/SP/Services/Auth/LoginService.php:597 -#: ../../../../lib/SP/Services/Auth/LoginService.php:602 +#: ../../../../lib/SP/Services/Auth/LoginService.php:156 +#: ../../../../lib/SP/Services/Auth/LoginService.php:442 +#: ../../../../lib/SP/Services/Auth/LoginService.php:449 +#: ../../../../lib/SP/Services/Auth/LoginService.php:557 +#: ../../../../lib/SP/Services/Auth/LoginService.php:562 +#: ../../../../lib/SP/Services/Auth/LoginService.php:601 +#: ../../../../lib/SP/Services/Auth/LoginService.php:606 msgid "Login incorrecto" msgstr "Wrong login" -#: ../../../../lib/SP/Services/Auth/LoginService.php:210 -#: ../../../../lib/SP/Services/Auth/LoginService.php:217 +#: ../../../../lib/SP/Services/Auth/LoginService.php:214 +#: ../../../../lib/SP/Services/Auth/LoginService.php:221 msgid "Usuario deshabilitado" msgstr "User disabled" -#: ../../../../lib/SP/Services/Auth/LoginService.php:262 +#: ../../../../lib/SP/Services/Auth/LoginService.php:266 msgid "Usando clave temporal" msgstr "Using temporary password" -#: ../../../../lib/SP/Services/Auth/LoginService.php:270 -#: ../../../../lib/SP/Services/Auth/LoginService.php:276 -#: ../../../../lib/SP/Services/Auth/LoginService.php:289 -#: ../../../../lib/SP/Services/Auth/LoginService.php:295 +#: ../../../../lib/SP/Services/Auth/LoginService.php:274 +#: ../../../../lib/SP/Services/Auth/LoginService.php:280 +#: ../../../../lib/SP/Services/Auth/LoginService.php:293 +#: ../../../../lib/SP/Services/Auth/LoginService.php:299 msgid "Clave maestra incorrecta" msgstr "Wrong master password" -#: ../../../../lib/SP/Services/Auth/LoginService.php:284 -#: ../../../../lib/SP/Services/Auth/LoginService.php:303 +#: ../../../../lib/SP/Services/Auth/LoginService.php:288 +#: ../../../../lib/SP/Services/Auth/LoginService.php:307 #: ../../../../lib/SP/Services/User/UpdatedMasterPassException.php:45 #: ../../../../lib/SP/Util/ErrorUtil.php:144 #: ../../../modules/web/Controllers/ConfigEncryptionController.php:68 @@ -1030,25 +1034,25 @@ msgstr "Wrong master password" msgid "Clave maestra actualizada" msgstr "Master password updated" -#: ../../../../lib/SP/Services/Auth/LoginService.php:309 +#: ../../../../lib/SP/Services/Auth/LoginService.php:313 msgid "Es necesaria su clave anterior" msgstr "Your previous password is needed" -#: ../../../../lib/SP/Services/Auth/LoginService.php:321 +#: ../../../../lib/SP/Services/Auth/LoginService.php:325 msgid "La clave maestra no ha sido guardada o es incorrecta" msgstr "The Master Password either is not saved or is wrong" -#: ../../../../lib/SP/Services/Auth/LoginService.php:433 -#: ../../../../lib/SP/Services/Auth/LoginService.php:496 -#: ../../../../lib/SP/Services/Auth/LoginService.php:542 -#: ../../../../lib/SP/Services/Auth/LoginService.php:585 +#: ../../../../lib/SP/Services/Auth/LoginService.php:437 +#: ../../../../lib/SP/Services/Auth/LoginService.php:500 +#: ../../../../lib/SP/Services/Auth/LoginService.php:546 +#: ../../../../lib/SP/Services/Auth/LoginService.php:589 #: ../../../modules/web/Controllers/AccountFileController.php:233 #: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:104 #: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:104 -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:101 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:105 #: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:117 -#: ../../../modules/web/Controllers/ItemPresetController.php:299 -#: ../../../modules/web/Controllers/ItemPresetController.php:338 +#: ../../../modules/web/Controllers/ItemPresetController.php:302 +#: ../../../modules/web/Controllers/ItemPresetController.php:341 #: ../../../modules/web/themes/material-blue/views/itemshow/custom_field.inc:31 #: ../../../modules/web/themes/material-blue/views/itemshow/custom_field.inc:33 #: ../../../modules/web/themes/material-blue/views/notification/notification.inc:16 @@ -1056,22 +1060,22 @@ msgstr "The Master Password either is not saved or is wrong" msgid "Tipo" msgstr "Type" -#: ../../../../lib/SP/Services/Auth/LoginService.php:434 -#: ../../../../lib/SP/Services/Auth/LoginService.php:497 +#: ../../../../lib/SP/Services/Auth/LoginService.php:438 +#: ../../../../lib/SP/Services/Auth/LoginService.php:501 msgid "Servidor LDAP" msgstr "LDAP Server" -#: ../../../../lib/SP/Services/Auth/LoginService.php:453 -#: ../../../../lib/SP/Services/Auth/LoginService.php:458 +#: ../../../../lib/SP/Services/Auth/LoginService.php:457 +#: ../../../../lib/SP/Services/Auth/LoginService.php:462 msgid "Cuenta expirada" msgstr "Account expired" -#: ../../../../lib/SP/Services/Auth/LoginService.php:466 -#: ../../../../lib/SP/Services/Auth/LoginService.php:471 +#: ../../../../lib/SP/Services/Auth/LoginService.php:470 +#: ../../../../lib/SP/Services/Auth/LoginService.php:475 msgid "El usuario no tiene grupos asociados" msgstr "The user has no associated groups" -#: ../../../../lib/SP/Services/Auth/LoginService.php:587 +#: ../../../../lib/SP/Services/Auth/LoginService.php:591 #: ../../../modules/web/themes/material-blue/views/config/general-auth.inc:10 msgid "Autentificación" msgstr "Authentication" @@ -2158,12 +2162,12 @@ msgstr "Option unavailable" #: ../../../modules/web/Controllers/CustomFieldController.php:295 #: ../../../modules/web/Controllers/EventlogController.php:94 #: ../../../modules/web/Controllers/ItemPresetController.php:67 -#: ../../../modules/web/Controllers/ItemPresetController.php:142 -#: ../../../modules/web/Controllers/ItemPresetController.php:177 -#: ../../../modules/web/Controllers/ItemPresetController.php:215 -#: ../../../modules/web/Controllers/ItemPresetController.php:245 -#: ../../../modules/web/Controllers/ItemPresetController.php:284 -#: ../../../modules/web/Controllers/ItemPresetController.php:323 +#: ../../../modules/web/Controllers/ItemPresetController.php:145 +#: ../../../modules/web/Controllers/ItemPresetController.php:180 +#: ../../../modules/web/Controllers/ItemPresetController.php:218 +#: ../../../modules/web/Controllers/ItemPresetController.php:248 +#: ../../../modules/web/Controllers/ItemPresetController.php:287 +#: ../../../modules/web/Controllers/ItemPresetController.php:326 #: ../../../modules/web/Controllers/NotificationController.php:100 #: ../../../modules/web/Controllers/NotificationController.php:160 #: ../../../modules/web/Controllers/NotificationController.php:175 @@ -2285,9 +2289,9 @@ msgstr "Account" #: ../../../modules/api/Controllers/ClientController.php:155 #: ../../../modules/api/Controllers/TagController.php:118 #: ../../../modules/web/Controllers/Helpers/Grid/EventlogGrid.php:100 -#: ../../../modules/web/Controllers/ItemPresetController.php:267 -#: ../../../modules/web/Controllers/ItemPresetController.php:300 -#: ../../../modules/web/Controllers/ItemPresetController.php:339 +#: ../../../modules/web/Controllers/ItemPresetController.php:270 +#: ../../../modules/web/Controllers/ItemPresetController.php:303 +#: ../../../modules/web/Controllers/ItemPresetController.php:342 #: ../../../modules/web/themes/material-blue/views/account/details.inc:138 #: ../../../modules/web/themes/material-blue/views/account/details.inc:140 msgid "ID" @@ -2640,7 +2644,7 @@ msgstr "Tag updated" msgid "Etiqueta eliminada" msgstr "Tag removed" -#: ../../../modules/api/Init.php:139 +#: ../../../modules/api/Init.php:132 msgid "Es necesario actualizar" msgstr "Updating needed" @@ -3431,7 +3435,8 @@ msgstr "Sort by URL / IP" #: ../../../modules/web/Controllers/Helpers/Grid/ClientGrid.php:69 #: ../../../modules/web/Controllers/Helpers/Grid/CustomFieldGrid.php:70 #: ../../../modules/web/Controllers/Helpers/Grid/FileGrid.php:69 -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:70 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:73 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:74 #: ../../../modules/web/Controllers/Helpers/Grid/NotificationGrid.php:83 #: ../../../modules/web/Controllers/Helpers/Grid/PublicLinkGrid.php:71 #: ../../../modules/web/Controllers/Helpers/Grid/TagGrid.php:70 @@ -3650,11 +3655,11 @@ msgstr "Download File" msgid "Eliminar Archivo" msgstr "Delete File" -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:89 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:93 msgid "Valores Predeterminados" msgstr "Preset Values" -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:104 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:108 #: ../../../modules/web/Controllers/Helpers/Grid/UserGrid.php:113 #: ../../../modules/web/Controllers/UserProfileController.php:216 #: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:52 @@ -3665,43 +3670,57 @@ msgstr "Preset Values" msgid "Perfil" msgstr "Profile" -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:105 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:109 #: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:70 msgid "Prioridad" msgstr "Priority" -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:106 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:110 #: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:106 msgid "Forzado" msgstr "Forced" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:140 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:144 #: ../../../config/actions.xml:841 msgid "Buscar Valor" msgstr "Search for Value" -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:155 -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:156 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:159 +msgid "Valor de Permiso" +msgstr "Permission Preset" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:160 msgid "Nuevo Valor de Permiso" msgstr "New Permission Preset" -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:176 -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:177 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:183 +msgid "Valor de Cuenta Privada" +msgstr "Private Account Preset" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:184 msgid "Nuevo Valor de Cuenta Privada" msgstr "New Private Account Preset" +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:207 +msgid "Valor de Timeout de Sesión" +msgstr "Session Timeout Preset" + +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:208 +msgid "Nuevo Valor de Timeout de Sesión" +msgstr "New Session Timeout Preset" + #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:197 -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:198 -#: ../../../modules/web/Controllers/ItemPresetController.php:218 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:231 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:232 +#: ../../../modules/web/Controllers/ItemPresetController.php:221 #: ../../../config/actions.xml:859 msgid "Editar Valor" msgstr "Edit Value" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:214 -#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:215 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:248 +#: ../../../modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php:249 #: ../../../config/actions.xml:865 msgid "Eliminar Valor" msgstr "Delete Value" @@ -4073,28 +4092,28 @@ msgid "Ver Valor" msgstr "Display Value" #. (itstool) path: action/text -#: ../../../modules/web/Controllers/ItemPresetController.php:188 +#: ../../../modules/web/Controllers/ItemPresetController.php:191 #: ../../../config/actions.xml:853 msgid "Nuevo Valor" msgstr "New Value" -#: ../../../modules/web/Controllers/ItemPresetController.php:255 #: ../../../modules/web/Controllers/ItemPresetController.php:258 +#: ../../../modules/web/Controllers/ItemPresetController.php:261 msgid "Valores eliminados" msgstr "Values deleted" -#: ../../../modules/web/Controllers/ItemPresetController.php:266 -#: ../../../modules/web/Controllers/ItemPresetController.php:270 +#: ../../../modules/web/Controllers/ItemPresetController.php:269 +#: ../../../modules/web/Controllers/ItemPresetController.php:273 msgid "Valor eliminado" msgstr "Value deleted" -#: ../../../modules/web/Controllers/ItemPresetController.php:298 -#: ../../../modules/web/Controllers/ItemPresetController.php:303 +#: ../../../modules/web/Controllers/ItemPresetController.php:301 +#: ../../../modules/web/Controllers/ItemPresetController.php:306 msgid "Valor creado" msgstr "Value created" -#: ../../../modules/web/Controllers/ItemPresetController.php:337 -#: ../../../modules/web/Controllers/ItemPresetController.php:342 +#: ../../../modules/web/Controllers/ItemPresetController.php:340 +#: ../../../modules/web/Controllers/ItemPresetController.php:345 msgid "Valor actualizado" msgstr "Value updated" @@ -4373,15 +4392,15 @@ msgstr "Field type not set" msgid "Módulo del campo no indicado" msgstr "Field module not set" -#: ../../../modules/web/Forms/ItemsPresetForm.php:106 +#: ../../../modules/web/Forms/ItemsPresetForm.php:111 msgid "Tipo de valor no definido o incorrecto" msgstr "Value type not set or incorrect" -#: ../../../modules/web/Forms/ItemsPresetForm.php:123 +#: ../../../modules/web/Forms/ItemsPresetForm.php:128 msgid "No hay permisos definidos" msgstr "There aren't any defined permissions" -#: ../../../modules/web/Forms/ItemsPresetForm.php:152 +#: ../../../modules/web/Forms/ItemsPresetForm.php:173 msgid "Es necesario asignar un elemento del tipo usuario, grupo o perfil" msgstr "An element of type user, group or profile need to be set" @@ -6462,6 +6481,16 @@ msgstr "Administrators won't be able to display the accounts." msgid "Las cuentas sólo serán visibles por el usuario y su grupo principal." msgstr "Accounts will be only visible by the user and his/her main group." +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc:6 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc:14 +msgid "Dirección IP" +msgstr "IP Address" + +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc:19 +#: ../../../modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc:27 +msgid "Timeout" +msgstr "Timeout" + #: ../../../modules/web/themes/material-blue/views/itemshow/item_preset.inc:76 msgid "" "Prioridad de asignación en caso de coincidir con otros valores asignados por " diff --git a/app/modules/api/Init.php b/app/modules/api/Init.php index 79419450..31cd23e2 100644 --- a/app/modules/api/Init.php +++ b/app/modules/api/Init.php @@ -24,8 +24,7 @@ namespace SP\Modules\Api; -use DI\Container; -use DI\NotFoundException; +use Psr\Container\ContainerInterface; use SP\Core\Context\StatelessContext; use SP\Core\Exceptions\InitializationException; use SP\Core\Language; @@ -56,12 +55,9 @@ final class Init extends ModuleBase /** * Module constructor. * - * @param Container $container - * - * @throws \DI\DependencyException - * @throws \DI\NotFoundException + * @param ContainerInterface $container */ - public function __construct(Container $container) + public function __construct(ContainerInterface $container) { parent::__construct($container); @@ -73,11 +69,8 @@ final class Init extends ModuleBase * @param string $controller * * @throws InitializationException - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \SP\Core\Exceptions\SPException - * @throws NotFoundException * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException + * @throws \SP\Core\Context\ContextException */ public function initialize($controller) { diff --git a/app/modules/web/Controllers/Helpers/Account/AccountHelper.php b/app/modules/web/Controllers/Helpers/Account/AccountHelper.php index fe1621ae..b49d9c8b 100644 --- a/app/modules/web/Controllers/Helpers/Account/AccountHelper.php +++ b/app/modules/web/Controllers/Helpers/Account/AccountHelper.php @@ -325,13 +325,13 @@ final class AccountHelper extends HelperBase $accountPrivate = new AccountPrivate(); if ($itemPresetPrivate = $this->itemPresetService->getForCurrentUser(ItemPresetInterface::ITEM_TYPE_ACCOUNT_PRIVATE)) { - $accountPrivate = $itemPresetPrivate->hydrate(AccountPrivate::class); + $accountPrivate = $itemPresetPrivate->hydrate(AccountPrivate::class) ?: $accountPrivate; } $accountPermission = new AccountPermission(); if ($itemPresetPermission = $this->itemPresetService->getForCurrentUser(ItemPresetInterface::ITEM_TYPE_ACCOUNT_PERMISSION)) { - $accountPermission = $itemPresetPermission->hydrate(AccountPermission::class); + $accountPermission = $itemPresetPermission->hydrate(AccountPermission::class) ?: $accountPermission; } $selectUsers = SelectItemAdapter::factory(UserService::getItemsBasic()); diff --git a/app/modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php b/app/modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php index 9a948bf8..3ffc98dd 100644 --- a/app/modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php +++ b/app/modules/web/Controllers/Helpers/Grid/ItemPresetGrid.php @@ -33,6 +33,7 @@ use SP\Html\DataGrid\DataGridData; use SP\Html\DataGrid\DataGridHeader; use SP\Html\DataGrid\DataGridInterface; use SP\Html\DataGrid\DataGridTab; +use SP\Services\ItemPreset\ItemPresetInterface; use SP\Storage\Database\QueryResult; /** @@ -65,9 +66,12 @@ final class ItemPresetGrid extends GridBase $grid->setDataActions($this->getCreatePermissionAction(), true); $grid->setDataActions($this->getCreatePrivateAction(), true); + $grid->setDataActions($this->getCreateSessionTimeoutAction(), true); $grid->setDataActions($this->getEditAction()); $grid->setDataActions($this->getDeleteAction()); - $grid->setDataActions($this->getDeleteAction()->setTitle(__('Eliminar Seleccionados')), true); + $grid->setDataActions($this->getDeleteAction() + ->setTitle(__('Eliminar Seleccionados')) + ->setName(__('Eliminar Seleccionados')), true); $grid->setTime(round(getElapsedTime($this->queryTimeStart), 5)); @@ -152,7 +156,7 @@ final class ItemPresetGrid extends GridBase $gridAction = new DataGridAction(); $gridAction->setId(ActionsInterface::ITEMPRESET_CREATE); $gridAction->setType(DataGridActionType::MENUBAR_ITEM); - $gridAction->setName(__('Nuevo Valor de Permiso')); + $gridAction->setName(__('Valor de Permiso')); $gridAction->setTitle(__('Nuevo Valor de Permiso')); $icon = clone $this->icons->getIconAdd(); @@ -160,7 +164,10 @@ final class ItemPresetGrid extends GridBase $gridAction->setIcon($icon->setIcon('add_circle')); $gridAction->setSkip(true); $gridAction->setOnClickFunction('appMgmt/show'); - $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ITEMPRESET_CREATE) . '/account.permission'); + + $route = Acl::getActionRoute(ActionsInterface::ITEMPRESET_CREATE) . '/' . ItemPresetInterface::ITEM_TYPE_ACCOUNT_PERMISSION; + + $gridAction->addData('action-route', $route); return $gridAction; } @@ -173,7 +180,7 @@ final class ItemPresetGrid extends GridBase $gridAction = new DataGridAction(); $gridAction->setId(ActionsInterface::ITEMPRESET_CREATE); $gridAction->setType(DataGridActionType::MENUBAR_ITEM); - $gridAction->setName(__('Nuevo Valor de Cuenta Privada')); + $gridAction->setName(__('Valor de Cuenta Privada')); $gridAction->setTitle(__('Nuevo Valor de Cuenta Privada')); $icon = clone $this->icons->getIconAdd(); @@ -181,7 +188,34 @@ final class ItemPresetGrid extends GridBase $gridAction->setIcon($icon->setIcon('add_circle')); $gridAction->setSkip(true); $gridAction->setOnClickFunction('appMgmt/show'); - $gridAction->addData('action-route', Acl::getActionRoute(ActionsInterface::ITEMPRESET_CREATE) . '/account.private'); + + $route = Acl::getActionRoute(ActionsInterface::ITEMPRESET_CREATE) . '/' . ItemPresetInterface::ITEM_TYPE_ACCOUNT_PRIVATE; + + $gridAction->addData('action-route', $route); + + return $gridAction; + } + + /** + * @return DataGridAction + */ + private function getCreateSessionTimeoutAction() + { + $gridAction = new DataGridAction(); + $gridAction->setId(ActionsInterface::ITEMPRESET_CREATE); + $gridAction->setType(DataGridActionType::MENUBAR_ITEM); + $gridAction->setName(__('Valor de Timeout de Sesión')); + $gridAction->setTitle(__('Nuevo Valor de Timeout de Sesión')); + + $icon = clone $this->icons->getIconAdd(); + + $gridAction->setIcon($icon->setIcon('add_circle')); + $gridAction->setSkip(true); + $gridAction->setOnClickFunction('appMgmt/show'); + + $route = Acl::getActionRoute(ActionsInterface::ITEMPRESET_CREATE) . '/' . ItemPresetInterface::ITEM_TYPE_SESSION_TIMEOUT; + + $gridAction->addData('action-route', $route); return $gridAction; } diff --git a/app/modules/web/Controllers/Helpers/ItemPresetHelper.php b/app/modules/web/Controllers/Helpers/ItemPresetHelper.php index 34adccaa..92a2db59 100644 --- a/app/modules/web/Controllers/Helpers/ItemPresetHelper.php +++ b/app/modules/web/Controllers/Helpers/ItemPresetHelper.php @@ -26,6 +26,7 @@ namespace SP\Modules\Web\Controllers\Helpers; use SP\DataModel\AccountPermission; use SP\DataModel\AccountPrivate; +use SP\DataModel\ItemPreset\SessionTimeout; use SP\DataModel\ItemPresetData; use SP\Mvc\View\Components\SelectItemAdapter; use SP\Services\User\UserService; @@ -84,6 +85,21 @@ class ItemPresetHelper extends HelperBase $this->view->assign('private', $accountPrivate); } + /** + * @param ItemPresetData $itemPresetData + * + * @throws \SP\Core\Exceptions\NoSuchPropertyException + * @throws \SP\Core\Exceptions\InvalidArgumentException + */ + public function makeSessionTimeoutView(ItemPresetData $itemPresetData) + { + $sessionTimeout = $itemPresetData->hydrate(SessionTimeout::class, 'data') ?: new SessionTimeout($this->request->getClientAddress(), 3600); + + $this->view->assign('typeTemplate', 'item_preset-session_timeout'); + + $this->view->assign('sessionTimeout', $sessionTimeout); + } + /** * @param ItemPresetData $itemPresetData */ diff --git a/app/modules/web/Controllers/ItemPresetController.php b/app/modules/web/Controllers/ItemPresetController.php index d8f2b357..ac00f0c7 100644 --- a/app/modules/web/Controllers/ItemPresetController.php +++ b/app/modules/web/Controllers/ItemPresetController.php @@ -114,6 +114,9 @@ class ItemPresetController extends ControllerBase implements CrudControllerInter case ItemPresetInterface::ITEM_TYPE_ACCOUNT_PRIVATE: $itemPresetHelper->makeAccountPrivateView($itemPresetData); break; + case ItemPresetInterface::ITEM_TYPE_SESSION_TIMEOUT: + $itemPresetHelper->makeSessionTimeoutView($itemPresetData); + break; } $this->view->assign('preset', $itemPresetData); diff --git a/app/modules/web/Forms/ItemsPresetForm.php b/app/modules/web/Forms/ItemsPresetForm.php index 5bfca233..9dced75c 100644 --- a/app/modules/web/Forms/ItemsPresetForm.php +++ b/app/modules/web/Forms/ItemsPresetForm.php @@ -25,9 +25,11 @@ namespace SP\Modules\Web\Forms; use SP\Core\Acl\ActionsInterface; +use SP\Core\Exceptions\InvalidArgumentException; use SP\Core\Exceptions\ValidationException; use SP\DataModel\AccountPermission; use SP\DataModel\AccountPrivate; +use SP\DataModel\ItemPreset\SessionTimeout; use SP\DataModel\ItemPresetData; use SP\Services\ItemPreset\ItemPresetInterface; use SP\Services\ItemPreset\ItemPresetRequest; @@ -102,6 +104,9 @@ final class ItemsPresetForm extends FormBase implements FormInterface case ItemPresetInterface::ITEM_TYPE_ACCOUNT_PRIVATE: $this->itemPresetRequest = new ItemPresetRequest($itemPresetData, $this->makePrivatePreset()); break; + case ItemPresetInterface::ITEM_TYPE_SESSION_TIMEOUT: + $this->itemPresetRequest = new ItemPresetRequest($itemPresetData, $this->makeSessionTimeoutreset()); + break; default: throw new ValidationException(__u('Tipo de valor no definido o incorrecto')); } @@ -138,6 +143,22 @@ final class ItemsPresetForm extends FormBase implements FormInterface return $accountPrivate; } + /** + * @return SessionTimeout + * @throws ValidationException + */ + private function makeSessionTimeoutreset() + { + try { + return new SessionTimeout( + $this->request->analyzeString('ip_address'), + $this->request->analyzeInt('timeout') + ); + } catch (InvalidArgumentException $e) { + throw new ValidationException($e->getMessage()); + } + } + /** * @throws ValidationException */ diff --git a/app/modules/web/Init.php b/app/modules/web/Init.php index c0bc53c6..f9291ea1 100644 --- a/app/modules/web/Init.php +++ b/app/modules/web/Init.php @@ -25,9 +25,8 @@ namespace SP\Modules\Web; use Defuse\Crypto\Exception\CryptoException; -use DI\Container; +use Psr\Container\ContainerInterface; use SP\Bootstrap; -use SP\Core\Context\ContextException; use SP\Core\Context\ContextInterface; use SP\Core\Context\SessionContext; use SP\Core\Crypt\CryptSessionHandler; @@ -36,8 +35,12 @@ use SP\Core\Crypt\UUIDCookie; use SP\Core\Language; use SP\Core\ModuleBase; use SP\Core\UI\Theme; +use SP\DataModel\ItemPreset\SessionTimeout; +use SP\Http\Address; use SP\Plugin\PluginManager; use SP\Services\Crypt\SecureSessionService; +use SP\Services\ItemPreset\ItemPresetInterface; +use SP\Services\ItemPreset\ItemPresetService; use SP\Services\Upgrade\UpgradeAppService; use SP\Services\Upgrade\UpgradeDatabaseService; use SP\Services\Upgrade\UpgradeUtil; @@ -49,6 +52,7 @@ use SP\Util\HttpUtil; /** * Class Init * + * @property itemPresetService * @package SP\Modules\Web */ final class Init extends ModuleBase @@ -79,16 +83,21 @@ final class Init extends ModuleBase * @var PluginManager */ private $pluginManager; + /** + * @var ItemPresetService + */ + private $itemPresetService; + /** + * @var bool + */ + private $isIndex = false; /** * Init constructor. * - * @param Container $container - * - * @throws \DI\DependencyException - * @throws \DI\NotFoundException + * @param ContainerInterface $container */ - public function __construct(Container $container) + public function __construct(ContainerInterface $container) { parent::__construct($container); @@ -97,6 +106,7 @@ final class Init extends ModuleBase $this->language = $container->get(Language::class); $this->secureSessionService = $container->get(SecureSessionService::class); $this->pluginManager = $container->get(PluginManager::class); + $this->itemPresetService = $container->get(ItemPresetService::class); } /** @@ -104,15 +114,19 @@ final class Init extends ModuleBase * * @param string $controller * - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \SP\Core\Exceptions\SPException * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\InvalidClassException + * @throws \SP\Core\Exceptions\QueryException + * @throws \SP\Repositories\NoSuchItemException + * @throws \Exception */ public function initialize($controller) { logger(__METHOD__); + $this->isIndex = $controller === 'index'; + // Iniciar la sesión de PHP $this->initSession($this->configData->isEncryptSession()); @@ -202,7 +216,7 @@ final class Init extends ModuleBase * * @param bool $encrypt Encriptar la sesión de PHP * - * @throws ContextException + * @throws \Exception */ private function initSession($encrypt = false) { @@ -215,7 +229,7 @@ final class Init extends ModuleBase try { $this->context->initialize(); - } catch (ContextException $e) { + } catch (\Exception $e) { $this->router->response()->header('HTTP/1.1', '500 Internal Server Error'); throw $e; @@ -262,7 +276,6 @@ final class Init extends ModuleBase SessionContext::restart(); } else { - $sidStartTime = $this->context->getSidStartTime(); // Regenerar el Id de sesión periódicamente para evitar fijación @@ -273,14 +286,11 @@ final class Init extends ModuleBase $this->context->setSidStartTime(time()); $this->context->setStartActivity(time()); } else if (!$inMaintenance - && time() > ($sidStartTime + 120) + && time() > ($sidStartTime + SessionContext::MAX_SID_TIME) && $this->context->isLoggedIn() ) { try { CryptSession::reKey($this->context); - - // Recargar los permisos del perfil de usuario -// $this->session->setUserProfile(Profile::getItem()->getById($this->session->getUserData()->getUserProfileId())); } catch (CryptoException $e) { logger($e->getMessage()); @@ -300,10 +310,44 @@ final class Init extends ModuleBase */ private function getSessionLifeTime() { - if (($timeout = $this->context->getSessionTimeout()) === null) { - return $this->context->setSessionTimeout($this->configData->getSessionTimeout()); + $timeout = $this->context->getSessionTimeout(); + + try { + if ($this->isIndex || $timeout === null) { + $userTimeout = $this->getSessionTimeoutForUser($timeout) ?: $this->configData->getSessionTimeout(); + + return $this->context->setSessionTimeout($userTimeout); + } + } catch (\Exception $e) { + processException($e); } return $timeout; } + + /** + * @param int $default + * + * @return int + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\InvalidArgumentException + * @throws \SP\Core\Exceptions\NoSuchPropertyException + * @throws \SP\Core\Exceptions\QueryException + */ + private function getSessionTimeoutForUser(int $default = null) + { + if ($this->context->isLoggedIn()) { + $itemPreset = $this->itemPresetService->getForCurrentUser(ItemPresetInterface::ITEM_TYPE_SESSION_TIMEOUT); + + if ($itemPreset !== null) { + $sessionTimeout = $itemPreset->hydrate(SessionTimeout::class); + + if (Address::check($this->request->getClientAddress(), $sessionTimeout->getAddress(), $sessionTimeout->getMask())) { + return $sessionTimeout->getTimeout(); + } + } + } + + return $default; + } } \ No newline at end of file diff --git a/app/modules/web/themes/material-blue/views/grid/datagrid-grid.inc b/app/modules/web/themes/material-blue/views/grid/datagrid-grid.inc index 66e34e07..959248d3 100644 --- a/app/modules/web/themes/material-blue/views/grid/datagrid-grid.inc +++ b/app/modules/web/themes/material-blue/views/grid/datagrid-grid.inc @@ -24,7 +24,8 @@ if (!isset($index)): $index = 0; endif; ?> getIcon()->getIcon(); ?> getTitle(); ?> + class="mdl-tooltip mdl-tooltip--bottom" + title="getTitle(); ?>">getName(); ?> getType() === \SP\Html\DataGrid\DataGridActionType::SEARCH_ITEM): ?>

  • getData() as $dataName => $dataValue): echo 'data-', $dataName, '=', '"', $dataValue, '"'; endforeach; ?>> getIcon()->getIcon(); ?> - getTitle(); ?> + getName(); ?>
  • diff --git a/app/modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc b/app/modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc new file mode 100644 index 00000000..d0ecd4cf --- /dev/null +++ b/app/modules/web/themes/material-blue/views/itemshow/item_preset-session_timeout.inc @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/SP/Bootstrap.php b/lib/SP/Bootstrap.php index f207180a..05ddc6e4 100644 --- a/lib/SP/Bootstrap.php +++ b/lib/SP/Bootstrap.php @@ -132,7 +132,7 @@ final class Bootstrap */ protected function initRouter() { - $oops = "Oops, it looks like this content doesn't exist..."; + $oops = "Oops, it looks like this content does not exist..."; $this->router->onError(function ($router, $err_msg, $type, $err) { logger('Routing error: ' . $err_msg); diff --git a/lib/SP/Core/Context/ContextInterface.php b/lib/SP/Core/Context/ContextInterface.php index 1b3f3b9e..64ac9705 100644 --- a/lib/SP/Core/Context/ContextInterface.php +++ b/lib/SP/Core/Context/ContextInterface.php @@ -37,7 +37,6 @@ use SP\Services\User\UserLoginResponse; interface ContextInterface { /** - * @return void * @throws ContextException */ public function initialize(); diff --git a/lib/SP/Core/Context/SessionContext.php b/lib/SP/Core/Context/SessionContext.php index e85d3318..217a33c9 100644 --- a/lib/SP/Core/Context/SessionContext.php +++ b/lib/SP/Core/Context/SessionContext.php @@ -38,6 +38,8 @@ use SP\Services\User\UserLoginResponse; */ final class SessionContext extends ContextBase { + const MAX_SID_TIME = 120; + private static $isReset = false; private static $isLocked = false; diff --git a/lib/SP/Core/ModuleBase.php b/lib/SP/Core/ModuleBase.php index 8f89c5bc..83081005 100644 --- a/lib/SP/Core/ModuleBase.php +++ b/lib/SP/Core/ModuleBase.php @@ -26,6 +26,7 @@ namespace SP\Core; use DI\Container; use Klein\Klein; +use Psr\Container\ContainerInterface; use SP\Bootstrap; use SP\Config\Config; use SP\Core\Context\ContextInterface; @@ -70,12 +71,9 @@ abstract class ModuleBase /** * Module constructor. * - * @param Container $container - * - * @throws \DI\DependencyException - * @throws \DI\NotFoundException + * @param ContainerInterface $container */ - public function __construct(Container $container) + public function __construct(ContainerInterface $container) { $this->container = $container; $this->config = $container->get(Config::class); @@ -118,9 +116,6 @@ abstract class ModuleBase /** * Initializes event handlers - * - * @throws \DI\DependencyException - * @throws \DI\NotFoundException */ protected function initEventHandlers() { diff --git a/lib/SP/DataModel/ItemPreset/SessionTimeout.php b/lib/SP/DataModel/ItemPreset/SessionTimeout.php new file mode 100644 index 00000000..3d5726d2 --- /dev/null +++ b/lib/SP/DataModel/ItemPreset/SessionTimeout.php @@ -0,0 +1,104 @@ +. + */ + +namespace SP\DataModel\ItemPreset; + +use SP\Http\Address; + +/** + * Class SessionTimeout + * + * @package SP\DataModel\ItemPreset + */ +class SessionTimeout +{ + /** + * @var string + */ + private $address; + /** + * @var string + */ + private $mask; + /** + * @var int + */ + private $timeout; + + /** + * SessionTimeout constructor. + * + * @param string $address IP address and/or mask + * @param int $timeout Timeout in seconds + * + * @throws \SP\Core\Exceptions\InvalidArgumentException + */ + public function __construct(string $address, int $timeout) + { + $parse = Address::parse4($address); + + $this->address = $parse['address']; + $this->timeout = $timeout; + + $this->setMask($parse); + } + + /** + * @param array $parse + */ + private function setMask(array $parse) + { + if (isset($parse['cidr'])) { + $this->mask = Address::cidrToDec($parse['cidr']); + } elseif (isset($parse['mask'])) { + $this->mask = $parse['mask']; + } else { + $this->mask = '255.255.255.255'; + } + } + + /** + * @return string + */ + public function getAddress(): string + { + return $this->address; + } + + /** + * @return string + */ + public function getMask(): string + { + return $this->mask; + } + + /** + * @return int + */ + public function getTimeout(): int + { + return $this->timeout; + } +} \ No newline at end of file diff --git a/lib/SP/DataModel/PublicLinkData.php b/lib/SP/DataModel/PublicLinkData.php index 870eeaa9..cd33b47a 100644 --- a/lib/SP/DataModel/PublicLinkData.php +++ b/lib/SP/DataModel/PublicLinkData.php @@ -311,7 +311,7 @@ class PublicLinkData extends DataModelBase implements DataModelInterface */ public function getName() { - // TODO: Implement getName() method. + return ''; } /** diff --git a/lib/SP/DataModel/TrackData.php b/lib/SP/DataModel/TrackData.php index 6dd32b40..b21383eb 100644 --- a/lib/SP/DataModel/TrackData.php +++ b/lib/SP/DataModel/TrackData.php @@ -24,7 +24,7 @@ namespace SP\DataModel; -use SP\Core\Exceptions\InvalidArgumentException; +use SP\Http\Address; /** * Class TrackData @@ -123,19 +123,26 @@ class TrackData extends DataModelBase } /** - * @return string + * @return string|null + * @throws \SP\Core\Exceptions\InvalidArgumentException */ public function getIpv4() { - return @inet_ntop($this->ipv4); + if (!empty($this->ipv4)) { + return Address::fromBinary($this->ipv4); + } + + return null; } /** * @param string $ipv4 + * + * @throws \SP\Core\Exceptions\InvalidArgumentException */ public function setIpv4($ipv4) { - $this->ipv4 = @inet_pton($ipv4); + $this->ipv4 = Address::toBinary($ipv4); } /** @@ -145,16 +152,12 @@ class TrackData extends DataModelBase */ public function setTrackIp($track_ip) { - $ip = @inet_pton($track_ip); + $ip = Address::toBinary($track_ip); if (strlen($ip) === 4) { $this->ipv4 = $ip; } elseif (strlen($ip) > 4) { $this->ipv6 = $ip; - } elseif ($ip === false) { - logger(sprintf('%s : %s', __('IP inválida'), $track_ip)); - - throw new InvalidArgumentException(__u('IP inválida'), InvalidArgumentException::ERROR, $track_ip); } } @@ -167,19 +170,26 @@ class TrackData extends DataModelBase } /** - * @return string + * @return string|null + * @throws \SP\Core\Exceptions\InvalidArgumentException */ public function getIpv6() { - return @inet_ntop($this->ipv6); + if (!empty($this->ipv6)) { + return Address::fromBinary($this->ipv6); + } + + return null; } /** * @param string $ipv6 + * + * @throws \SP\Core\Exceptions\InvalidArgumentException */ public function setIpv6($ipv6) { - $this->ipv6 = @inet_pton($ipv6); + $this->ipv6 = Address::toBinary($ipv6); } /** diff --git a/lib/SP/Http/Address.php b/lib/SP/Http/Address.php new file mode 100644 index 00000000..ee4063c9 --- /dev/null +++ b/lib/SP/Http/Address.php @@ -0,0 +1,127 @@ +. + */ + +namespace SP\Http; + +use SP\Core\Exceptions\InvalidArgumentException; + +/** + * Class Address + * + * @package SP\Http + */ +class Address +{ + const PATTERN_IP_ADDRESS = '#^(?
    [\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})(?:/(?:(?[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})|(?[\d]{1,2})))?$#'; + + /** + * @param $address + * + * @return mixed + * @throws InvalidArgumentException + */ + public static function toBinary(string $address) + { + if (!filter_var($address, FILTER_VALIDATE_IP) + || ($binAddress = @inet_pton($address)) === false + ) { + logger(sprintf('%s : %s', __('IP inválida'), $address)); + + throw new InvalidArgumentException(__u('IP inválida'), InvalidArgumentException::ERROR, $address); + } + + return $binAddress; + } + + /** + * @param string $address + * + * @return string + * @throws InvalidArgumentException + */ + public static function fromBinary(string $address) + { + $stringAddress = @inet_ntop($address); + + if ($stringAddress === false) { + logger(sprintf('%s : %s', __('IP inválida'), $address)); + + throw new InvalidArgumentException(__u('IP inválida'), InvalidArgumentException::ERROR, $address); + } + + return $stringAddress; + } + + /** + * Parses an IPv4 address from either "192.168.0.1", "192.168.0.0/255.255.255.0" or "192.168.0.0/24" formats + * + * @param string $address + * + * @return array + * @throws InvalidArgumentException + */ + public static function parse4(string $address) + { + if (preg_match(self::PATTERN_IP_ADDRESS, $address, $matches)) { + return $matches; + } + + throw new InvalidArgumentException(__u('IP inválida'), InvalidArgumentException::ERROR, $address); + } + + /** + * Checks whether an IP address is included within $inAddress and $inMask + * + * @param string $address + * @param string $inAddress + * @param string $inMask + * + * @return int + * @throws InvalidArgumentException + */ + public static function check(string $address, string $inAddress, string $inMask) + { + if (!filter_var($address, FILTER_VALIDATE_IP) + || !filter_var($inAddress, FILTER_VALIDATE_IP) + || !filter_var($inMask, FILTER_VALIDATE_IP) + ) { + throw new InvalidArgumentException(__u('IP inválida'), InvalidArgumentException::ERROR, $address); + } + + // Obtains subnets based on mask ie.: subnet === subnet + return (ip2long($address) & ip2long($inMask)) === (ip2long($inAddress) & ip2long($inMask)); + } + + /** + * Converts a CIDR mask into decimal + * + * @param int $bits + * + * @return int + */ + public static function cidrToDec(int $bits) + { + return long2ip(-1 << (32 - $bits)); + } +} \ No newline at end of file diff --git a/lib/SP/Http/Request.php b/lib/SP/Http/Request.php index 02dc74eb..8c07bf43 100644 --- a/lib/SP/Http/Request.php +++ b/lib/SP/Http/Request.php @@ -143,7 +143,7 @@ final class Request /** * @param bool $fullForwarded * - * @return array|array[]|mixed|string + * @return array|string */ public function getClientAddress(bool $fullForwarded = false) { diff --git a/lib/SP/Repositories/Account/AccountToUserRepository.php b/lib/SP/Repositories/Account/AccountToUserRepository.php index 61917ad0..047fc387 100644 --- a/lib/SP/Repositories/Account/AccountToUserRepository.php +++ b/lib/SP/Repositories/Account/AccountToUserRepository.php @@ -172,11 +172,9 @@ final class AccountToUserRepository extends Repository * * @param int $id con el id de la cuenta * - * @return ItemData[] con los id de usuarios de la cuenta + * @return \SP\Storage\Database\QueryResult * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException - * - * @todo change returned type */ public function getUsersByAccountId($id) { @@ -192,6 +190,6 @@ final class AccountToUserRepository extends Repository $queryData->addParam($id); $queryData->setMapClassName(ItemData::class); - return $this->db->doSelect($queryData)->getDataAsArray(); + return $this->db->doSelect($queryData); } } \ No newline at end of file diff --git a/lib/SP/Services/Account/AccountHistoryService.php b/lib/SP/Services/Account/AccountHistoryService.php index 9e762f39..e77c9b56 100644 --- a/lib/SP/Services/Account/AccountHistoryService.php +++ b/lib/SP/Services/Account/AccountHistoryService.php @@ -126,7 +126,7 @@ final class AccountHistoryService extends Service */ public function getUsersByAccountId($id) { - return $this->accountToUserRepository->getUsersByAccountId($id); + return $this->accountToUserRepository->getUsersByAccountId($id)->getDataAsArray(); } /** diff --git a/lib/SP/Services/Account/AccountSearchService.php b/lib/SP/Services/Account/AccountSearchService.php index eab2bdcd..4309ab5f 100644 --- a/lib/SP/Services/Account/AccountSearchService.php +++ b/lib/SP/Services/Account/AccountSearchService.php @@ -346,7 +346,7 @@ final class AccountSearchService extends Service ) { $cache[$accountId] = new AccountCache( $accountId, - $this->accountToUserRepository->getUsersByAccountId($accountId), + $this->accountToUserRepository->getUsersByAccountId($accountId)->getDataAsArray(), $this->accountToUserGroupRepository->getUserGroupsByAccountId($accountId)->getDataAsArray()); if ($hasCache) { diff --git a/lib/SP/Services/Account/AccountService.php b/lib/SP/Services/Account/AccountService.php index ff3ed760..af37aaf0 100644 --- a/lib/SP/Services/Account/AccountService.php +++ b/lib/SP/Services/Account/AccountService.php @@ -89,7 +89,7 @@ final class AccountService extends Service implements AccountServiceInterface */ public function withUsersById(AccountDetailsResponse $accountDetailsResponse) { - $accountDetailsResponse->setUsers($this->accountToUserRepository->getUsersByAccountId($accountDetailsResponse->getId())); + $accountDetailsResponse->setUsers($this->accountToUserRepository->getUsersByAccountId($accountDetailsResponse->getId())->getDataAsArray()); return $this; } diff --git a/lib/SP/Services/Auth/LoginService.php b/lib/SP/Services/Auth/LoginService.php index 909e646c..430aba28 100644 --- a/lib/SP/Services/Auth/LoginService.php +++ b/lib/SP/Services/Auth/LoginService.php @@ -73,43 +73,47 @@ final class LoginService extends Service /** * @var UserLoginData */ - protected $userLoginData; + private $userLoginData; /** * @var ConfigData */ - protected $configData; + private $configData; /** * @var Theme */ - protected $theme; + private $theme; /** * @var UserService */ - protected $userService; + private $userService; /** * @var Language */ - protected $language; + private $language; /** * @var TrackService */ - protected $trackService; + private $trackService; /** * @var TrackRequest */ - protected $trackRequest; + private $trackRequest; /** * @var string */ - protected $from; + private $from; /** * @var Request */ - protected $request; + private $request; /** * Ejecutar las acciones de login * + * @uses LoginService::authBrowser() + * @uses LoginService::authDatabase() + * @uses LoginService::authLdap() + * * @return LoginResponse * @throws AuthException * @throws SPException @@ -198,7 +202,7 @@ final class LoginService extends Service * @throws \SP\Core\Exceptions\QueryException * @return LoginResponse */ - protected function checkUser() + private function checkUser() { $userLoginResponse = $this->userLoginData->getUserLoginResponse(); @@ -247,7 +251,7 @@ final class LoginService extends Service * @throws \Psr\Container\ContainerExceptionInterface * @throws \Psr\Container\NotFoundExceptionInterface */ - protected function loadMasterPass() + private function loadMasterPass() { $temporaryMasterPass = $this->dic->get(TemporaryMasterPassService::class); $userPassService = $this->dic->get(UserPassService::class); @@ -348,7 +352,7 @@ final class LoginService extends Service * @throws \SP\Core\Exceptions\QueryException * @throws \SP\Repositories\NoSuchItemException */ - protected function setUserSession() + private function setUserSession() { $userLoginResponse = $this->userLoginData->getUserLoginResponse(); @@ -372,7 +376,7 @@ final class LoginService extends Service /** * Cargar las preferencias del usuario y comprobar si usa 2FA */ - protected function loadUserPreferences() + private function loadUserPreferences() { $this->language->setLanguage(true); @@ -426,7 +430,7 @@ final class LoginService extends Service * @throws \SP\Core\Exceptions\SPException * @throws AuthException */ - protected function authLdap(LdapAuthData $authData) + private function authLdap(LdapAuthData $authData) { if ($authData->getStatusCode() > 0) { $eventMessage = EventMessage::factory() @@ -536,7 +540,7 @@ final class LoginService extends Service * @throws \SP\Core\Exceptions\SPException * @throws AuthException */ - protected function authDatabase(DatabaseAuthData $authData) + private function authDatabase(DatabaseAuthData $authData) { $eventMessage = EventMessage::factory() ->addDetail(__u('Tipo'), __FUNCTION__) @@ -577,7 +581,7 @@ final class LoginService extends Service * @return mixed * @throws AuthException */ - protected function authBrowser(BrowserAuthData $authData) + private function authBrowser(BrowserAuthData $authData) { $authType = $this->request->getServer('AUTH_TYPE') ?: __('N/D'); diff --git a/lib/SP/Services/Install/Installer.php b/lib/SP/Services/Install/Installer.php index b933e0d1..37616656 100644 --- a/lib/SP/Services/Install/Installer.php +++ b/lib/SP/Services/Install/Installer.php @@ -57,7 +57,7 @@ final class Installer extends Service */ const VERSION = [3, 0, 0]; const VERSION_TEXT = '3.0-beta'; - const BUILD = 18083002; + const BUILD = 18090101; /** * @var DatabaseSetupInterface diff --git a/lib/SP/Services/ItemPreset/ItemPresetInterface.php b/lib/SP/Services/ItemPreset/ItemPresetInterface.php index f8472b60..6297245c 100644 --- a/lib/SP/Services/ItemPreset/ItemPresetInterface.php +++ b/lib/SP/Services/ItemPreset/ItemPresetInterface.php @@ -35,4 +35,5 @@ interface ItemPresetInterface const ITEM_TYPE_ACCOUNT_TAG = 'account.tag'; const ITEM_TYPE_PASSWORD = 'password'; const ITEM_TYPE_ACCOUNT_PRIVATE = 'account.private'; + const ITEM_TYPE_SESSION_TIMEOUT = 'session.timeout'; } \ No newline at end of file diff --git a/tests/SP/Http/AddressTest.php b/tests/SP/Http/AddressTest.php new file mode 100644 index 00000000..3b37eb6a --- /dev/null +++ b/tests/SP/Http/AddressTest.php @@ -0,0 +1,268 @@ +. + */ + +namespace SP\Tests\Http; + +use Faker\Factory; +use PHPUnit\Framework\TestCase; +use SP\Core\Exceptions\InvalidArgumentException; +use SP\Http\Address; + +/** + * Class AddressTest + * + * @package SP\Tests\Http + */ +class AddressTest extends TestCase +{ + + /** + * @dataProvider binaryCheckProvider + * + * @param string $address + * + * @throws \SP\Core\Exceptions\InvalidArgumentException + */ + public function testBinary($address) + { + $binary = Address::toBinary($address); + + $this->assertNotEmpty($binary); + $this->assertEquals($address, Address::fromBinary($binary)); + } + + /** + * @return array + */ + public function binaryCheckProvider() + { + $faker = Factory::create(); + + $out = []; + + for ($i = 0; $i <= 100; $i++) { + $out[] = [$faker->ipv4]; + $out[] = [$faker->ipv6]; + } + + return $out; + } + + /** + * @throws \SP\Core\Exceptions\InvalidArgumentException + */ + public function testBinaryInvalidIpv4() + { + $this->expectException(InvalidArgumentException::class); + + Address::toBinary('192.168.0.256'); + } + + /** + * @throws \SP\Core\Exceptions\InvalidArgumentException + */ + public function testBinaryInvalidIpv6() + { + $this->expectException(InvalidArgumentException::class); + + Address::toBinary('1200::AB00:1234::2552:7777:1313'); + } + + /** + * @dataProvider checkAddressProvider + * + * @param string $address + * @param string $inAddress + * @param string $inMask + * @param bool $expected + * + * @throws \SP\Core\Exceptions\InvalidArgumentException + */ + public function testCheck($address, $inAddress, $inMask, $expected) + { + $this->assertEquals($expected, Address::check($address, $inAddress, $inMask)); + } + + /** + * @dataProvider checkAddressCidrProvider + * + * @param string $address + * @param string $inAddress + * @param string $inMask + * @param bool $expected + * + * @throws \SP\Core\Exceptions\InvalidArgumentException + */ + public function testCheckWithCidr($address, $inAddress, $inMask, $expected) + { + $this->assertEquals($expected, Address::check($address, $inAddress, Address::cidrToDec($inMask))); + } + + /** + * @return array + */ + public function checkAddressProvider() + { + return [ + ['192.168.0.1', '192.168.0.0', '255.255.255.0', true], + ['192.168.0.1', '192.168.0.0', '255.255.0.0', true], + ['192.168.0.1', '192.168.0.0', '255.0.0.0', true], + ['192.168.0.1', '192.168.1.0', '255.255.255.0', false], + ['192.168.0.1', '172.168.0.1', '255.255.0.0', false], + ['192.168.0.1', '10.0.0.1', '255.0.0.0', false] + ]; + } + + /** + * @return array + */ + public function checkAddressCidrProvider() + { + return [ + ['192.168.0.1', '192.168.0.0', '24', true], + ['192.168.0.1', '192.168.0.0', '16', true], + ['192.168.0.1', '192.168.0.0', '8', true], + ['192.168.0.1', '192.168.1.0', '24', false], + ['192.168.0.1', '172.168.0.1', '16', false], + ['192.168.0.1', '10.0.0.1', '8', false] + ]; + } + + /** + * @throws InvalidArgumentException + */ + public function testParse() + { + $address = '192.168.0.1/255.255.255.0'; + $parse = Address::parse4($address); + + $this->assertCount(5, $parse); + $this->assertArrayHasKey('address', $parse); + $this->assertEquals('192.168.0.1', $parse['address']); + $this->assertArrayHasKey('mask', $parse); + $this->assertEquals('255.255.255.0', $parse['mask']); + + $address = '192.168.0.2'; + $parse = Address::parse4($address); + + $this->assertCount(3, $parse); + $this->assertArrayHasKey('address', $parse); + $this->assertEquals('192.168.0.2', $parse['address']); + + $address = '192.168.0.1/24'; + $parse = Address::parse4($address); + + $this->assertCount(7, $parse); + $this->assertArrayHasKey('address', $parse); + $this->assertEquals('192.168.0.1', $parse['address']); + $this->assertArrayHasKey('cidr', $parse); + $this->assertEquals('24', $parse['cidr']); + } + + /** + * @throws InvalidArgumentException + */ + public function testParseInvalidIp() + { + $this->expectException(InvalidArgumentException::class); + + $address = '192.168.0.1000/255.255.255.0'; + Address::parse4($address); + } + + /** + * @throws InvalidArgumentException + */ + public function testParseInvalidMask() + { + $this->expectException(InvalidArgumentException::class); + + $address = '192.168.0.100/255.255.2500.0'; + Address::parse4($address); + } + + /** + * @throws InvalidArgumentException + */ + public function testParseInvalidCidr() + { + $this->expectException(InvalidArgumentException::class); + + $address = '192.168.0.100/100'; + Address::parse4($address); + } + + /** + * @dataProvider checkCidrProvider + * + * @param $cidr + * @param $mask + */ + public function testCidrToDec($cidr, $mask) + { + $this->assertEquals($mask, Address::cidrToDec($cidr)); + } + + /** + * @return array + */ + public function checkCidrProvider() + { + return [ + [32, '255.255.255.255'], + [31, '255.255.255.254'], + [30, '255.255.255.252'], + [29, '255.255.255.248'], + [28, '255.255.255.240'], + [27, '255.255.255.224'], + [26, '255.255.255.192'], + [25, '255.255.255.128'], + [24, '255.255.255.0'], + [23, '255.255.254.0'], + [22, '255.255.252.0'], + [21, '255.255.248.0'], + [20, '255.255.240.0'], + [19, '255.255.224.0'], + [18, '255.255.192.0'], + [17, '255.255.128.0'], + [16, '255.255.0.0'], + [15, '255.254.0.0'], + [14, '255.252.0.0'], + [13, '255.248.0.0'], + [12, '255.240.0.0'], + [11, '255.224.0.0'], + [10, '255.192.0.0'], + [9, '255.128.0.0'], + [8, '255.0.0.0'], + [7, '254.0.0.0'], + [6, '252.0.0.0'], + [5, '248.0.0.0'], + [4, '240.0.0.0'], + [3, '224.0.0.0'], + [2, '192.0.0.0'], + [1, '128.0.0.0'], + [0, '0.0.0.0'] + ]; + } +} diff --git a/tests/SP/Modules/Api/ApiTest.php b/tests/SP/Modules/Api/ApiTest.php index 3664f4c6..cf86c782 100644 --- a/tests/SP/Modules/Api/ApiTest.php +++ b/tests/SP/Modules/Api/ApiTest.php @@ -86,7 +86,7 @@ class ApiTest extends WebTestCase $this->assertInstanceOf(\stdClass::class, $result); $this->assertEquals('2.0', $result->jsonrpc); - $this->assertEquals('Oops, it looks like this content doesn\'t exist...', $result->error->message); + $this->assertEquals('Oops, it looks like this content does not exist...', $result->error->message); $this->assertEquals(JsonRpcResponse::METHOD_NOT_FOUND, $result->error->code); $this->assertNull($result->error->data); $this->assertEquals(1, $result->id); diff --git a/tests/SP/Repositories/AccountToUserRepositoryTest.php b/tests/SP/Repositories/AccountToUserRepositoryTest.php index 71d1729c..022ecbfd 100644 --- a/tests/SP/Repositories/AccountToUserRepositoryTest.php +++ b/tests/SP/Repositories/AccountToUserRepositoryTest.php @@ -73,43 +73,47 @@ class AccountToUserRepositoryTest extends DatabaseTestCase */ public function testGetUsersByAccountId() { - $users = self::$repository->getUsersByAccountId(1); + $result = self::$repository->getUsersByAccountId(1); + $this->assertEquals(1, $result->getNumRows()); - $this->assertCount(1, $users); - $this->assertInstanceOf(ItemData::class, $users[0]); + $resultData = $result->getDataAsArray(); - $usersView = array_filter($users, function ($user) { + $this->assertCount(1, $resultData); + $this->assertInstanceOf(ItemData::class, $resultData[0]); + + $usersView = array_filter($resultData, function ($user) { return (int)$user->isEdit === 0; }); $this->assertCount(0, $usersView); - $usersEdit = array_filter($users, function ($user) { + $usersEdit = array_filter($resultData, function ($user) { return (int)$user->isEdit === 1; }); $this->assertCount(1, $usersEdit); - $users = self::$repository->getUsersByAccountId(2); + $result = self::$repository->getUsersByAccountId(2); + $this->assertEquals(1, $result->getNumRows()); - $this->assertCount(1, $users); - $this->assertInstanceOf(ItemData::class, $users[0]); + $resultData = $result->getDataAsArray(); - $usersView = array_filter($users, function ($user) { + $this->assertCount(1, $resultData); + $this->assertInstanceOf(ItemData::class, $resultData[0]); + + $usersView = array_filter($resultData, function ($user) { return (int)$user->isEdit === 0; }); $this->assertCount(1, $usersView); - $usersEdit = array_filter($users, function ($user) { + $usersEdit = array_filter($resultData, function ($user) { return (int)$user->isEdit === 1; }); $this->assertCount(0, $usersEdit); - $users = self::$repository->getUsersByAccountId(3); - - $this->assertCount(0, $users); + $this->assertEquals(0, self::$repository->getUsersByAccountId(3)->getNumRows()); } /** @@ -126,15 +130,18 @@ class AccountToUserRepositoryTest extends DatabaseTestCase self::$repository->update($accountRequest); - $users = self::$repository->getUsersByAccountId($accountRequest->id); + $result = self::$repository->getUsersByAccountId($accountRequest->id); + $this->assertEquals(3, $result->getNumRows()); - $this->assertCount(3, $users); - $this->assertInstanceOf(ItemData::class, $users[0]); - $this->assertEquals(0, (int)$users[0]->isEdit); - $this->assertInstanceOf(ItemData::class, $users[1]); - $this->assertEquals(0, (int)$users[1]->isEdit); - $this->assertInstanceOf(ItemData::class, $users[2]); - $this->assertEquals(0, (int)$users[2]->isEdit); + $resultData = $result->getDataAsArray(); + + $this->assertCount(3, $resultData); + $this->assertInstanceOf(ItemData::class, $resultData[0]); + $this->assertEquals(0, (int)$resultData[0]->isEdit); + $this->assertInstanceOf(ItemData::class, $resultData[1]); + $this->assertEquals(0, (int)$resultData[1]->isEdit); + $this->assertInstanceOf(ItemData::class, $resultData[2]); + $this->assertEquals(0, (int)$resultData[2]->isEdit); $this->expectException(ConstraintException::class); @@ -162,13 +169,16 @@ class AccountToUserRepositoryTest extends DatabaseTestCase self::$repository->updateEdit($accountRequest); - $users = self::$repository->getUsersByAccountId($accountRequest->id); + $result = self::$repository->getUsersByAccountId($accountRequest->id); + $this->assertEquals(2, $result->getNumRows()); - $this->assertCount(2, $users); - $this->assertInstanceOf(ItemData::class, $users[0]); - $this->assertEquals(1, (int)$users[0]->isEdit); - $this->assertInstanceOf(ItemData::class, $users[1]); - $this->assertEquals(1, (int)$users[1]->isEdit); + $resultData = $result->getDataAsArray(); + + $this->assertCount(2, $resultData); + $this->assertInstanceOf(ItemData::class, $resultData[0]); + $this->assertEquals(1, (int)$resultData[0]->isEdit); + $this->assertInstanceOf(ItemData::class, $resultData[1]); + $this->assertEquals(1, (int)$resultData[1]->isEdit); $this->expectException(ConstraintException::class); @@ -193,7 +203,7 @@ class AccountToUserRepositoryTest extends DatabaseTestCase public function testDeleteByAccountId() { $this->assertEquals(1, self::$repository->deleteByAccountId(1)); - $this->assertCount(0, self::$repository->getUsersByAccountId(1)); + $this->assertEquals(0, self::$repository->getUsersByAccountId(1)->getNumRows()); $this->assertEquals(0, self::$repository->deleteByAccountId(10)); @@ -214,12 +224,15 @@ class AccountToUserRepositoryTest extends DatabaseTestCase self::$repository->addEdit($accountRequest); - $users = self::$repository->getUsersByAccountId($accountRequest->id); + $result = self::$repository->getUsersByAccountId($accountRequest->id); + $this->assertEquals(3, $result->getNumRows()); - $this->assertCount(3, $users); - $this->assertInstanceOf(ItemData::class, $users[0]); - $this->assertInstanceOf(ItemData::class, $users[1]); - $this->assertInstanceOf(ItemData::class, $users[2]); + $resultData = $result->getDataAsArray(); + + $this->assertCount(3, $resultData); + $this->assertInstanceOf(ItemData::class, $resultData[0]); + $this->assertInstanceOf(ItemData::class, $resultData[1]); + $this->assertInstanceOf(ItemData::class, $resultData[2]); $this->expectException(ConstraintException::class); @@ -249,12 +262,15 @@ class AccountToUserRepositoryTest extends DatabaseTestCase self::$repository->add($accountRequest); - $users = self::$repository->getUsersByAccountId($accountRequest->id); + $result = self::$repository->getUsersByAccountId($accountRequest->id); + $this->assertEquals(3, $result->getNumRows()); - $this->assertCount(3, $users); - $this->assertInstanceOf(ItemData::class, $users[0]); - $this->assertInstanceOf(ItemData::class, $users[1]); - $this->assertInstanceOf(ItemData::class, $users[2]); + $resultData = $result->getDataAsArray(); + + $this->assertCount(3, $resultData); + $this->assertInstanceOf(ItemData::class, $resultData[0]); + $this->assertInstanceOf(ItemData::class, $resultData[1]); + $this->assertInstanceOf(ItemData::class, $resultData[2]); $this->expectException(ConstraintException::class); @@ -279,7 +295,7 @@ class AccountToUserRepositoryTest extends DatabaseTestCase public function testDeleteEditByAccountId() { $this->assertEquals(1, self::$repository->deleteEditByAccountId(1)); - $this->assertCount(0, self::$repository->getUsersByAccountId(1)); + $this->assertEquals(0, self::$repository->getUsersByAccountId(1)->getNumRows()); $this->assertEquals(0, self::$repository->deleteEditByAccountId(10)); diff --git a/tests/SP/Services/Track/TrackServiceTest.php b/tests/SP/Services/Track/TrackServiceTest.php index 9afd74f2..373234be 100644 --- a/tests/SP/Services/Track/TrackServiceTest.php +++ b/tests/SP/Services/Track/TrackServiceTest.php @@ -106,6 +106,7 @@ class TrackServiceTest extends DatabaseTestCase /** * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\InvalidArgumentException * @throws \SP\Core\Exceptions\QueryException */ public function testGetAll() @@ -125,6 +126,7 @@ class TrackServiceTest extends DatabaseTestCase /** * @throws NoSuchItemException * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\InvalidArgumentException * @throws \SP\Core\Exceptions\QueryException */ public function testGetById() diff --git a/tests/res/config/config.xml b/tests/res/config/config.xml index 2b887800..8e203313 100644 --- a/tests/res/config/config.xml +++ b/tests/res/config/config.xml @@ -9,11 +9,11 @@ 1 1 - aac98603ec5e4687b1c7aa4698d46f4ed0d1f69a + dcb833cd3fbe28efe1702f066c6388e0aeeaa51c 0 0 - 1535672911 - c2bcaa6196a692aaf3a7dfee49186b577d44efcc + 1535830048 + 3de9cc9c7fbc82a96a65bb93850cbf5cdbf907c2 @@ -32,7 +32,7 @@ 0 - 7e54c872dca490dfbfae83baf6d045ccf92f2073 + ebe55b2571722b1f27c0ad259ad386d87defd119 PDF JPG